<?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>219283</bug_id>
          
          <creation_ts>2020-11-25 01:46:38 -0800</creation_ts>
          <short_desc>Make FontCache and FontCascadeCache thread-safe</short_desc>
          <delta_ts>2022-01-16 02:05:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=235277</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>220858</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1710046</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-11-25 01:46:38 -0800</bug_when>
    <thetext>For OffscreenCanvas and possibly GPUProcess, FontCache needs to be thread-safe. It looks like there is an amount of thread-safety for iOS, but that should be extended to all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711280</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-02 01:47:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/71887176&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737130</commentid>
    <comment_count>2</comment_count>
      <attachid>422578</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-08 09:51:30 -0800</bug_when>
    <thetext>Created attachment 422578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737530</commentid>
    <comment_count>3</comment_count>
      <attachid>422687</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-09 04:41:53 -0800</bug_when>
    <thetext>Created attachment 422687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738048</commentid>
    <comment_count>4</comment_count>
      <attachid>422829</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-10 07:07:22 -0800</bug_when>
    <thetext>Created attachment 422829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738825</commentid>
    <comment_count>5</comment_count>
      <attachid>423029</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-12 02:58:02 -0800</bug_when>
    <thetext>Created attachment 423029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1738843</commentid>
    <comment_count>6</comment_count>
      <attachid>423029</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-12 04:57:39 -0800</bug_when>
    <thetext>Comment on attachment 423029
Patch

Just to note, I realise the ChangeLog message is inadequate, I just don&apos;t want to needlessly retrigger EWS tests. Pretend it says this:

&quot;Remove the iOS-specific lock in FontCache and add a platform-independent lock that guards functions that use data that isn&apos;t safe for concurrent access. Make similar changes in some related classes so that FontCache becomes usable off the main thread.&quot;

Also, for what it&apos;s worth, I&apos;ve tested using a simple, canvas-based, font loading/drawing performance test and there&apos;s no discernable difference after applying this patch. I would certainly make sure this gets broader testing than that before even considering committing it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739003</commentid>
    <comment_count>7</comment_count>
      <attachid>423029</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-12 12:57:50 -0800</bug_when>
    <thetext>Comment on attachment 423029
Patch

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

I’m not sure this has the thread safety right. It’s good to do the locking more consistently but I don’t understand the thread safety implications of using AtomString in the internals here.

I need to understand more of the solid foundations of how this is thread-safe. I’d assume that more cross-thread copying would be needed to turn strings into a form that can be safely used across multiple threads guarded by a lock. If someone passes in a string it can only do ref/deref on one thread. The cross-thread copy could be used inside a lock on multiple threads.

None of this helps much with AtomString.

&quot;More locking&quot; is clear, but the rest of the story still seems not quite done.

&gt; Source/WebCore/ChangeLog:9
&gt; +        Make the FontCache lock not iOS-specific and use it in more places.

I think one thing we should be clear on is that the iOS FontCache locking was *only* to make it safe enough to use across the web thread and the main thread (both return true for isMainThread) in certain ways.

These changes now aim to make this safe to use from multiple threads, including non-web, non-main threads on iOS.

So this is not just about generalizing the iOS locking as if iOS was &quot;ahead&quot; and other platforms are catching up, it’s about adding a thorough locking strategy, which happens to allow us to remove the partial locking strategy that was only useful on iOS.

I know you wrote *better* change log text in the bug, but I wanted to clarify this situation and suggest even-better framing for the change.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:49
&gt; -
&gt;  

Remove one more blank line please.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:142
&gt; +const String* FontCache::alternateFamilyName(const AtomString&amp; familyName)

We should return just String or perhaps Optional&lt;ASCIILiteral&gt;. If it is String, there’s no need to work so hard to avoid reference count churn since we’re going to take a reference to the string anyway in the function that calls this function. Since String has a convenient null value, we don’t need to use a pointer or Optional just to add a null value. ASCIILiteral does need the Optional, and might be a good solution depending on how this actually is used by callers.

Changing the return type will clean up this family of functions a bit.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:144
&gt; +    static NeverDestroyed&lt;const String&gt; arial(&quot;Arial&quot;, String::ConstructFromLiteral);

These global variables are only OK because these strings are only used internally, never returned from any function, and all use is guarded by the font lock. It’s frustrating that there is nothing that helps make this clear. If anyone called this function outside the lock we’d have a super-subtle bug!

Not 100% sure that it’s an important optimization to use ConstructFromLiteral instead of just using the &quot;Arial&quot;_s syntax to make an ASCIILiteral, also unsure how important the global variable optimization is.

If we use ASCIILiteral all those questions just go away and the need for global variables goes away too.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:153
&gt; +    const String* platformSpecificAlternate = platformAlternateFamilyName(familyName);
&gt; +    if (platformSpecificAlternate)
&gt;          return platformSpecificAlternate;

Lets scope this local inside the if statement in cases like this:

    if (auto alternate = platformAlternateFamilyName(familyName); !alternate.isNull())
        return alternate;

&gt; Source/WebCore/platform/graphics/FontCache.cpp:220
&gt; +            const String* alternateName = alternateFamilyName(familyName);
&gt; +            if (alternateName) {

Please scope this in the if statement:

    if (auto&amp; alternateName = alternateFamilyName(familyName); !alternateName.isNull()) {

&gt; Source/WebCore/platform/graphics/FontCache.cpp:221
&gt; +                FontPlatformData* fontPlatformDataForAlternateName = getCachedFontPlatformData(fontDescription, *alternateName, fontFaceFeatures, fontFaceCapabilities, true);

I do not think it is thread-safe to turn a String into an AtomString here. I don’t understand why it’s OK for us to pass alternateName here. What prevents the global AtomString table from causing multiple threads to ref/deref the same object at the same time? Once we make an AtomString, unrelated code on another thread can also get that same string, and it’s then no longer safe to ref/deref it on more than one thread.

Now that I realize that alternateName is being passed to an AtomString constructor, I think it’s going to be expensive to keep looking up the names in the AtomString function every time this is called. Also, it seems the alternateFamilyName functions can just return ASCIILiteral if they are going to have to be turned into an AtomString every time anyway. Using a String that is not the AtomString has no performance advantage of value; just costs extra reference count churn for no good reason.

Or since this function *takes* an AtomString it seems like this is main-thread-only code. If it is, then why all the changes to the alternateFamilyName functions? That seems unrelated to the new locking and should be done in a separate patch with its own rationale.

Also, maybe use auto on this line.

&gt; Source/WebCore/platform/graphics/FontCache.h:293
&gt; +    static const String* alternateFamilyName(const AtomString&amp;);
&gt; +    static const String* platformAlternateFamilyName(const AtomString&amp;);

These should just return String; no reason to use a pointer for this. (See comments above.)

&gt; Source/WebCore/platform/graphics/FontCascadeDescription.cpp:107
&gt; +    if (family1.isEmpty() || family2.isEmpty())
&gt; +        return family1.isEmpty() &amp;&amp; family2.isEmpty();

Why is this change needed? ASCIICaseInsensitiveHash::equal should already handle empty strings correctly. Is this about null strings perhaps?

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:1431
&gt; +const String* FontCache::platformAlternateFamilyName(const AtomString&amp; familyName)

Same comments as above apply.

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:695
&gt; +const String* FontCache::platformAlternateFamilyName(const AtomString&amp; familyName)

Same thing again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739386</commentid>
    <comment_count>8</comment_count>
      <attachid>423162</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-15 05:47:22 -0700</bug_when>
    <thetext>Created attachment 423162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739428</commentid>
    <comment_count>9</comment_count>
      <attachid>423175</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-15 07:03:30 -0700</bug_when>
    <thetext>Created attachment 423175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739430</commentid>
    <comment_count>10</comment_count>
      <attachid>423177</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-15 07:23:19 -0700</bug_when>
    <thetext>Created attachment 423177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739440</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-15 07:49:03 -0700</bug_when>
    <thetext>I&apos;ve addressed some of the simpler comments from the review in comment #7, I&apos;m still considering the string usage. I&apos;ve not marked this patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739899</commentid>
    <comment_count>12</comment_count>
      <attachid>423318</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-16 04:46:02 -0700</bug_when>
    <thetext>Created attachment 423318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739903</commentid>
    <comment_count>13</comment_count>
      <attachid>423321</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-16 05:05:59 -0700</bug_when>
    <thetext>Created attachment 423321
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1739937</commentid>
    <comment_count>14</comment_count>
      <attachid>423321</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-16 08:03:39 -0700</bug_when>
    <thetext>Comment on attachment 423321
Patch

I think this is at least ready for another review round and further discussion.

I followed Darin&apos;s advice re changing the API for FontCache::platformAlternateFamilyName and that did indeed simplify things along that path. I also took a look through FontCache a bit more carefully and made sure to use isolated copies of strings that it expects to keep and use from multiple threads.

I think we could all feel more comfortable with this patch if there were more opportunities to assert if something behaves incorrectly, but no ideas are immediately coming to mind.

Feedback very much appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740178</commentid>
    <comment_count>15</comment_count>
      <attachid>423321</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-16 14:03:08 -0700</bug_when>
    <thetext>Comment on attachment 423321
Patch

Crashes on EWS for mac-debug-wk1 seem like actual bugs in this patch; please investigate. I may review before those are addressed, or I may wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740204</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-16 14:25:57 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #14)
&gt; I think we could all feel more comfortable with this patch if there were
&gt; more opportunities to assert if something behaves incorrectly, but no ideas
&gt; are immediately coming to mind.

A way to make us more confident would be to tighten the encapsulation. The smaller the class is that does isolatedCopy, the better. Could make a &quot;class within a class&quot; focused just on that issue with a minimal interface, then decorate with something more full featured for the publicly exposed class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740672</commentid>
    <comment_count>17</comment_count>
      <attachid>423473</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-17 05:13:11 -0700</bug_when>
    <thetext>Created attachment 423473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740676</commentid>
    <comment_count>18</comment_count>
      <attachid>423476</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-17 05:34:05 -0700</bug_when>
    <thetext>Created attachment 423476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740704</commentid>
    <comment_count>19</comment_count>
      <attachid>423487</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-17 07:50:39 -0700</bug_when>
    <thetext>Created attachment 423487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740873</commentid>
    <comment_count>20</comment_count>
      <attachid>423487</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-17 13:29:32 -0700</bug_when>
    <thetext>Comment on attachment 423487
Patch

I&apos;ve condensed the ChangeLog entry and annotated the changes made in each set of files for ease of reviewing/discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740903</commentid>
    <comment_count>21</comment_count>
      <attachid>423487</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-17 14:12:13 -0700</bug_when>
    <thetext>Comment on attachment 423487
Patch

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

&gt; Source/WebCore/platform/graphics/FontCache.cpp:187
&gt;      // IE disregards &quot;@&quot; regardless of the orientatoin, so we follow the behavior.

While touching this, I think we should fix the spelling of &quot;orientatoin&quot;.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:189
&gt; +    const String&amp; familyName = (passedFamilyName.isEmpty() || passedFamilyName[0] != &apos;@&apos;) ?
&gt; +        passedFamilyName : String(passedFamilyName.impl()-&gt;substring(1));

String(passedFamilyName.impl()-&gt;substring(1)) is the same thing as passedFamilyName.substring(1); we can write it the simpler way. String subscripting has built in length checking, and passing an index past the end of the string returns a null character. String::substring has a special case when passed 0 to just return the whole string. Combining those three things this can be written:

    String familyName = passedFamilyName.substring(passedFamilyName[0] == &apos;@&apos; ? 1 : 0);

I think I like that one-liner better.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:418
&gt; +        key.families.uncheckedAppend(description.familyAt(i).string().isolatedCopy());

For performance, it’s a shame that we make all the isolated copies just to do a cache lookup. It would be better for performance to structure things so the isolated copies are only made after failing to find a cached font in FontCache::retrieveOrAddCachedFonts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740932</commentid>
    <comment_count>22</comment_count>
      <attachid>423487</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-17 15:52:12 -0700</bug_when>
    <thetext>Comment on attachment 423487
Patch

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

Looking good overall.

Strategy seems great! Details may not quite be right yet. Need better explanation of what we did and why for me to form an opinion.

I’m a little confused about each reference counted object. Why does each need a thread-safe reference count, and why is it OK to only make the reference count thread-safe, no need to do make other operations on the object guarded, atomic, or thread-safe.

What was the strategy for which functions to hold locks in? What’s the rule of thumb we are following?

Please also consider the &quot;less isolated copying&quot; strategy I mention below.

&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:418
&gt;&gt; +        key.families.uncheckedAppend(description.familyAt(i).string().isolatedCopy());
&gt; 
&gt; For performance, it’s a shame that we make all the isolated copies just to do a cache lookup. It would be better for performance to structure things so the isolated copies are only made after failing to find a cached font in FontCache::retrieveOrAddCachedFonts.

We should consider this. I don’t think that a key should intrinsically always be an isolated copy. Instead we should add an &quot;isolatedCopy&quot; function or an &quot;isolate&quot; function that works in place to the class and use it at the right time.

This should help *significantly* with performance.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:503
&gt; +    auto locker = holdLock(m_lock);

Seems obviously unsafe to guard a single *global* clients set with a lock that is per-FontCache instance. We’d need to change gClients to be a data member, perhaps?

&gt; Source/WebCore/platform/graphics/FontCascadeDescription.cpp:107
&gt; +    if (family1.isNull() || family2.isNull())
&gt; +        return false;

Why exactly do we need this change?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:181
&gt; +    // Check again with lock held. This allows us to have a lock-less fast path in the common case that
&gt; +    // this fallback range has already been realized without introducing a race condition.

The general rule of thumb is that double checked lock patterns don’t work. I’m not sure why it works here.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:213
&gt; +    return m_realizedFallbackRanges.last();

Does not seem safe to return a FontRanges object here given that it contains a Ref&lt;FontAccessor&gt;, which uses a non-thread-safe reference count.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:642
&gt;      static NeverDestroyed&lt;String&gt; arabic(MAKE_STATIC_STRING_IMPL(&quot;Arabic&quot;));
&gt;      static NeverDestroyed&lt;String&gt; pashto(MAKE_STATIC_STRING_IMPL(&quot;Pashto&quot;));
&gt;      static NeverDestroyed&lt;String&gt; urdu(MAKE_STATIC_STRING_IMPL(&quot;Urdu&quot;));
&gt;      static String* matchWords[3] = { &amp;arabic.get(), &amp;pashto.get(), &amp;urdu.get() };

These globals are dangerous. Two different threads can race trying to initialize the same globals. These need to be something that doesn’t need initialization, like using constexpr.

There is no need to use String here. There is a containsIgnoringASCIICase function that takes a StringView; these can just be const char* or ASCIILiteral, and we can call StringView(family).containsIgnoringASCIICase(matchWord). All that strange String* stuff is not needed.

&gt; Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:323
&gt;          return *font;

Not new: This should be font.releaseNonNull(), not *font, to avoid reference count churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741295</commentid>
    <comment_count>23</comment_count>
      <attachid>423625</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-18 11:42:37 -0700</bug_when>
    <thetext>Created attachment 423625
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741304</commentid>
    <comment_count>24</comment_count>
      <attachid>423627</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-18 11:49:03 -0700</bug_when>
    <thetext>Created attachment 423627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741309</commentid>
    <comment_count>25</comment_count>
      <attachid>423629</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-18 11:53:47 -0700</bug_when>
    <thetext>Created attachment 423629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741322</commentid>
    <comment_count>26</comment_count>
      <attachid>423631</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-18 12:15:59 -0700</bug_when>
    <thetext>Created attachment 423631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741386</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-18 13:36:04 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #22)
&gt; Comment on attachment 423487 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423487&amp;action=review
&gt; 
&gt; Looking good overall.
&gt; 
&gt; Strategy seems great! Details may not quite be right yet. Need better
&gt; explanation of what we did and why for me to form an opinion.
&gt; 
&gt; I’m a little confused about each reference counted object. Why does each
&gt; need a thread-safe reference count, and why is it OK to only make the
&gt; reference count thread-safe, no need to do make other operations on the
&gt; object guarded, atomic, or thread-safe.
&gt; 
&gt; What was the strategy for which functions to hold locks in? What’s the rule
&gt; of thumb we are following?

Which method I&apos;ve chosen has generally been guided by an object&apos;s expected use and the data it holds - so FontCache, being a main-thread singleton cache gets locking, but things like Font-related objects, which will most of the time be taken temporarily and used in hot-paths, use locking where necessary, and where possible I&apos;ve avoided it to maintain performance. I don&apos;t think I&apos;ve used any atomic members explicitly, only via ThreadSafeRefCounted - for the classes that have just become ThreadSafeRefCounted and nothing else changed, it&apos;s usually because they&apos;re really just immutable data structures and thus thread-safe after creation.

I have a local branch with OffscreenCanvas text enabled which also helps a lot in determining problem areas. The patch as it is allows text to work on OffscreenCanvas without any obvious flaws, but I don&apos;t expect that it&apos;s perfect just yet. This will likely take some iteration, but I&apos;m eager to get in as many of the big, non-breaking changes as possible to minimise the amount of time maintaining out-of-tree patches. I&apos;m hoping with this as a start that other interested stakeholders (both in OffscreenCanvas and a thread-safe FontCache) might help with feedback, testing and further work.

&gt; Please also consider the &quot;less isolated copying&quot; strategy I mention below.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:418
&gt; &gt;&gt; +        key.families.uncheckedAppend(description.familyAt(i).string().isolatedCopy());
&gt; &gt; 
&gt; &gt; For performance, it’s a shame that we make all the isolated copies just to do a cache lookup. It would be better for performance to structure things so the isolated copies are only made after failing to find a cached font in FontCache::retrieveOrAddCachedFonts.
&gt; 
&gt; We should consider this. I don’t think that a key should intrinsically
&gt; always be an isolated copy. Instead we should add an &quot;isolatedCopy&quot; function
&gt; or an &quot;isolate&quot; function that works in place to the class and use it at the
&gt; right time.
&gt; 
&gt; This should help *significantly* with performance.

I took your advice, and of course you&apos;re right - where as that version of the patch measured about a 2.2% performance decrease in my local font performance test, this change made that a 1.6% deficit, and then changes to FontCascadeFonts with regards to locking (now lock-free in the most common uses) made up for the rest. I still expect this patch to be some kind of performance regression, but I&apos;ll ask Per Arne to run tests once we&apos;ve gotten to a place we&apos;re happy with with respect to the code.

&gt; &gt; Source/WebCore/platform/graphics/FontCache.cpp:503
&gt; &gt; +    auto locker = holdLock(m_lock);
&gt; 
&gt; Seems obviously unsafe to guard a single *global* clients set with a lock
&gt; that is per-FontCache instance. We’d need to change gClients to be a data
&gt; member, perhaps?

You&apos;re right, I&apos;m not sure how I managed to miss this - I&apos;ve introduced a static lock associated with the platform data cache that guards the global variables within this file. I did consider making them member variables, but I could see somewhat why they weren&apos;t, and where possible, I&apos;d like to favour the smaller change.

&gt; &gt; Source/WebCore/platform/graphics/FontCascadeDescription.cpp:107
&gt; &gt; +    if (family1.isNull() || family2.isNull())
&gt; &gt; +        return false;
&gt; 
&gt; Why exactly do we need this change?

Changing from AtomString to String, ASCIICaseInsensitiveHash::equal doesn&apos;t handle null strings. I&apos;ve returned false here to match the very similar situation found in FontPlatformDataCacheKey::operator== in FontCache.cpp.

&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:181
&gt; &gt; +    // Check again with lock held. This allows us to have a lock-less fast path in the common case that
&gt; &gt; +    // this fallback range has already been realized without introducing a race condition.
&gt; 
&gt; The general rule of thumb is that double checked lock patterns don’t work.
&gt; I’m not sure why it works here.

You&apos;re right and this has disappeared - the current code is what I was really intending for. The general thought here though is that for the lifetime of FontCascadeFonts, the array being checked only ever grows in size... But as I write this, I realise of course that this is a Vector, not an array, and that it growing in size may invalidate previous elements, so this needs to change. I think given that this is commonly expected to be just size==1, this could be some kind of embedded linked list or something along those lines.

&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:213
&gt; &gt; +    return m_realizedFallbackRanges.last();
&gt; 
&gt; Does not seem safe to return a FontRanges object here given that it contains
&gt; a Ref&lt;FontAccessor&gt;, which uses a non-thread-safe reference count.

Again, you&apos;re right, this isn&apos;t safe - it turns out that only three functions were ever called on the FontRanges object and they were all short-lived, so instead of exposing that, I&apos;ve added accessors for those functions to this class so that they can be accessed while the FontCascadeFonts is guaranteed to be alive.

&gt; &gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:642
&gt; &gt;      static NeverDestroyed&lt;String&gt; arabic(MAKE_STATIC_STRING_IMPL(&quot;Arabic&quot;));
&gt; &gt;      static NeverDestroyed&lt;String&gt; pashto(MAKE_STATIC_STRING_IMPL(&quot;Pashto&quot;));
&gt; &gt;      static NeverDestroyed&lt;String&gt; urdu(MAKE_STATIC_STRING_IMPL(&quot;Urdu&quot;));
&gt; &gt;      static String* matchWords[3] = { &amp;arabic.get(), &amp;pashto.get(), &amp;urdu.get() };
&gt; 
&gt; These globals are dangerous. Two different threads can race trying to
&gt; initialize the same globals. These need to be something that doesn’t need
&gt; initialization, like using constexpr.
&gt; 
&gt; There is no need to use String here. There is a containsIgnoringASCIICase
&gt; function that takes a StringView; these can just be const char* or
&gt; ASCIILiteral, and we can call
&gt; StringView(family).containsIgnoringASCIICase(matchWord). All that strange
&gt; String* stuff is not needed.

I&apos;ve made this change, but is this true? I thought the modern-ish C++ standard guaranteed that static variable initialisation was thread-safe?

&gt; &gt; Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:323
&gt; &gt;          return *font;
&gt; 
&gt; Not new: This should be font.releaseNonNull(), not *font, to avoid reference
&gt; count churn.

Change made.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741387</commentid>
    <comment_count>28</comment_count>
      <attachid>423631</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-18 13:37:36 -0700</bug_when>
    <thetext>Comment on attachment 423631
Patch

I don&apos;t expect this review to be granted necessarily given my last comment (or indeed given any other issues that the patch may contain), but I&apos;d still very much appreciate any more feedback you have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741408</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-18 14:07:26 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #27)
&gt; ASCIICaseInsensitiveHash::equal doesn&apos;t
&gt; handle null strings.

Very strange choice on the part of the person who wrote that. (Me, probably.)

&gt; I&apos;ve returned false here to match the very similar
&gt; situation found in FontPlatformDataCacheKey::operator== in FontCache.cpp.

I would have suggested returning true if both are null. A semantic where something is not equal to itself might be OK, but I think it&apos;s unnecessarily confusing to program with.

&gt; I thought the modern-ish C++
&gt; standard guaranteed that static variable initialisation was thread-safe?

C++ does indeed guarantee this and has for a very long time, but not in the WebKit project. At least on the Apple platforms, WebKit is compiled with thread safety for static variable initialization turned off, for performance reasons. Some day we might be able to solve the performance problem some other way and reverse that decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741413</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-18 14:14:40 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #29)
&gt; (In reply to Chris Lord from comment #27)
&gt; &gt; I&apos;ve returned false here to match the very similar
&gt; &gt; situation found in FontPlatformDataCacheKey::operator== in FontCache.cpp.
&gt; 
&gt; I would have suggested returning true if both are null. A semantic where
&gt; something is not equal to itself might be OK, but I think it&apos;s unnecessarily
&gt; confusing to program with.

Ah, seems you missed a subtle point about FontPlatformDataCacheKey::operator== that makes it different from what we did here. That function returns false when both are null *after* a checking if the two impl pointers are equal. If they are equal, it returns true. When both strings are null, both have a null impl pointer, so that function will return true, not false, in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741423</commentid>
    <comment_count>31</comment_count>
      <attachid>423631</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-18 14:26:28 -0700</bug_when>
    <thetext>Comment on attachment 423631
Patch

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

&gt; Source/WebCore/platform/graphics/FontCache.cpp:69
&gt; +        , m_family(family.isolatedCopy())

I think we should do something similar to what we did for FontCascadeCacheKey, and isolate when storing the key rather than isolating when we create the key for lookup. The change would be in FontCache::getCachedFontPlatformData.

&gt; Source/WebCore/platform/graphics/FontCascadeDescription.cpp:117
&gt;      return ASCIICaseInsensitiveHash::hash(family);

This function will crash when passed a null string. I don’t fully understand why we need null checks in familyNamesAreEqual and not here.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:122
&gt; +    auto locker = holdLockIf(m_lock, !m_realizedFallbackRanges.size());

Could use isEmpty() here instead of !size().

Also, probably needs a &quot;why&quot; comment explaining why we definitely need a lock when the realized fallback ranges vector is not empty, but definitely don’t need one if it is empty. For example, can another thread change m_realizedFallbackRanges?

This feels like a &quot;bad code smell&quot; and seems unlikely to be 100% correct, but it might just be something too subtle for me to figure out without a comment.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:214
&gt; +    auto locker = holdLockIf(m_lock, m_realizedFallbackRanges.size() &lt;= index);

May need a &quot;why&quot; comment?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:216
&gt; +    auto&amp; ranges = realizeFallbackRangesAt(description, index);
&gt; +    return ranges.isNull();

Better as a one-liner?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:221
&gt; +    auto locker = holdLockIf(m_lock, m_realizedFallbackRanges.size() &lt;= index);

May need a &quot;why&quot; comment?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:223
&gt; +    auto&amp; ranges = realizeFallbackRangesAt(description, index);
&gt; +    return ranges.fontForCharacter(character);

Better as a one-liner?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:228
&gt; +    auto locker = holdLockIf(m_lock, !m_realizedFallbackRanges.size());

May need a &quot;why&quot; comment?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:230
&gt; +    auto&amp; ranges = realizeFallbackRangesAt(description, 0);
&gt; +    return ranges.fontForFirstRange();

Better as a one-liner?

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:641
&gt; +    for (auto&amp; matchWord : matchWords) {

Could use &quot;auto&quot; instead of &quot;auto&amp;&quot;.

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:642
&gt; +        if (equalIgnoringASCIICase(familyMatcher, StringView(matchWord)))

Probably don’t need an explicit cast to StringView here.

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:376
&gt; +    static NeverDestroyed&lt;String&gt; fallbackFontName;

Seems like an unsafe use of a global.

&gt; Source/WebCore/platform/graphics/win/FontCacheWin.cpp:393
&gt; +    static NeverDestroyed&lt;const String&gt; fallbackFonts[] = {
&gt; +        String(&quot;Times New Roman&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Microsoft Sans Serif&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Tahoma&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Lucida Sans Unicode&quot;, String::ConstructFromLiteral),
&gt; +        String(&quot;Arial&quot;, String::ConstructFromLiteral)
&gt;      };

Seems like an unsafe use of a global.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741634</commentid>
    <comment_count>32</comment_count>
      <attachid>423707</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-19 02:21:02 -0700</bug_when>
    <thetext>Created attachment 423707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741635</commentid>
    <comment_count>33</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-19 02:23:01 -0700</bug_when>
    <thetext>I&apos;ve added some asserts that I expect may be hit in FontCascadeDescription (which is why I added the null checks at all) - I&apos;ll use the EWS results to fix the call-site and leave the asserts there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741636</commentid>
    <comment_count>34</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-19 02:24:39 -0700</bug_when>
    <thetext>All comments addressed, except...

(In reply to Darin Adler from comment #31)
&gt; &gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:642
&gt; &gt; +        if (equalIgnoringASCIICase(familyMatcher, StringView(matchWord)))
&gt; 
&gt; Probably don’t need an explicit cast to StringView here.

I think we do? The String(ASCIILiteral) constructor is private and the StringView(ASCIILiteral) constructor is declared explicit. Unless I&apos;m misunderstanding how this works of course, which is highlight likely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741647</commentid>
    <comment_count>35</comment_count>
      <attachid>423711</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-19 03:17:30 -0700</bug_when>
    <thetext>Created attachment 423711
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741659</commentid>
    <comment_count>36</comment_count>
      <attachid>423716</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-19 04:12:11 -0700</bug_when>
    <thetext>Created attachment 423716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741670</commentid>
    <comment_count>37</comment_count>
      <attachid>423716</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-19 06:02:45 -0700</bug_when>
    <thetext>Comment on attachment 423716
Patch

Ok, disregard my previous comment - the null check is required and I&apos;ve made it more explicit and corrected the null string misapprehension in familyNamesAreEqual. I think we&apos;re ready for another round again :)

With regards to the locking in FontCascadeFonts, I have added a comment, but I&apos;m not married to this particular way of doing it if we can think of something better. It does seem this part of the code has an impact on performance; locking unconditionally here has a noticeable effect, so it would be good to come up with a solution that could avoid locking in the common case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741838</commentid>
    <comment_count>38</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-19 12:30:55 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #34)
&gt; The String(ASCIILiteral) constructor is private

No, it’s not private. WTF_EXPORT_PRIVATE means that it is exported but not as part of &quot;API&quot; for use outside WebKit. Not related to the similarly named concept of private members in a class.

&gt; the
&gt; StringView(ASCIILiteral) constructor is declared explicit

Not insisting on doing it in this patch: We should fix this. The ASCIILiteral -&gt; StringView construction is inexpensive (just computes a string length) and lossless; it should not be explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742151</commentid>
    <comment_count>39</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-22 01:04:39 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #38)
&gt; (In reply to Chris Lord from comment #34)
&gt; &gt; The String(ASCIILiteral) constructor is private
&gt; 
&gt; No, it’s not private. WTF_EXPORT_PRIVATE means that it is exported but not
&gt; as part of &quot;API&quot; for use outside WebKit. Not related to the similarly named
&gt; concept of private members in a class.
&gt; 
&gt; &gt; the
&gt; &gt; StringView(ASCIILiteral) constructor is declared explicit
&gt; 
&gt; Not insisting on doing it in this patch: We should fix this. The
&gt; ASCIILiteral -&gt; StringView construction is inexpensive (just computes a
&gt; string length) and lossless; it should not be explicit.

Ah, I see - perhaps it was made explicit to disambiguate between the String and StringView constructors in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742342</commentid>
    <comment_count>40</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-22 12:01:09 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #39)
&gt; Ah, I see - perhaps it was made explicit to disambiguate between the String
&gt; and StringView constructors in that case?

Maybe, but seems unlikely. The same would come up with many other String/StringView constructors with the same argument type. And the String constructor is the one that does memory allocation, so it’s the less-preferred one when there is ambiguity, so if this is an effect to avoid ambiguity, it&apos;s an ill advised one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742722</commentid>
    <comment_count>41</comment_count>
      <attachid>423999</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-23 02:03:11 -0700</bug_when>
    <thetext>Created attachment 423999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742724</commentid>
    <comment_count>42</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-23 02:10:59 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #41)
&gt; Created attachment 423999 [details]
&gt; Patch

This contains just one small revision in FontCacheFreeType.cpp where we were accessing the global font family name atoms (which, correctly, asserts when done on the wrong thread).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742873</commentid>
    <comment_count>43</comment_count>
      <attachid>423999</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-23 09:56:16 -0700</bug_when>
    <thetext>Comment on attachment 423999
Patch

I&apos;m removing the review request - FontCascadeFonts still holds a reference to CSSFontSelector in this patch and that class is definitely not safe to use away from its creation thread. I need to address this before we carry on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742965</commentid>
    <comment_count>44</comment_count>
      <attachid>423999</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-23 13:02:51 -0700</bug_when>
    <thetext>Comment on attachment 423999
Patch

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

&gt; Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:341
&gt; +    if (family == familyNamesData-&gt;at(static_cast&lt;unsigned&gt;(FamilyNamesIndex::StandardFamily)) || familyNamesData-&gt;at(static_cast&lt;unsigned&gt;(FamilyNamesIndex::SerifFamily)))

This is missing a &quot;family ==&quot; after &quot;||&quot;. Makes me wonder what our test coverage is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743280</commentid>
    <comment_count>45</comment_count>
      <attachid>424127</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 05:05:46 -0700</bug_when>
    <thetext>Created attachment 424127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743284</commentid>
    <comment_count>46</comment_count>
      <attachid>424128</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 06:03:21 -0700</bug_when>
    <thetext>Created attachment 424128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743285</commentid>
    <comment_count>47</comment_count>
      <attachid>424129</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 06:09:19 -0700</bug_when>
    <thetext>Created attachment 424129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743315</commentid>
    <comment_count>48</comment_count>
      <attachid>424129</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 07:54:59 -0700</bug_when>
    <thetext>Comment on attachment 424129
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Make FontCache and FontCascadeCache thread-safe

This changelog does not explain why we&apos;re doing this.
This has a perf cost so we&apos;d need a good reason.

&gt; Source/WebCore/dom/ActiveDOMObject.cpp:79
&gt; +    ASSERT(canCurrentThreadAccessThreadLocalData(m_creationThread));

This change looks a bit scary. ActiveDOMObject should always get destroyed on their context thread. I don&apos;t think making this change is OK and it is likely covering up a bug.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:93
&gt; +    void isolate() { m_family = m_family.isolatedCopy(); }

WebKit has a pattern for this. The function is called isolatedCopy() and it returns a new Object. It is important to follow the pattern so that CrossThreadCopier works as expected with all types.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:429
&gt; +static void isolateFontCascadeCacheKey(FontCascadeCacheKey&amp; key)

Ditto.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:75
&gt; +    bool fallbackRangesAreNull(const FontCascadeDescription&amp;, unsigned);

Can this function be const?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:76
&gt; +    const Font* fontForCharacter(const FontCascadeDescription&amp;, unsigned fallbackRangesIndex, UChar32);

Can this function be const?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:77
&gt; +    const Font&amp; fontForFirstRange(const FontCascadeDescription&amp;);

Can this function be const?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:85
&gt; +    const Font* findBestFallbackFont(const FontCascadeDescription&amp;, UChar32);

Can this function be const?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:89
&gt; +    WEBCORE_EXPORT const FontRanges&amp; realizeFallbackRangesAt(const FontCascadeDescription&amp;, unsigned fallbackIndex);

Can this function be const?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:91
&gt; +    StdList&lt;FontRanges&gt; m_realizedFallbackRanges;

Why replace the Vector with a StdList?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:140
&gt; +    auto locker = holdLock(m_lock);

This does not look thread-safe. The locker should likely be at the beginning of the function, before you check if m_cachedPrimaryFont is null. Double-checked locking is not safe in C++.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743334</commentid>
    <comment_count>49</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 09:02:30 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #48)
&gt; Comment on attachment 424129 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424129&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Make FontCache and FontCascadeCache thread-safe
&gt; 
&gt; This changelog does not explain why we&apos;re doing this.
&gt; This has a perf cost so we&apos;d need a good reason.

I&apos;ve added a note that this is for OffscreenCanvas (I guess this could also be for GPUProcess too? I don&apos;t know enough about that to comment though, but someone mentioned it in the past)

&gt; &gt; Source/WebCore/dom/ActiveDOMObject.cpp:79
&gt; &gt; +    ASSERT(canCurrentThreadAccessThreadLocalData(m_creationThread));
&gt; 
&gt; This change looks a bit scary. ActiveDOMObject should always get destroyed
&gt; on their context thread. I don&apos;t think making this change is OK and it is
&gt; likely covering up a bug.

It is, but I think I&apos;ve realised an alternative here that might work ok - the problem here is that FontCascadeFonts holds a reference to CSSFontSelector, and once text functions are enabled on OffscreenCanvas, it&apos;s possible for it to end up unrefing after Document/WorkerGlobalScope have been destroyed on a different thread.

&gt; &gt; Source/WebCore/platform/graphics/FontCache.cpp:93
&gt; &gt; +    void isolate() { m_family = m_family.isolatedCopy(); }
&gt; 
&gt; WebKit has a pattern for this. The function is called isolatedCopy() and it
&gt; returns a new Object. It is important to follow the pattern so that
&gt; CrossThreadCopier works as expected with all types.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCache.cpp:429
&gt; &gt; +static void isolateFontCascadeCacheKey(FontCascadeCacheKey&amp; key)
&gt; 
&gt; Ditto.

Ok, will change.

&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:75
&gt; &gt; +    bool fallbackRangesAreNull(const FontCascadeDescription&amp;, unsigned);
&gt; 
&gt; Can this function be const?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:76
&gt; &gt; +    const Font* fontForCharacter(const FontCascadeDescription&amp;, unsigned fallbackRangesIndex, UChar32);
&gt; 
&gt; Can this function be const?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:77
&gt; &gt; +    const Font&amp; fontForFirstRange(const FontCascadeDescription&amp;);
&gt; 
&gt; Can this function be const?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:85
&gt; &gt; +    const Font* findBestFallbackFont(const FontCascadeDescription&amp;, UChar32);
&gt; 
&gt; Can this function be const?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:89
&gt; &gt; +    WEBCORE_EXPORT const FontRanges&amp; realizeFallbackRangesAt(const FontCascadeDescription&amp;, unsigned fallbackIndex);
&gt; 
&gt; Can this function be const?

None of these functions can be const I don&apos;t think because they all call realizeFallbackRangesAt.

&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:91
&gt; &gt; +    StdList&lt;FontRanges&gt; m_realizedFallbackRanges;
&gt; 
&gt; Why replace the Vector with a StdList?

This is to enable access of earlier nodes in the list without locking - the comment at the top of realizeFallbackRangesAt tries to explain this.

&gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:140
&gt; &gt; +    auto locker = holdLock(m_lock);
&gt; 
&gt; This does not look thread-safe. The locker should likely be at the beginning
&gt; of the function, before you check if m_cachedPrimaryFont is null.
&gt; Double-checked locking is not safe in C++.

You&apos;re right, I&apos;ll replace this with std::call_once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743367</commentid>
    <comment_count>50</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 10:01:04 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #49)
&gt; (In reply to Chris Dumez from comment #48)
&gt; &gt; &gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:140
&gt; &gt; &gt; +    auto locker = holdLock(m_lock);
&gt; &gt; 
&gt; &gt; This does not look thread-safe. The locker should likely be at the beginning
&gt; &gt; of the function, before you check if m_cachedPrimaryFont is null.
&gt; &gt; Double-checked locking is not safe in C++.
&gt; 
&gt; You&apos;re right, I&apos;ll replace this with std::call_once.

I misunderstood how this part of the code is expected to work, call_once can&apos;t work here. We really don&apos;t want to incur the lock penalty here if possible though, I&apos;m working on this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743392</commentid>
    <comment_count>51</comment_count>
      <attachid>424154</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 10:32:34 -0700</bug_when>
    <thetext>Created attachment 424154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743413</commentid>
    <comment_count>52</comment_count>
      <attachid>424154</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-24 11:01:25 -0700</bug_when>
    <thetext>Comment on attachment 424154
Patch

I would prefer to wait until this is green, but I&apos;m taking a day off tomorrow and I&apos;m hoping that even if it isn&apos;t green, that whatever fails is something minor... All review/feedback/comment appreciated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745598</commentid>
    <comment_count>53</comment_count>
      <attachid>424154</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-03-31 05:40:24 -0700</bug_when>
    <thetext>Comment on attachment 424154
Patch

After some discussion, we&apos;re taking a different route with this - I&apos;m leaving this bug open for now in case GPUProcess needs this and this patch is helpful.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422578</attachid>
            <date>2021-03-08 09:51:30 -0800</date>
            <delta_ts>2021-03-09 04:41:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210308175129.patch</filename>
            <type>text/plain</type>
            <size>28756</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTc1N2ZkMDY3ODMxMGMz
NmQ2ZDFlODg1ZmJmMjhmYWMzMmU3ZDM2My4uN2RmMGIyNDU2ZTExYzFiYjRmZTg0NjFhODcxODc2
NTkyNWQzMDA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIHRoZSBGb250Q2FjaGUgbG9jayBub3QgaU9TLXNwZWNpZmljIGFuZCB1c2UgaXQgaW4gbW9y
ZSBwbGFjZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhp
c3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Rm9udENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpmb250Rm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9u
dEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6dXBkYXRl
Rm9udENhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OmdlbmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhh
c2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAyMDIx
LTAzLTA4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3MzA4NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIz
MmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9u
dEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0
YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNz
IEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAg
IC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2Jh
Y2MxYWY3MmI0NmYwY2M5MDk2ZC4uZmQ1ZDRiODBmMDgxNDZhODI2YzdjMzViOGIzZWYxMDg4NzY4
ZTI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCkBAIC00NiwxNCArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgi
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2su
aD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vy
c2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw3ICs1Nyw3
IEBAIEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0b24oKQogfQogCiBGb250Q2FjaGU6OkZv
bnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKQorICAgIDogbV9wdXJnZVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCiB7CiB9
CiAKQEAgLTczLDcgKzY1LDcgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5KCkgeyB9Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKKyAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMs
IEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMp
CiAgICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCiAgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5KQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZl
YXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCkBAIC0x
MDAsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uS2V5IG1f
Zm9udERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7CisgICAgU3RyaW5n
IG1fZmFtaWx5OwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwog
ICAgIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxp
dGllczsKIH07CkBAIC0xNDcsMzMgKzEzOSwzMyBAQCBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKQogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiQ291cmllciIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXJOZXcoIkNvdXJpZXIgTmV3IiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lcygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBwbGF0
Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZS5pc051bGwoKSkKKyAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYXJpYWwoIkFy
aWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdGltZXMoIlRpbWVzIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRpbWVzTmV3Um9tYW4o
IlRpbWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAg
Y29uc3QgU3RyaW5nKiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOworICAgIGlmIChwbGF0Zm9ybVNwZWNpZmljQWx0ZXJu
YXRlKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAgIHN3
aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAgICAg
ICAgICAgcmV0dXJuIGhlbHZldGljYTsKKyAgICAgICAgICAgIHJldHVybiAmaGVsdmV0aWNhLmdl
dCgpOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgInRpbWVzIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAg
ICAgIHJldHVybiAmdGltZXNOZXdSb21hbi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAg
ICAgcmV0dXJuICZjb3VyaWVyTmV3LmdldCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDk6
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
aGVsdmV0aWNhIikpCi0gICAgICAgICAgICByZXR1cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1
cm4gJmFyaWFsLmdldCgpOwogICAgICAgICBicmVhazsKICNpZiAhT1MoV0lORE9XUykKICAgICAv
LyBPbiBXaW5kb3dzLCBDb3VyaWVyIE5ldyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdh
eXMgcHJlc2VudCBhbmQKQEAgLTE4MywyNSArMTc1LDIxIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZv
bnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
KQogICAgIC8vIG9ubHkgYmUgdHJpZWQgaWYgQ291cmllciBOZXcgaXMgbm90IGZvdW5kLgogICAg
IGNhc2UgMTE6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHlOYW1lLCAiY291cmllciBuZXciKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyOworICAg
ICAgICAgICAgcmV0dXJuICZjb3VyaWVyLmdldCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgog
ICAgIGNhc2UgMTU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHlOYW1lLCAidGltZXMgbmV3IHJvbWFuIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXM7
CisgICAgICAgICAgICByZXR1cm4gJnRpbWVzLmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNz
ZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmls
aXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAg
ICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgLy8g
TGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwgZmxv
dyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cg
Ynkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJlLgpA
QCAtMjI4LDkgKzIxNiw5IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgIGlmICgh
aXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUpIHsKICAgICAgICAgICAgIC8vIFdl
IHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250
cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAogICAgICAgICAgICAgLy8gZS5nLiwgQXJp
YWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBldGMuICBUcnkgbG9va2luZyB1cCB0
aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgotICAgICAgICAgICAgY29uc3QgQXRvbVN0
cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBm
b250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAg
ICBjb25zdCBTdHJpbmcqIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOworICAgICAgICAgICAgaWYgKGFsdGVybmF0ZU5hbWUpIHsKKyAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAg
ICAgICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBw
cmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxp
ZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
KS4KICAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5
KTsKQEAgLTMxNCw2ICszMDIsOCBAQCBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQ
cmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgp
KQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCAr
MzE1LDggQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKwogICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZv
cm1EYXRhLCBbJl0gewogICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAgICAgfSk7CkBAIC0zNDAsNiArMzI4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZv
clBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1l
bW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7
CiAgICAgdW5zaWduZWQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3Vy
ZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2
ZUZvbnREYXRhOwogCkBAIC0zNTcsMTUgKzM0NywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworCiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEoJXUpIiwgcHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJp
ZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygp
OwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAg
VmVjdG9yPFJlZjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKQEAgLTQ5Nyw2ICs0ODUsNyBAQCBSZWY8
Rm9udENhc2NhZGVGb250cz4gRm9udENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29u
c3QgRm9udENhc2NhZGVEZXNjcgogCiB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZv
bnRTZWxlY3RvcikKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAg
Zm9udENhc2NhZGUudXBkYXRlRm9udHMocmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGZvbnRDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpLCBXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKIH0KIApAQCAt
NTA3LDkgKzQ5Niw4IEBAIHNpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBG
b250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwog
ICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAg
aWYgKGZvbnQtPmhhc09uZVJlZigpKQpAQCAtNTIyLDYgKzUxMCw4IEBAIHN0YXRpYyBIYXNoU2V0
PEZvbnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChG
b250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0
PEZvbnRTZWxlY3Rvcio+OwogCkBAIC01MzEsNiArNTIxLDggQEAgdm9pZCBGb250Q2FjaGU6OmFk
ZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNs
aWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+
Y29udGFpbnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMywxNSBAQCBzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6Omdl
bmVyYXRpb24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAg
IHJldHVybiBnR2VuZXJhdGlvbjsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQog
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpIHsKICAgICAgICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmlzRW1wdHkoKSk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4u
MGJhNmU1MGU2NzRlYTg2YzVhMjQ1Mjg1ODRhOTM1OGNiMTg2YWIyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAog
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3Jr
UXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtMTU3LDcg
KzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplIHsgMCB9OwogICAgIEZvbnRT
ZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7CiAgICAgc3RkOjphcnJheTx1
bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19OwotICAgIEF0b21TdHJpbmcgbV9sb2NhbGU7
CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJl
U2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFyaWF0aW9uU2V0dGluZ3M7
CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXlIYXNoIHsK
IAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewogICAgIEZvbnREZXNjcmlwdGlvbktleSBm
b250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRoIHRoZSBsb3dlciBsZXZlbCBGb250Q2Fj
aGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZlY3RvcjxBdG9tU3RyaW5nLCAzPiBmYW1p
bGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1pbGllczsKICAgICB1bnNpZ25lZCBmb250
U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwogfTsKQEAgLTI4
OCwxMCArMjg5LDEyIEBAIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVt
ZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nKiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nKiBwbGF0Zm9ybUFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpOwogCi0gICAgVGltZXIgbV9wdXJnZVRp
bWVyOworICAgIFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9u
dENhY2hlPiBtX3B1cmdlVGltZXI7CiAgICAgCiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lz
dGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3Bw
CmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEwMmMzMTkyNDgwNDNmYTc0NjRhZGMuLjczYTdjMDlk
ODRhMGU3YjBhNWQ1YTQ0YjRiMDZmYTRiYmI0NGRmMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3Bw
CkBAIC0xMDEsNyArMTAxLDcgQEAgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGll
c0VxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVEZXMKIAogI2VuZGlmIC8v
IEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAKLWJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkyKQorYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1l
c0FyZUVxdWFsKGNvbnN0IFN0cmluZyYgZmFtaWx5MSwgY29uc3QgU3RyaW5nJiBmYW1pbHkyKQog
ewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkK
QEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5h
bWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29ucwogICAgIHJldHVybiBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZhbWlseTEsIGZhbWlseTIpOwogfQogCi11
bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlO
YW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAppbmRleCAwYTdk
ZjI1MjhkYWM2MmE4YzVhODkwYmQyZGZhNDMwYTIxNGRkN2Y2Li4zNzljYWQ3ZmQ1OGVkMWY3ZDJm
MDE1OGE2ZDMxYTg5MWJjMDYzYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCkBAIC01Nyw4ICs1Nyw4
IEBAIHB1YmxpYzoKICAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CiAgICAgY29uc3QgUmVmQ291bnRlZEFycmF5
PEF0b21TdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KIAot
ICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYsIGNv
bnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29u
c3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5h
bWVIYXNoKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFt
ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHVuc2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuY3BwCmluZGV4IDJkZGQ2YmRmMTk0Mzg0MTdhZGVhNzExMjQ3ZDIxNzZkNTc2
MzUyMzQuLjVkZjI4ZTY2ZjI3ZGM1MTI1OGQxNGZmOTc0ZTJjMmI4YWVjYWYzOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCkBAIC00ODgsNyArNDg4LDYgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFn
ZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQKIAogR2x5cGhE
YXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQg
IT0gQXV0b1ZhcmlhbnQpOwogCiAgICAgaWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi5iZWVlZDY1
YmU1MDFiNGQ4YjY3NGE4NDNmNTk1ODJmZTkyZTA0ZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC00Myw3ICs0Myw3
IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwotY2xhc3Mg
Rm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsK
K2NsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9u
dENhc2NhZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYXNjYWRlRm9u
dHMpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZv
bnRDYXNjYWRlRm9udHMpOwogcHVibGljOgpAQCAtMTI1LDcgKzEyNSw2IEBAIGlubGluZSBib29s
IEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBkZXNjcmlwCiAKIGlubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmlt
YXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkg
ewogICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQo
ZGVzY3JpcHRpb24sIDApOwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJh
bmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQ
b2xpY3k6OkFsbG93KS5mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0b3IuaAppbmRleCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4
NWMyZjUwLi4xZjFmZGJiMGYxZTZhNTBhNDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcs
NyArMjcsNyBAQAogCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsK
IAotY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7
CitjbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNl
bGVjdG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4
IGNkMGRjZDQ2ZmVhYjJiMWJkN2ZhN2ZlMWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0
ZTBmODExMTY5M2JkNTZmYWNmNWNkMTk1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZS5oCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlw
aC5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1
Y3QgR2x5cGhEYXRhIHsKIC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQg
b2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJh
Y3RlcnMgaW4gdGhlIFVuaWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAog
Ly8gc3RhcnRpbmcgZnJvbSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJl
ciBvZiBnbHlwaHMuCi1jbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBh
Z2U+IHsKK2NsYXNzIEdseXBoUGFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlw
aFBhZ2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0
IEZvbnQmIGZvbnQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5
NzdkYjk3OGEwNTk3MWI2YzI1YzQxZjM3MmRlNTI0YjEuLjJkNjhmMWEzNmRlYmEwZmQyOGZkYjk1
M2RkMzRmYzRkNWZmMjFmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTE0MjgsNyAr
MTQyOCw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0
Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5h
bWUpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1l
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzNiw0NSArMTQz
Niw0NSBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3
ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07
CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4
NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkg
U0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5U
aHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRD
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQ
aW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBs
YWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNvbmd0
aVNDKCJTb25ndGkgU0MiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc29uZ3RpVEMoIlNvbmd0
aSBUQyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdG
YW5nIFNDIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE1haW5U
aHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGlu
Z0ZhbmcgVEMiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKIAogICAgIHN3aXRjaCAo
ZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKGVxdWFsKGZh
bWlseU5hbWUsIHNvbmd0aVN0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gc29uZ3RpU0M7Cisg
ICAgICAgICAgICByZXR1cm4gJnNvbmd0aVNDLmdldCgpOwogICAgICAgICBpZiAoZXF1YWwoZmFt
aWx5TmFtZSwgaGVpdGlTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGhlaXRpU0NSZXBsYWNl
bWVudDsKKyAgICAgICAgICAgIHJldHVybiAmaGVpdGlTQ1JlcGxhY2VtZW50LmdldCgpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDQ6CiAgICAgICAgIGlmIChlcXVhbChmYW1pbHlOYW1lLCB3
ZWlydWFuWWFIZWlTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGhlaXRpU0NSZXBsYWNlbWVu
dDsKKyAgICAgICAgICAgIHJldHVybiAmaGVpdGlTQ1JlcGxhY2VtZW50LmdldCgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChlcXVhbChmYW1pbHlOYW1lLCB3ZWly
dWFuWmhlbmdIZWl0aVN0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gaGVpdGlUQ1JlcGxhY2Vt
ZW50OworICAgICAgICAgICAgcmV0dXJuICZoZWl0aVRDUmVwbGFjZW1lbnQuZ2V0KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgNjoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseU5hbWUsICJzaW1zdW4iKSkKLSAgICAgICAgICAgIHJldHVybiBzb25n
dGlTQzsKKyAgICAgICAgICAgIHJldHVybiAmc29uZ3RpU0MuZ2V0KCk7CiAgICAgICAgIGlmIChl
cXVhbChmYW1pbHlOYW1lLCB3ZWlydWFuWGluWGlNaW5nVGkpKQotICAgICAgICAgICAgcmV0dXJu
IHNvbmd0aVRDOworICAgICAgICAgICAgcmV0dXJuICZzb25ndGlUQy5nZXQoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSAxMDoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGZhbWlseU5hbWUsICJtcyBtaW5nbGl1IikpCi0gICAgICAgICAgICByZXR1cm4gc29u
Z3RpVEM7CisgICAgICAgICAgICByZXR1cm4gJnNvbmd0aVRDLmdldCgpOwogICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiXFw1YjhiXFw0ZjUzIikpCi0gICAg
ICAgICAgICByZXR1cm4gc29uZ3RpU0M7CisgICAgICAgICAgICByZXR1cm4gJnNvbmd0aVNDLmdl
dCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDE4OgogICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1pY3Jvc29mdCBqaGVuZ2hlaSIpKQot
ICAgICAgICAgICAgcmV0dXJuIGhlaXRpVENSZXBsYWNlbWVudDsKKyAgICAgICAgICAgIHJldHVy
biAmaGVpdGlUQ1JlcGxhY2VtZW50LmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdm9pZCBhZGRB
dHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1
dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRD
YWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmMDI3ZWVkMzE3MTQ0NGJjMzZhNDM0NDc2
M2I3M2UxMmRiMmEwMjY3Li4xMzk4ODRiY2YyYWQ3NDZmM2M4YmRiNWNlNmM0ZDRjNTYyOTQ1Mjg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC01OTksOSArNTk5LDkgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhOwogfQogCi1jb25z
dCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBBdG9tU3RyaW5nJikKK2NvbnN0IFN0cmluZyogRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi44
ZWM4Y2Q3OWE2MDM5ZjQ1NmE5YWM5OGM5NWJmOWNiMzI5MzIzYjMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAt
NjkyLDEwICs2OTIsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorY29uc3QgU3RyaW5nKiBG
b250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJNaWNyb3NvZnQgU2FucyBT
ZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMg
TmV3IFJvbWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigi
TWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKIAog
ICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIC8vIE9uIFdpbmRvd3MsIHdl
IGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBz
dXBwb3J0LgpAQCAtNzA1LDcgKzcwNSw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAg
Ly8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgODoKICAg
ICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBz
ZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICBy
ZXR1cm4gJnRpbWVzTmV3Um9tYW4uZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdp
bmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQg
ZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2Vy
aWYgYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApA
QCAtNzE0LDEwICs3MTQsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9y
bUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3Vs
ZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNl
cmlmIikpCi0gICAgICAgICAgICByZXR1cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAg
ICAgcmV0dXJuICZtaWNyb3NvZnRTYW5zU2VyaWYuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAppbmRleCBjOWYw
ZjgxM2JjYjYzNjYxNTRiYzA0YmVhNTAzYzYyNGZhZWEwMWI1Li41NWYxYjFhZjdmYTFkOWM5MjZh
MDE3NjA5MjU0MWJmYmEwNzZiZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0JpZGlDb250ZXh0LmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1l
U2l6ZUFzQmlkaUNvbnRleHQ+IHsKK3N0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CiAgICAgdWlu
dDMyX3QgYml0ZmllbGRzIDogMTY7CiAgICAgdm9pZCogcGFyZW50OwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAppbmRleCBkNGM0ZTU3MDhhMGQ0MmNiOWNi
NDcxYTJjMDY5NjcwZDM5YmQzNGQxLi41YThkOTA5ZWVhOTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2Ey
NjAzZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCkBA
IC0yMiwxNSArMjIsMTUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91Y2hh
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGVudW0gQmlkaUVtYmVkZGluZ1NvdXJjZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9t
VW5pY29kZSB9OwogCiAvLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZXhwbGljaXQgZW1iZWRkaW5n
cy4KLWNsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsK
K2NsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJpZGlDb250
ZXh0PiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29udGV4
dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJy
aWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlkaUNv
bnRleHQqIHBhcmVudCA9IG51bGxwdHIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422687</attachid>
            <date>2021-03-09 04:41:53 -0800</date>
            <delta_ts>2021-03-10 07:07:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210309124152.patch</filename>
            <type>text/plain</type>
            <size>29213</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTc1N2ZkMDY3ODMxMGMz
NmQ2ZDFlODg1ZmJmMjhmYWMzMmU3ZDM2My4uN2RmMGIyNDU2ZTExYzFiYjRmZTg0NjFhODcxODc2
NTkyNWQzMDA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIHRoZSBGb250Q2FjaGUgbG9jayBub3QgaU9TLXNwZWNpZmljIGFuZCB1c2UgaXQgaW4gbW9y
ZSBwbGFjZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhp
c3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Rm9udENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpmb250Rm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9u
dEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6dXBkYXRl
Rm9udENhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OmdlbmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhh
c2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAyMDIx
LTAzLTA4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3MzA4NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIz
MmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9u
dEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0
YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNz
IEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAg
IC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2Jh
Y2MxYWY3MmI0NmYwY2M5MDk2ZC4uZmQ1ZDRiODBmMDgxNDZhODI2YzdjMzViOGIzZWYxMDg4NzY4
ZTI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCkBAIC00NiwxNCArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgi
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2su
aD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vy
c2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw3ICs1Nyw3
IEBAIEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0b24oKQogfQogCiBGb250Q2FjaGU6OkZv
bnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKQorICAgIDogbV9wdXJnZVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCiB7CiB9
CiAKQEAgLTczLDcgKzY1LDcgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5KCkgeyB9Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKKyAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMs
IEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMp
CiAgICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCiAgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5KQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZl
YXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCkBAIC0x
MDAsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uS2V5IG1f
Zm9udERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7CisgICAgU3RyaW5n
IG1fZmFtaWx5OwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwog
ICAgIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxp
dGllczsKIH07CkBAIC0xNDcsMzMgKzEzOSwzMyBAQCBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKQogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiQ291cmllciIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXJOZXcoIkNvdXJpZXIgTmV3IiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lcygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBwbGF0
Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZS5pc051bGwoKSkKKyAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYXJpYWwoIkFy
aWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdGltZXMoIlRpbWVzIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRpbWVzTmV3Um9tYW4o
IlRpbWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAg
Y29uc3QgU3RyaW5nKiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOworICAgIGlmIChwbGF0Zm9ybVNwZWNpZmljQWx0ZXJu
YXRlKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAgIHN3
aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAgICAg
ICAgICAgcmV0dXJuIGhlbHZldGljYTsKKyAgICAgICAgICAgIHJldHVybiAmaGVsdmV0aWNhLmdl
dCgpOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgInRpbWVzIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAg
ICAgIHJldHVybiAmdGltZXNOZXdSb21hbi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAg
ICAgcmV0dXJuICZjb3VyaWVyTmV3LmdldCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDk6
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
aGVsdmV0aWNhIikpCi0gICAgICAgICAgICByZXR1cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1
cm4gJmFyaWFsLmdldCgpOwogICAgICAgICBicmVhazsKICNpZiAhT1MoV0lORE9XUykKICAgICAv
LyBPbiBXaW5kb3dzLCBDb3VyaWVyIE5ldyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdh
eXMgcHJlc2VudCBhbmQKQEAgLTE4MywyNSArMTc1LDIxIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZv
bnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
KQogICAgIC8vIG9ubHkgYmUgdHJpZWQgaWYgQ291cmllciBOZXcgaXMgbm90IGZvdW5kLgogICAg
IGNhc2UgMTE6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHlOYW1lLCAiY291cmllciBuZXciKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyOworICAg
ICAgICAgICAgcmV0dXJuICZjb3VyaWVyLmdldCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgog
ICAgIGNhc2UgMTU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHlOYW1lLCAidGltZXMgbmV3IHJvbWFuIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXM7
CisgICAgICAgICAgICByZXR1cm4gJnRpbWVzLmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNz
ZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmls
aXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAg
ICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgLy8g
TGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwgZmxv
dyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cg
Ynkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJlLgpA
QCAtMjI4LDkgKzIxNiw5IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgIGlmICgh
aXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUpIHsKICAgICAgICAgICAgIC8vIFdl
IHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250
cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAogICAgICAgICAgICAgLy8gZS5nLiwgQXJp
YWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBldGMuICBUcnkgbG9va2luZyB1cCB0
aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgotICAgICAgICAgICAgY29uc3QgQXRvbVN0
cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBm
b250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAg
ICBjb25zdCBTdHJpbmcqIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOworICAgICAgICAgICAgaWYgKGFsdGVybmF0ZU5hbWUpIHsKKyAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAg
ICAgICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBw
cmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxp
ZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
KS4KICAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5
KTsKQEAgLTMxNCw2ICszMDIsOCBAQCBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQ
cmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgp
KQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCAr
MzE1LDggQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKwogICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZv
cm1EYXRhLCBbJl0gewogICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAgICAgfSk7CkBAIC0zNDAsNiArMzI4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZv
clBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1l
bW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7
CiAgICAgdW5zaWduZWQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3Vy
ZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2
ZUZvbnREYXRhOwogCkBAIC0zNTcsMTUgKzM0NywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworCiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEoJXUpIiwgcHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJp
ZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygp
OwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAg
VmVjdG9yPFJlZjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKQEAgLTQ5Nyw2ICs0ODUsNyBAQCBSZWY8
Rm9udENhc2NhZGVGb250cz4gRm9udENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29u
c3QgRm9udENhc2NhZGVEZXNjcgogCiB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZv
bnRTZWxlY3RvcikKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAg
Zm9udENhc2NhZGUudXBkYXRlRm9udHMocmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGZvbnRDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpLCBXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKIH0KIApAQCAt
NTA3LDkgKzQ5Niw4IEBAIHNpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBG
b250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwog
ICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAg
aWYgKGZvbnQtPmhhc09uZVJlZigpKQpAQCAtNTIyLDYgKzUxMCw4IEBAIHN0YXRpYyBIYXNoU2V0
PEZvbnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChG
b250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0
PEZvbnRTZWxlY3Rvcio+OwogCkBAIC01MzEsNiArNTIxLDggQEAgdm9pZCBGb250Q2FjaGU6OmFk
ZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNs
aWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+
Y29udGFpbnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMywxNSBAQCBzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6Omdl
bmVyYXRpb24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAg
IHJldHVybiBnR2VuZXJhdGlvbjsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQog
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpIHsKICAgICAgICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmlzRW1wdHkoKSk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4u
NzA1MmZhNmVjNGY2ZDNiNzlmYmZkOTYwMjUwNDM5NmVhMzAwZDgwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAog
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3Jr
UXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyAr
ODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25S
ZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9m
bGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2Ny
aXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9u
LnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdz
KGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0
dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3
ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250
U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8
dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxl
OworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVy
ZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdz
OwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7
CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkg
Zm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENh
Y2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFt
aWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9u
dFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0y
ODgsMTAgKzI4OSwxMiBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxl
bWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVf
cHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKICAgICAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGlj
IGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9t
U3RyaW5nJik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyogYWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyogcGxhdGZvcm1BbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKIAotICAgIFRpbWVyIG1fcHVyZ2VU
aW1lcjsKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZv
bnRDYWNoZT4gbV9wdXJnZVRpbWVyOwogICAgIAogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5
c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5MjQ4MDQzZmE3NDY0YWRjLi43M2E3YzA5
ZDg0YTBlN2IwYTVkNWE0NGI0YjA2ZmE0YmJiNDRkZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cApAQCAtMTAxLDcgKzEwMSw3IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxp
ZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAv
LyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZhbWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikK
IHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZmFtaWx5MS5zdGFydHNXaXRoKCcuJykp
CkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlO
YW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnMKICAgICByZXR1cm4g
QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVhbChmYW1pbHkxLCBmYW1pbHkyKTsKIH0KIAot
dW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5KQordW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5
TmFtZUhhc2goY29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcuJykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKaW5kZXggMGE3
ZGYyNTI4ZGFjNjJhOGM1YTg5MGJkMmRmYTQzMGEyMTRkZDdmNi4uMzc5Y2FkN2ZkNThlZDFmN2Qy
ZjAxNThhNmQzMWE4OTFiYzA2M2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApAQCAtNTcsOCArNTcs
OCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkg
Y29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQogICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJh
eTxBdG9tU3RyaW5nPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CiAK
LSAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmLCBj
b25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNv
bnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlO
YW1lSGFzaChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgU3RyaW5nIGZvbGRlZEZhbWlseU5h
bWUoY29uc3QgU3RyaW5nJik7CiAKICAgICB1bnNpZ25lZCBlZmZlY3RpdmVGYW1pbHlDb3VudCgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmNwcAppbmRleCAyZGRkNmJkZjE5NDM4NDE3YWRlYTcxMTI0N2QyMTc2ZDU3
NjM1MjM0Li41ZGYyOGU2NmYyN2RjNTEyNThkMTRmZjk3NGUyYzJiOGFlY2FmMzk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcApAQCAtNDg4LDcgKzQ4OCw2IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBh
Z2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBo
RGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFy
aWFudCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50
ICE9IEF1dG9WYXJpYW50KTsKIAogICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmgKaW5kZXggNDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4uYmVlZWQ2
NWJlNTAxYjRkOGI2NzRhODQzZjU5NTgyZmU5MmUwNGRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtNDMsNyArNDMs
NyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRGb250R2x5cGhQYWdlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKLWNsYXNz
IEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7
CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZv
bnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q2FzY2FkZUZv
bnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihG
b250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTEyNSw3ICsxMjUsNiBAQCBpbmxpbmUgYm9v
bCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcAogCiBpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJp
bWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQp
IHsKICAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGRlc2NyaXB0aW9uLCAwKTsKICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlS
YW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2Fk
UG9saWN5OjpBbGxvdykuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFhNjM5ODBiNjEwMDZk
ODVjMmY1MC4uMWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJjMGU4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKQEAgLTI3
LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyArNDMs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0ID0gMDsKIH07
CiAKLWNsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4g
eworY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZvbnRT
ZWxlY3Rvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpID0gZGVmYXVs
dDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAppbmRl
eCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44Y2Y5Y2RhY2ZiN2Fi
NGUwZjgxMTE2OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAjaW5jbHVkZSAiR2x5
cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgc3Ry
dWN0IEdseXBoRGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUgc2V0
IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyByYW5nZSBvZiBjaGFy
YWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4ZWQK
IC8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNoICJzaXplIiBudW1i
ZXIgb2YgZ2x5cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQ
YWdlPiB7CitjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R2x5
cGhQYWdlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+IGNyZWF0ZShjb25z
dCBGb250JiBmb250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCBmYTc3YjM5
OTc3ZGI5NzhhMDU5NzFiNmMyNWM0MWYzNzJkZTUyNGIxLi4yZDY4ZjFhMzZkZWJhMGZkMjhmZGI5
NTNkZDM0ZmM0ZDVmZjIxZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC0xNDI4LDcg
KzE0MjgsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxh
dGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2Fj
aGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lKQorY29uc3QgU3RyaW5nKiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBoZWl0aVN0cmluZ1tdID0geyAweDllZDEsIDB4NGY1MyB9OwogICAgIHN0YXRpYyBjb25zdCBV
Q2hhciBzb25ndGlTdHJpbmdbXSA9IHsgMHg1YjhiLCAweDRmNTMgfTsKQEAgLTE0MzYsNDUgKzE0
MzYsNDUgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICBzdGF0aWMgY29uc3QgVUNoYXIg
d2VpcnVhbllhSGVpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZjZmLCAweDk2YzUsIDB4OWVkMSB9
OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWmhlbmdIZWl0aVN0cmluZ1tdID0geyAw
eDVmYWUsIDB4OGVkZiwgMHg2YjYzLCAweDllZDEsIDB4OWFkNCB9OwogCi0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25ndGlTQygiU29uZ3Rp
IFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc29uZ3RpVEMoIlNvbmd0aSBU
QyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRo
cmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpU0NSZXBsYWNlbWVudCgi
UGluZ0ZhbmcgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBoZWl0aVRDUmVw
bGFjZW1lbnQoIlBpbmdGYW5nIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzb25n
dGlTQygiU29uZ3RpIFNDIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHNvbmd0aVRDKCJTb25n
dGkgVEMiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRo
cmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQaW5n
RmFuZyBTQyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBoZWl0aVRDUmVwbGFjZW1lbnQoIlBp
bmdGYW5nIFRDIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAKICAgICBzd2l0Y2gg
KGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChlcXVhbChm
YW1pbHlOYW1lLCBzb25ndGlTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIHNvbmd0aVNDOwor
ICAgICAgICAgICAgcmV0dXJuICZzb25ndGlTQy5nZXQoKTsKICAgICAgICAgaWYgKGVxdWFsKGZh
bWlseU5hbWUsIGhlaXRpU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBoZWl0aVNDUmVwbGFj
ZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gJmhlaXRpU0NSZXBsYWNlbWVudC5nZXQoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgogICAgICAgICBpZiAoZXF1YWwoZmFtaWx5TmFtZSwg
d2VpcnVhbllhSGVpU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBoZWl0aVNDUmVwbGFjZW1l
bnQ7CisgICAgICAgICAgICByZXR1cm4gJmhlaXRpU0NSZXBsYWNlbWVudC5nZXQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1YWwoZmFtaWx5TmFtZSwgd2Vp
cnVhblpoZW5nSGVpdGlTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGhlaXRpVENSZXBsYWNl
bWVudDsKKyAgICAgICAgICAgIHJldHVybiAmaGVpdGlUQ1JlcGxhY2VtZW50LmdldCgpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDY6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAic2ltc3VuIikpCi0gICAgICAgICAgICByZXR1cm4gc29u
Z3RpU0M7CisgICAgICAgICAgICByZXR1cm4gJnNvbmd0aVNDLmdldCgpOwogICAgICAgICBpZiAo
ZXF1YWwoZmFtaWx5TmFtZSwgd2VpcnVhblhpblhpTWluZ1RpKSkKLSAgICAgICAgICAgIHJldHVy
biBzb25ndGlUQzsKKyAgICAgICAgICAgIHJldHVybiAmc29uZ3RpVEMuZ2V0KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgMTA6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgbWluZ2xpdSIpKQotICAgICAgICAgICAgcmV0dXJuIHNv
bmd0aVRDOworICAgICAgICAgICAgcmV0dXJuICZzb25ndGlUQy5nZXQoKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIlxcNWI4YlxcNGY1MyIpKQotICAg
ICAgICAgICAgcmV0dXJuIHNvbmd0aVNDOworICAgICAgICAgICAgcmV0dXJuICZzb25ndGlTQy5n
ZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxODoKICAgICAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtaWNyb3NvZnQgamhlbmdoZWkiKSkK
LSAgICAgICAgICAgIHJldHVybiBoZWl0aVRDUmVwbGFjZW1lbnQ7CisgICAgICAgICAgICByZXR1
cm4gJmhlaXRpVENSZXBsYWNlbWVudC5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgYWRk
QXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmli
dXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggZjAyN2VlZDMxNzE0NDRiYzM2YTQzNDQ3
NjNiNzNlMTJkYjJhMDI2Ny4uMTM5ODg0YmNmMmFkNzQ2ZjNjOGJkYjVjZTZjNGQ0YzU2Mjk0NTI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtNTk5LDkgKzU5OSw5IEBAIHN0
ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgQXRvbVN0cmluZyYpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4u
OGVjOGNkNzlhNjAzOWY0NTZhOWFjOThjOTViZjljYjMyOTMyM2IzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAg
LTY5MiwxMCArNjkyLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK2NvbnN0IFN0cmluZyog
Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWljcm9zb2Z0IFNhbnMg
U2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVz
IE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBtaWNyb3NvZnRTYW5zU2VyaWYo
Ik1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAK
ICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBPbiBXaW5kb3dzLCB3
ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMg
c3VwcG9ydC4KQEAgLTcwNSw3ICs3MDUsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6
OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAg
IC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAg
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMg
c2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAg
cmV0dXJuICZ0aW1lc05ld1JvbWFuLmdldCgpOwogICAgICAgICBicmVhazsKICAgICAvLyBPbiBX
aW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50
IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IE1pY3Jvc29mdCBTYW5zIFNl
cmlmIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2FucyBTZXJpZiwK
QEAgLTcxNCwxMCArNzE0LDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZv
cm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291
bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgMTM6CiAgICAgICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2FucyBz
ZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIG1pY3Jvc29mdFNhbnNTZXJpZjsKKyAgICAgICAg
ICAgIHJldHVybiAmbWljcm9zb2Z0U2Fuc1NlcmlmLmdldCgpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlm
MGY4MTNiY2I2MzY2MTU0YmMwNGJlYTUwM2M2MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2
YTAxNzYwOTI1NDFiZmJhMDc2YmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpQ29udGV4dC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2Ft
ZVNpemVBc0JpZGlDb250ZXh0PiB7CitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVp
bnQzMl90IGJpdGZpZWxkcyA6IDE2OwogICAgIHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjlj
YjQ3MWEyYzA2OTY3MGQzOWJkMzRkMS4uNWE4ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNh
MjYwM2Q3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApA
QCAtMjIsMTUgKzIyLDE1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNo
YXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJv
bVVuaWNvZGUgfTsKIAogLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGlu
Z3MuCi1jbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7
CitjbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29u
dGV4dD4gewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRl
eHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVy
cmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlD
b250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422829</attachid>
            <date>2021-03-10 07:07:22 -0800</date>
            <delta_ts>2021-03-12 02:57:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210310150720.patch</filename>
            <type>text/plain</type>
            <size>29355</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNGExNjViZDAzM2FmNTk5OWZiN2MxZDUwNWRjODlk
M2Y0ZjI2OGQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIHRoZSBGb250Q2FjaGUgbG9jayBub3QgaU9TLXNwZWNpZmljIGFuZCB1c2UgaXQgaW4gbW9y
ZSBwbGFjZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhp
c3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Rm9udENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpmb250Rm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9u
dEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6dXBkYXRl
Rm9udENhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OmdlbmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhh
c2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAyMDIx
LTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIz
MmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9u
dEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0
YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNz
IEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAg
IC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2Jh
Y2MxYWY3MmI0NmYwY2M5MDk2ZC4uZmQ1ZDRiODBmMDgxNDZhODI2YzdjMzViOGIzZWYxMDg4NzY4
ZTI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCkBAIC00NiwxNCArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgi
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2su
aD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vy
c2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw3ICs1Nyw3
IEBAIEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0b24oKQogfQogCiBGb250Q2FjaGU6OkZv
bnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKQorICAgIDogbV9wdXJnZVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCiB7CiB9
CiAKQEAgLTczLDcgKzY1LDcgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5KCkgeyB9Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKKyAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMs
IEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMp
CiAgICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCiAgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5KQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZl
YXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCkBAIC0x
MDAsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uS2V5IG1f
Zm9udERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7CisgICAgU3RyaW5n
IG1fZmFtaWx5OwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwog
ICAgIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxp
dGllczsKIH07CkBAIC0xNDcsMzMgKzEzOSwzMyBAQCBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKQogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiQ291cmllciIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXJOZXcoIkNvdXJpZXIgTmV3IiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lcygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBwbGF0
Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZS5pc051bGwoKSkKKyAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYXJpYWwoIkFy
aWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmlu
Zz4gdGltZXMoIlRpbWVzIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRpbWVzTmV3Um9tYW4o
IlRpbWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAg
Y29uc3QgU3RyaW5nKiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOworICAgIGlmIChwbGF0Zm9ybVNwZWNpZmljQWx0ZXJu
YXRlKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAgIHN3
aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAgICAg
ICAgICAgcmV0dXJuIGhlbHZldGljYTsKKyAgICAgICAgICAgIHJldHVybiAmaGVsdmV0aWNhLmdl
dCgpOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgInRpbWVzIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAg
ICAgIHJldHVybiAmdGltZXNOZXdSb21hbi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAg
ICAgcmV0dXJuICZjb3VyaWVyTmV3LmdldCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDk6
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
aGVsdmV0aWNhIikpCi0gICAgICAgICAgICByZXR1cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1
cm4gJmFyaWFsLmdldCgpOwogICAgICAgICBicmVhazsKICNpZiAhT1MoV0lORE9XUykKICAgICAv
LyBPbiBXaW5kb3dzLCBDb3VyaWVyIE5ldyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdh
eXMgcHJlc2VudCBhbmQKQEAgLTE4MywyNSArMTc1LDIxIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZv
bnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
KQogICAgIC8vIG9ubHkgYmUgdHJpZWQgaWYgQ291cmllciBOZXcgaXMgbm90IGZvdW5kLgogICAg
IGNhc2UgMTE6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHlOYW1lLCAiY291cmllciBuZXciKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyOworICAg
ICAgICAgICAgcmV0dXJuICZjb3VyaWVyLmdldCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgog
ICAgIGNhc2UgMTU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHlOYW1lLCAidGltZXMgbmV3IHJvbWFuIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXM7
CisgICAgICAgICAgICByZXR1cm4gJnRpbWVzLmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNz
ZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmls
aXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAg
ICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgLy8g
TGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwgZmxv
dyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cg
Ynkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJlLgpA
QCAtMjI4LDkgKzIxNiw5IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgIGlmICgh
aXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUpIHsKICAgICAgICAgICAgIC8vIFdl
IHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250
cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAogICAgICAgICAgICAgLy8gZS5nLiwgQXJp
YWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBldGMuICBUcnkgbG9va2luZyB1cCB0
aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgotICAgICAgICAgICAgY29uc3QgQXRvbVN0
cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBm
b250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAg
ICBjb25zdCBTdHJpbmcqIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOworICAgICAgICAgICAgaWYgKGFsdGVybmF0ZU5hbWUpIHsKKyAgICAgICAgICAgICAg
ICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAg
ICAgICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBw
cmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxp
ZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
KS4KICAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5
KTsKQEAgLTMxNCw2ICszMDIsOCBAQCBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQ
cmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgp
KQogICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCAr
MzE1LDggQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6
Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKwogICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZv
cm1EYXRhLCBbJl0gewogICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7
CiAgICAgfSk7CkBAIC0zNDAsNiArMzI4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZv
clBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZv
aWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1l
bW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7
CiAgICAgdW5zaWduZWQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3Vy
ZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2
ZUZvbnREYXRhOwogCkBAIC0zNTcsMTUgKzM0NywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOworCiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEoJXUpIiwgcHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJp
ZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygp
OwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAg
VmVjdG9yPFJlZjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYg
Zm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKQEAgLTQ5Nyw2ICs0ODUsNyBAQCBSZWY8
Rm9udENhc2NhZGVGb250cz4gRm9udENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29u
c3QgRm9udENhc2NhZGVEZXNjcgogCiB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZv
bnRTZWxlY3RvcikKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAg
Zm9udENhc2NhZGUudXBkYXRlRm9udHMocmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGZvbnRDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpLCBXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKIH0KIApAQCAt
NTA3LDkgKzQ5Niw4IEBAIHNpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBG
b250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwog
ICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAg
aWYgKGZvbnQtPmhhc09uZVJlZigpKQpAQCAtNTIyLDYgKzUxMCw4IEBAIHN0YXRpYyBIYXNoU2V0
PEZvbnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChG
b250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0
PEZvbnRTZWxlY3Rvcio+OwogCkBAIC01MzEsNiArNTIxLDggQEAgdm9pZCBGb250Q2FjaGU6OmFk
ZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNs
aWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+
Y29udGFpbnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMywxNSBAQCBzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6Omdl
bmVyYXRpb24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAg
IHJldHVybiBnR2VuZXJhdGlvbjsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQog
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpIHsKICAgICAgICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmlzRW1wdHkoKSk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4u
NzA1MmZhNmVjNGY2ZDNiNzlmYmZkOTYwMjUwNDM5NmVhMzAwZDgwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAog
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgog
I2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3Jr
UXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyAr
ODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25S
ZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9m
bGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2Ny
aXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9u
LnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdz
KGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0
dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3
ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250
U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8
dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxl
OworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVy
ZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdz
OwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7
CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkg
Zm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENh
Y2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFt
aWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9u
dFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0y
ODgsMTAgKzI4OSwxMiBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxl
bWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVf
cHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKICAgICAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0
cmluZyYgYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGlj
IGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9t
U3RyaW5nJik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyogYWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyogcGxhdGZvcm1BbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKIAotICAgIFRpbWVyIG1fcHVyZ2VU
aW1lcjsKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZv
bnRDYWNoZT4gbV9wdXJnZVRpbWVyOwogICAgIAogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5
c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5MjQ4MDQzZmE3NDY0YWRjLi5hMWNjNDZl
YjNhNzliYzBkN2QyODFhODIyMzk2ZDYwYjcyYmIzMTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNw
cApAQCAtMTAxLDggKzEwMSwxMCBAQCBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWls
aWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZURlcwogCiAjZW5kaWYg
Ly8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseTIpCitib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5h
bWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiBmYW1pbHkxLCBjb25zdCBTdHJpbmcmIGZhbWlseTIp
CiB7CisgICAgaWYgKGZhbWlseTEuaXNFbXB0eSgpIHx8IGZhbWlseTIuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFtaWx5MS5pc0VtcHR5KCkgJiYgZmFtaWx5Mi5pc0VtcHR5KCk7CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAg
ICByZXR1cm4gZmFtaWx5MSA9PSBmYW1pbHkyOwpAQCAtMTEwLDcgKzExMiw3IEBAIGJvb2wgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHkxLCBjb25zCiAgICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1
YWwoZmFtaWx5MSwgZmFtaWx5Mik7CiB9CiAKLXVuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3Vuc2lnbmVkIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYgZmFtaWx5
KQogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBh
MjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07
IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29u
c3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNB
cmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRp
YyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGlj
IGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsK
KyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAg
c3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5z
aWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZi
ZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIzNC4uNWRmMjhlNjZmMjdkYzUxMjU4ZDE0
ZmY5NzRlMmMyYjhhZWNhZjM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTQ4OCw3ICs0ODgsNiBAQCBzdGF0
aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWduZWQgcGFn
ZU51bWJlciwgY29uc3QgRm9udAogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CiAKICAgICBpZiAo
dmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNi
NjZiYTVjMTgzYTU4ZjViYWQzOGQuLmJlZWVkNjViZTUwMWI0ZDhiNjc0YTg0M2Y1OTU4MmZlOTJl
MDRkZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmgKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1p
eGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJl
ZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4geworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVGb250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBA
IC0xMjUsNyArMTI1LDYgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBp
dGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0
IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAgIGF1dG8mIHByaW1hcnlSYW5n
ZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgICAgIG1f
Y2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmdseXBoRGF0YUZvckNoYXJhY3Rlcign
ICcsIEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBvbGljeTo6QWxsb3cpLmZvbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCmluZGV4IGFjOWMx
Njk2ZDE0MzdmYzU0ODFhYTYzOTgwYjYxMDA2ZDg1YzJmNTAuLjFmMWZkYmIwZjFlNmE1MGE0MmY1
MDQ0ZTkyMjA4MTdkZWIyYzBlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJGb250
UmFuZ2VzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0xvYWRpbmcoKSBjb25zdCA9IDA7CiB9OwogCi1jbGFzcyBGb250U2VsZWN0b3IgOiBwdWJs
aWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKK2NsYXNzIEZvbnRTZWxlY3RvciA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5Gb250U2VsZWN0b3IoKSA9IGRlZmF1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKaW5kZXggY2QwZGNkNDZmZWFiMmIxYmQ3ZmE3ZmUxZWVh
MmY4ZDdjMzgyNzczMy4uOGNmOWNkYWNmYjdhYjRlMGY4MTExNjkzYmQ1NmZhY2Y1Y2QxOTVkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKQEAgLTMy
LDggKzMyLDggQEAKIAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91dHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gQSBHbHlwaFBh
Z2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERhdGEgbWFwcGluZ3MgZm9yIGEg
Y29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgVW5pY29kZSBjb2RlIHNw
YWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBzdGFydGluZyBmcm9tIDAgYW5kIGluY3Jl
bWVudGluZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVyIG9mIGdseXBocy4KLWNsYXNzIEdseXBoUGFn
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4geworY2xhc3MgR2x5cGhQYWdlIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8R2x5cGhQYWdlPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHAKaW5kZXggZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZjMjVjNDFmMzcyZGU1
MjRiMS4uMmQ2OGYxYTM2ZGViYTBmZDI4ZmRiOTUzZGQzNGZjNGQ1ZmYyMWYzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcApAQCAtMTQyOCw3ICsxNDI4LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRD
YWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3IKICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0K
IAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK2NvbnN0IFN0cmluZyogRm9udENhY2hl
OjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFt
ZSkKIHsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsgMHg5ZWQxLCAw
eDRmNTMgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10gPSB7IDB4NWI4
YiwgMHg0ZjUzIH07CkBAIC0xNDM2LDQ1ICsxNDM2LDQ1IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZv
bnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlsCiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1tdID0geyAweDVm
YWUsIDB4OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2Vp
cnVhblpoZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2MywgMHg5ZWQx
LCAweDlhZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IFN0cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRDIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IGhlaXRpU0NSZXBsYWNlbWVudCgiUGluZ0ZhbmcgU0MiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAg
Y2FzZSAyOgogICAgICAgICBpZiAoZXF1YWwoZmFtaWx5TmFtZSwgc29uZ3RpU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybiBzb25ndGlTQzsKKyAgICAgICAgICAgIHJldHVybiAmc29uZ3RpU0Mu
Z2V0KCk7CiAgICAgICAgIGlmIChlcXVhbChmYW1pbHlOYW1lLCBoZWl0aVN0cmluZykpCi0gICAg
ICAgICAgICByZXR1cm4gaGVpdGlTQ1JlcGxhY2VtZW50OworICAgICAgICAgICAgcmV0dXJuICZo
ZWl0aVNDUmVwbGFjZW1lbnQuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKICAg
ICAgICAgaWYgKGVxdWFsKGZhbWlseU5hbWUsIHdlaXJ1YW5ZYUhlaVN0cmluZykpCi0gICAgICAg
ICAgICByZXR1cm4gaGVpdGlTQ1JlcGxhY2VtZW50OworICAgICAgICAgICAgcmV0dXJuICZoZWl0
aVNDUmVwbGFjZW1lbnQuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNToKICAgICAg
ICAgaWYgKGVxdWFsKGZhbWlseU5hbWUsIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nKSkKLSAgICAg
ICAgICAgIHJldHVybiBoZWl0aVRDUmVwbGFjZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gJmhl
aXRpVENSZXBsYWNlbWVudC5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA2OgogICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInNpbXN1
biIpKQotICAgICAgICAgICAgcmV0dXJuIHNvbmd0aVNDOworICAgICAgICAgICAgcmV0dXJuICZz
b25ndGlTQy5nZXQoKTsKICAgICAgICAgaWYgKGVxdWFsKGZhbWlseU5hbWUsIHdlaXJ1YW5YaW5Y
aU1pbmdUaSkpCi0gICAgICAgICAgICByZXR1cm4gc29uZ3RpVEM7CisgICAgICAgICAgICByZXR1
cm4gJnNvbmd0aVRDLmdldCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDEwOgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIG1pbmds
aXUiKSkKLSAgICAgICAgICAgIHJldHVybiBzb25ndGlUQzsKKyAgICAgICAgICAgIHJldHVybiAm
c29uZ3RpVEMuZ2V0KCk7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eU5hbWUsICJcXDViOGJcXDRmNTMiKSkKLSAgICAgICAgICAgIHJldHVybiBzb25ndGlTQzsKKyAg
ICAgICAgICAgIHJldHVybiAmc29uZ3RpU0MuZ2V0KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgMTg6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlO
YW1lLCAibWljcm9zb2Z0IGpoZW5naGVpIikpCi0gICAgICAgICAgICByZXR1cm4gaGVpdGlUQ1Jl
cGxhY2VtZW50OworICAgICAgICAgICAgcmV0dXJuICZoZWl0aVRDUmVwbGFjZW1lbnQuZ2V0KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhD
Rk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRz
IGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmlu
ZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLjEzOTg4NGJjZjJh
ZDc0NmYzYzhiZGI1Y2U2YzRkNGM1NjI5NDUyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHAKQEAgLTU5OSw5ICs1OTksOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0
YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJl
dHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxh
dGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQorY29uc3QgU3RyaW5n
KiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5n
JikKIHsKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
I2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDJiNGI1NTcyYTRkODA4
YjgzYjRiMGY0YWE2NGY5NmM5NjM4MmY2MTMuLjhlYzhjZDc5YTYwMzlmNDU2YTlhYzk4Yzk1YmY5
Y2IzMjkzMjNiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC02OTIsMTAgKzY5MiwxMCBAQCBzdGQ6OnVuaXF1
ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcm
IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseU5hbWUpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJU
aW1lcyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3Nv
ZnRTYW5zU2VyaWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IFN0cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0
aCgpKSB7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMs
IGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCkBAIC03MDUsNyArNzA1LDcgQEAg
Y29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBs
YXRmb3JtcyB0b28uCiAgICAgY2FzZSA4OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4g
dGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAmdGltZXNOZXdSb21hbi5nZXQoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRt
YXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1
cyB3ZSBhbGxvdyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhl
IGJpdG1hcCBmb250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxNCwxMCBAQCBjb25zdCBB
dG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1z
IHRvby4KICAgICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiBt
aWNyb3NvZnRTYW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gJm1pY3Jvc29mdFNhbnNTZXJp
Zi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxsQXRvbSgpOwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1MDNjNjI0
ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJkNzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0yNiw3ICsy
Niw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNCaWRpQ29u
dGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4geworc3RydWN0
IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1l
U2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKICAgICB2
b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0ZDEuLjVhOGQ5
MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCaWRpRW1iZWRkaW5n
U291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVzZWQgdG8ga2Vl
cCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJs
aWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hhciBsZXZl
bCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVkZGluZ1Nv
dXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423029</attachid>
            <date>2021-03-12 02:58:02 -0800</date>
            <delta_ts>2021-03-15 05:47:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210312105801.patch</filename>
            <type>text/plain</type>
            <size>30390</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNGExNjViZDAzM2FmNTk5OWZiN2MxZDUwNWRjODlk
M2Y0ZjI2OGQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIHRoZSBGb250Q2FjaGUgbG9jayBub3QgaU9TLXNwZWNpZmljIGFuZCB1c2UgaXQgaW4gbW9y
ZSBwbGFjZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhp
c3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6Rm9udENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleTo6Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpmb250Rm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9u
dEZvclBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6dXBkYXRl
Rm9udENhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OnJlbW92ZUNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OmdlbmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbnZh
bGlkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhh
c2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAyMDIx
LTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIz
MmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9u
dEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0
YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNz
IEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAg
IC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2Jh
Y2MxYWY3MmI0NmYwY2M5MDk2ZC4uYTc0OTgzN2ZhOTVlZTg4ZDM0M2I5MzFmNTM4NjFlODBhMDYw
YWNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCkBAIC00NiwxNCArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgi
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2su
aD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vy
c2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC02NSw3ICs1Nyw3
IEBAIEZvbnRDYWNoZSYgRm9udENhY2hlOjpzaW5nbGV0b24oKQogfQogCiBGb250Q2FjaGU6OkZv
bnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1cmdlSW5h
Y3RpdmVGb250RGF0YUlmTmVlZGVkKQorICAgIDogbV9wdXJnZVRpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCiB7CiB9
CiAKQEAgLTczLDcgKzY1LDcgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5KCkgeyB9Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKKyAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMs
IEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMp
CiAgICAgICAgIDogbV9mb250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCiAgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5KQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZl
YXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCkBAIC0x
MDAsNyArOTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uS2V5IG1f
Zm9udERlc2NyaXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7CisgICAgU3RyaW5n
IG1fZmFtaWx5OwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwog
ICAgIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxp
dGllczsKIH07CkBAIC0xNDcsMzMgKzEzOSwzMyBAQCBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKQogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiQ291cmllciIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXJOZXcoIkNvdXJpZXIgTmV3IiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lcygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBwbGF0
Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZS5pc051bGwoKSkKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gY291cmllck5ldygi
Q291cmllciBOZXciLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBTdHJpbmc+IHRpbWVzKCJUaW1lcyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRp
bWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworCisgICAgY29u
c3QgU3RyaW5nKiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGZhbWlseU5hbWUpOworICAgIGlmIChwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRl
KQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAgIHN3aXRj
aCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAgICAgICAg
ICAgcmV0dXJuIGhlbHZldGljYTsKKyAgICAgICAgICAgIHJldHVybiAmaGVsdmV0aWNhLmdldCgp
OwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
InRpbWVzIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAg
IHJldHVybiAmdGltZXNOZXdSb21hbi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3
OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
ImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAg
cmV0dXJuICZjb3VyaWVyTmV3LmdldCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDk6CiAg
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiaGVs
dmV0aWNhIikpCi0gICAgICAgICAgICByZXR1cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1cm4g
JmFyaWFsLmdldCgpOwogICAgICAgICBicmVhazsKICNpZiAhT1MoV0lORE9XUykKICAgICAvLyBP
biBXaW5kb3dzLCBDb3VyaWVyIE5ldyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdheXMg
cHJlc2VudCBhbmQKQEAgLTE4MywyNSArMTc1LDIxIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRD
YWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQog
ICAgIC8vIG9ubHkgYmUgdHJpZWQgaWYgQ291cmllciBOZXcgaXMgbm90IGZvdW5kLgogICAgIGNh
c2UgMTE6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlO
YW1lLCAiY291cmllciBuZXciKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyOworICAgICAg
ICAgICAgcmV0dXJuICZjb3VyaWVyLmdldCgpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAg
IGNhc2UgMTU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHlOYW1lLCAidGltZXMgbmV3IHJvbWFuIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXM7Cisg
ICAgICAgICAgICByZXR1cm4gJnRpbWVzLmdldCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRG
YW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAgICAK
ICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgLy8gTGVh
ZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwgZmxvdyBm
bGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZsb3cgYnkg
b3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJlLgpAQCAt
MjI4LDkgKzIxNiw5IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgIGlmICghaXQt
PnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUpIHsKICAgICAgICAgICAgIC8vIFdlIHdl
cmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0
aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAogICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwv
SGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBldGMuICBUcnkgbG9va2luZyB1cCB0aGUg
Zm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgotICAgICAgICAgICAgY29uc3QgQXRvbVN0cmlu
ZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAg
ICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBG
b250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250
RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICBj
b25zdCBTdHJpbmcqIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5h
bWUpOworICAgICAgICAgICAgaWYgKGFsdGVybmF0ZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBG
b250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENh
Y2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9u
dEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAg
ICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2
aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0
ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4K
ICAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsK
QEAgLTMxNCw2ICszMDIsOCBAQCBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVz
c3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9u
dEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZl
YXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzE1
LDggQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9u
dEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZv
bnRMb2NrKTsKLSNlbmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKwogICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1E
YXRhLCBbJl0gewogICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAg
ICAgfSk7CkBAIC0zNDAsNiArMzI4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQg
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAg
ICAgdW5zaWduZWQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/
IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZv
bnREYXRhOwogCkBAIC0zNTcsMTUgKzM0NywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZv
bnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworCiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9u
dERhdGEoJXUpIiwgcHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNG
cm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZv
bnRMb2NrKTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVj
dG9yPFJlZjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9u
dCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKQEAgLTQ5Nyw2ICs0ODUsNyBAQCBSZWY8Rm9u
dENhc2NhZGVGb250cz4gRm9udENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3Qg
Rm9udENhc2NhZGVEZXNjcgogCiB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUoY29u
c3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRT
ZWxlY3RvcikKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9u
dENhc2NhZGUudXBkYXRlRm9udHMocmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGZvbnRDYXNjYWRl
LmZvbnREZXNjcmlwdGlvbigpLCBXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKIH0KIApAQCAtNTA3
LDkgKzQ5Niw4IEBAIHNpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBGb250
Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAg
IGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYg
KGZvbnQtPmhhc09uZVJlZigpKQpAQCAtNTIyLDYgKzUxMCw4IEBAIHN0YXRpYyBIYXNoU2V0PEZv
bnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250
U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZv
bnRTZWxlY3Rvcio+OwogCkBAIC01MzEsNiArNTIxLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENs
aWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVu
dChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+Y29u
dGFpbnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMywxNSBAQCBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVy
YXRpb24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIHJl
dHVybiBnR2VuZXJhdGlvbjsKIH0KIAogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogewor
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghZ0NsaWVudHMp
IHsKICAgICAgICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmlzRW1wdHkoKSk7CiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uNzA1
MmZhNmVjNGY2ZDNiNzlmYmZkOTYwMjUwNDM5NmVhMzAwZDgwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
ICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2
ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAs
NyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1
ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFn
cyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNw
ZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRl
c2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGlu
Z3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsx
NTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2Vs
ZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5z
aWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOwor
ICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNl
dHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwog
fTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7CiAK
IHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkgZm9u
dERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hl
IChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFtaWxp
ZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNl
bGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0yODgs
MTAgKzI4OSwxMiBAQCBwcml2YXRlOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVu
dGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRy
PEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRp
bmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVz
IGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKICAgICAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmlu
ZyYgYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGljIGNv
bnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyogYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyogcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1l
cjsKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRD
YWNoZT4gbV9wdXJnZVRpbWVyOwogICAgIAogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3Rl
bUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApp
bmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5MjQ4MDQzZmE3NDY0YWRjLi5hMWNjNDZlYjNh
NzliYzBkN2QyODFhODIyMzk2ZDYwYjcyYmIzMTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApA
QCAtMTAxLDggKzEwMSwxMCBAQCBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVz
RXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2FkZURlcwogCiAjZW5kaWYgLy8g
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpm
YW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseTIpCitib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVz
QXJlRXF1YWwoY29uc3QgU3RyaW5nJiBmYW1pbHkxLCBjb25zdCBTdHJpbmcmIGZhbWlseTIpCiB7
CisgICAgaWYgKGZhbWlseTEuaXNFbXB0eSgpIHx8IGZhbWlseTIuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFtaWx5MS5pc0VtcHR5KCkgJiYgZmFtaWx5Mi5pc0VtcHR5KCk7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICBy
ZXR1cm4gZmFtaWx5MSA9PSBmYW1pbHkyOwpAQCAtMTEwLDcgKzExMiw3IEBAIGJvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkxLCBjb25zCiAgICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwo
ZmFtaWx5MSwgZmFtaWx5Mik7CiB9CiAKLXVuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYgZmFtaWx5KQog
ewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVE
ZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0
ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0K
ICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9mYW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVF
cXVhbChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1
bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJv
b2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3Rh
dGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWdu
ZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYx
OTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIzNC4uNjA3ZWEyMGY5YzRjNDkwODgzZjAzNTE1
MjY3ODAyYTYzYzU5YWY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTQ4OCw3ICs0ODgsNiBAQCBzdGF0aWMg
UmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWduZWQgcGFnZU51
bWJlciwgY29uc3QgRm9udAogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CiAKICAgICBpZiAodmFy
aWFudCAhPSBOb3JtYWxWYXJpYW50KQpAQCAtNDk2LDYgKzQ5NSw3IEBAIEdseXBoRGF0YSBGb250
Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250
Q2FzY2FkZURlCiAKICAgICBjb25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gR2x5cGhQYWdlOjpw
YWdlTnVtYmVyRm9yQ29kZVBvaW50KGMpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwogICAgIGF1dG8mIGNhY2hlRW50cnkgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQYWdl
cy5hZGQocGFnZU51bWJlciwgR2x5cGhQYWdlQ2FjaGVFbnRyeSgpKS5pdGVyYXRvci0+dmFsdWUg
OiBtX2NhY2hlZFBhZ2VaZXJvOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBjYWNoZSB3aXRoIGEgZnVs
bCBwYWdlIG9mIGdseXBoIG1hcHBpbmdzIGZyb20gYSBzaW5nbGUgZm9udC4KQEAgLTUxNiw2ICs1
MTYsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6
OnBydW5lU3lzdGVtRmFsbGJhY2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CiAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxs
YmFjayBmb250cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlRm9udHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuaAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1
YmFkMzhkLi41YTRhNWUwNGM4MTIxYzg3ZWExNTdiMWY4NTBlOTZhNmZmYzUwODA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5o
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lk
dGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKQEAgLTQzLDcgKzQ0LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBo
UGFnZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2Nh
ZGVGb250cyk7Ci1jbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9u
dENhc2NhZGVGb250cz4geworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9udENhc2NhZGVGb250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9I
RUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC0xMTQsNiArMTE1
LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0
Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9OwogICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9u
dCB7IGZhbHNlIH07CisgICAgTG9jayBtX2xvY2s7CiB9OwogCiBpbmxpbmUgYm9vbCBGb250Q2Fz
Y2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCkBAIC0xMjUsNyArMTI3LDYgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250
czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAog
aW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CiAgICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmdseXBoRGF0YUZv
ckNoYXJhY3RlcignICcsIEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBvbGljeTo6QWxsb3cpLmZv
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5o
CmluZGV4IGFjOWMxNjk2ZDE0MzdmYzU0ODFhYTYzOTgwYjYxMDA2ZDg1YzJmNTAuLjFmMWZkYmIw
ZjFlNmE1MGE0MmY1MDQ0ZTkyMjA4MTdkZWIyYzBlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
bmNsdWRlICJGb250UmFuZ2VzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCA9IDA7CiB9OwogCi1jbGFzcyBGb250U2Vs
ZWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKK2NsYXNzIEZvbnRTZWxl
Y3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSA9IGRlZmF1bHQ7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKaW5kZXggY2QwZGNkNDZmZWFiMmIx
YmQ3ZmE3ZmUxZWVhMmY4ZDdjMzgyNzczMy4uOGNmOWNkYWNmYjdhYjRlMGY4MTExNjkzYmQ1NmZh
Y2Y1Y2QxOTVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhQYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlLmgKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8
dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHbHlwaERhdGEgewog
Ly8gQSBHbHlwaFBhZ2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERhdGEgbWFw
cGluZ3MgZm9yIGEgY29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgVW5p
Y29kZSBjb2RlIHNwYWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBzdGFydGluZyBmcm9t
IDAgYW5kIGluY3JlbWVudGluZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVyIG9mIGdseXBocy4KLWNs
YXNzIEdseXBoUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4geworY2xhc3MgR2x5
cGhQYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8R2x5cGhQYWdlPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCkKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZj
MjVjNDFmMzcyZGU1MjRiMS4uMWQwZjEyNjUyODJmODhhZDE0ZGRhZDQzNmJjMDEwNTJmYzA5OTZm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtMTQyOCw3ICsxNDI4LDcgQEAgUmVmUHRy
PEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZGVzY3IKICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5h
dGVGb250KTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK2NvbnN0IFN0cmlu
ZyogRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5TmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9
IHsgMHg5ZWQxLCAweDRmNTMgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5n
W10gPSB7IDB4NWI4YiwgMHg0ZjUzIH07CkBAIC0xNDM2LDQ1ICsxNDM2LDQ1IEBAIGNvbnN0IEF0
b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlsCiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmlu
Z1tdID0geyAweDVmYWUsIDB4OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29u
c3QgVUNoYXIgd2VpcnVhblpoZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4
NmI2MywgMHg5ZWQxLCAweDlhZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFu
ZyBUQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzb25ndGlTQygiU29uZ3RpIFNDIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gc29uZ3RpVEMoIlNvbmd0aSBUQyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGhlaXRpU0NSZXBsYWNl
bWVudCgiUGluZ0ZhbmcgU0MiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBoZWl0aVRDUmVwbGFjZW1lbnQoIlBp
bmdGYW5nIFRDIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAKICAgICBzd2l0Y2gg
KGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmIChlcXVhbChm
YW1pbHlOYW1lLCBzb25ndGlTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIHNvbmd0aVNDOwor
ICAgICAgICAgICAgcmV0dXJuICZzb25ndGlTQy5nZXQoKTsKICAgICAgICAgaWYgKGVxdWFsKGZh
bWlseU5hbWUsIGhlaXRpU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBoZWl0aVNDUmVwbGFj
ZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gJmhlaXRpU0NSZXBsYWNlbWVudC5nZXQoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgogICAgICAgICBpZiAoZXF1YWwoZmFtaWx5TmFtZSwg
d2VpcnVhbllhSGVpU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBoZWl0aVNDUmVwbGFjZW1l
bnQ7CisgICAgICAgICAgICByZXR1cm4gJmhlaXRpU0NSZXBsYWNlbWVudC5nZXQoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1YWwoZmFtaWx5TmFtZSwgd2Vp
cnVhblpoZW5nSGVpdGlTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGhlaXRpVENSZXBsYWNl
bWVudDsKKyAgICAgICAgICAgIHJldHVybiAmaGVpdGlUQ1JlcGxhY2VtZW50LmdldCgpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDY6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAic2ltc3VuIikpCi0gICAgICAgICAgICByZXR1cm4gc29u
Z3RpU0M7CisgICAgICAgICAgICByZXR1cm4gJnNvbmd0aVNDLmdldCgpOwogICAgICAgICBpZiAo
ZXF1YWwoZmFtaWx5TmFtZSwgd2VpcnVhblhpblhpTWluZ1RpKSkKLSAgICAgICAgICAgIHJldHVy
biBzb25ndGlUQzsKKyAgICAgICAgICAgIHJldHVybiAmc29uZ3RpVEMuZ2V0KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgMTA6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgbWluZ2xpdSIpKQotICAgICAgICAgICAgcmV0dXJuIHNv
bmd0aVRDOworICAgICAgICAgICAgcmV0dXJuICZzb25ndGlUQy5nZXQoKTsKICAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIlxcNWI4YlxcNGY1MyIpKQotICAg
ICAgICAgICAgcmV0dXJuIHNvbmd0aVNDOworICAgICAgICAgICAgcmV0dXJuICZzb25ndGlTQy5n
ZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxODoKICAgICAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtaWNyb3NvZnQgamhlbmdoZWkiKSkK
LSAgICAgICAgICAgIHJldHVybiBoZWl0aVRDUmVwbGFjZW1lbnQ7CisgICAgICAgICAgICByZXR1
cm4gJmhlaXRpVENSZXBsYWNlbWVudC5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHZvaWQgYWRk
QXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmli
dXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggZjAyN2VlZDMxNzE0NDRiYzM2YTQzNDQ3
NjNiNzNlMTJkYjJhMDI2Ny4uMTM5ODg0YmNmMmFkNzQ2ZjNjOGJkYjVjZTZjNGQ0YzU2Mjk0NTI4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtNTk5LDkgKzU5OSw5IEBAIHN0
ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgQXRvbVN0cmluZyYpCitjb25zdCBTdHJpbmcqIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgp
OworICAgIHJldHVybiBudWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4u
ZWIwMTIzNjQwOGQ5NDkxYWRkZWQzZmZkZjJiZmNlYWYxOWMyZDdkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAg
LTY5MiwxMCArNjkyLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK2NvbnN0IFN0cmluZyog
Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWljcm9zb2Z0IFNhbnMg
U2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFu
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPGNvbnN0IFN0cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJNaWNyb3NvZnQgU2FucyBTZXJp
ZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCiAgICAgc3dpdGNoIChmYW1pbHlO
YW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRt
YXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCkBAIC03MDUsNyAr
NzA1LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9u
IG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSA4OgogICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNlcmlmIikpCi0gICAgICAgICAg
ICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAmdGltZXNOZXdSb21h
bi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3Vw
cG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAg
ICAgLy8gVGh1cyB3ZSBhbGxvdyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2
ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxNCwxMCBA
QCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIg
cGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAg
IHJldHVybiBtaWNyb3NvZnRTYW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gJm1pY3Jvc29m
dFNhbnNTZXJpZi5nZXQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxs
QXRvbSgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRi
ZWE1MDNjNjI0ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJk
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBA
IC0yNiw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXpl
QXNCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4g
eworc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAx
NjsKICAgICB2b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpQ29udGV4dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0
ZDEuLjVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCaWRp
RW1iZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVz
ZWQgdG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRl
eHQgOiBwdWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworY2xhc3MgQmlkaUNvbnRleHQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQg
Y2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVt
YmVkZGluZ1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVs
bHB0cik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423162</attachid>
            <date>2021-03-15 05:47:22 -0700</date>
            <delta_ts>2021-03-15 07:03:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210315124720.patch</filename>
            <type>text/plain</type>
            <size>34375</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uZmViNzAzYmQ3ZjRiYmU5MTZjZTE4ZWJjZTQ1YzRi
OTc4MTQ0MWI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHJlbW92aW5nIHVzZSBvZiBBdG9tU3RyaW5nIHdoZXJl
IG5vbi1tYWluIHRocmVhZHMgYXJlIGV4cGVjdGVkIHRvCisgICAgICAgIGFjY2VzcyBhIHBhcnRp
Y3VsYXIgcGF0aC4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRoZSBwYXJ0
aWFsIGxvY2tpbmcgaW1wbGVtZW50YXRpb24gdXNlZCBieQorICAgICAgICBpT1MgZm9yIHRoZSB3
ZWIgdGhyZWFkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXk6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZv
bnRGb3JQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnVwZGF0
ZUZvbnRDYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVGb250
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjphZGRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZW5lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52
YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb25LZXk6OkZvbnREZXNjcmlwdGlvbktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2gpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1BbHRl
cm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6bGFzdFJlc29y
dEZhbGxiYWNrRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0UmVz
b3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6bGFzdFJlc29ydEZh
bGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJu
YXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAyMDIxLTAzLTEwICBD
b21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUz
MGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhl
clRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIp
OwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQp
OwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQg
dG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0
NmYwY2M5MDk2ZC4uMGU0YjgxNzA2ZWE3MzhiNTkyNThiNjkwMDJjNzEwN2VhZGEyOTk4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00
NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNs
dWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sg
Zm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9u
dENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hl
KCkKLSAgICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZv
bnREYXRhSWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlz
LCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAt
NzMsNyArNjQsNyBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkoKSB7IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAg
ICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWls
eShmYW1pbHkpCiAgICAgICAgICwgbV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMg
PyAqZm9udEZhY2VGZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTEwMCw3ICs5
MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVz
Y3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1p
bHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwog
fTsKQEAgLTE0NywzMyArMTM4LDI1IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZv
bnRQbGF0Zm9ybURhdGFDYWNoZSgpCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9t
U3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVG
YW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRo
cmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZv
cm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlO
YW1lKTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAg
aWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRl
cm5hdGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
YXJpYWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1
cm4gIkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9t
YW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3
OworICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAg
ICAgICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1Mp
CiAgICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQg
aXMgYWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE2NiwyOSBAQCBjb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3Vu
ZC4KICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmll
cjsKKyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRp
bWVzOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5n
JiBwYXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZv
bnRMb2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQ
RV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMg
V2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ug
d2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRo
ZSBXaW5kb3dzIGZlYXR1cmUuCiAgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBv
ZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBw
YXNzZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDog
QXRvbVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICBj
b25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwg
cGFzc2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KKyAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6
IFN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKICNlbHNlCi0g
ICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAg
Y29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAg
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjgsOSArMjA3LDggQEAgRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJu
YXRlTmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBhIGZvbnQu
ICBXZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFt
ZXMsCiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmll
ciBOZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5h
bWUuCi0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVOYW1lID0gYWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICghYWx0ZXJuYXRlTmFt
ZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0
Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5hbWUgPSBh
bHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXV0byog
Zm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhl
IGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5
IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNp
dmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAgICAgICAg
aXQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0zMTIsOCArMjkwLDEw
IEBAIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3Qg
dW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBj
b25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEg
PSAzMDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5
LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0
aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA1LDggQEAgUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgot
ICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGF1dG8gYWRk
UmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJl0gewogICAgICAg
ICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7CkBAIC0zNDAsNiAr
MzE4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6
c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5zaWduZWQgaW5hY3Rp
dmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVBy
ZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCkBAIC0zNTcs
MTUgKzMzNywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVk
ZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1
cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAg
TE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoJXUpIiwgcHVyZ2VD
b3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNo
ZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgot
CiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJlZjxGb250PiwgMjA+
IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCku
dmFsdWVzKCkpIHsKQEAgLTQ5Nyw2ICs0NzUsNyBAQCBSZWY8Rm9udENhc2NhZGVGb250cz4gRm9u
dENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcgog
CiB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIGZv
bnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9udENhc2NhZGUudXBkYXRlRm9u
dHMocmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
LCBXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKIH0KIApAQCAtNTA3LDkgKzQ4Niw4IEBAIHNpemVf
dCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9u
dENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGZvciAoYXV0byYgZm9udCA6
IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGZvbnQtPmhhc09uZVJlZigp
KQpAQCAtNTIyLDYgKzUwMCw4IEBAIHN0YXRpYyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+KiBnQ2xp
ZW50czsKIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIWdDbGll
bnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+OwogCkBA
IC01MzEsNiArNTExLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3Im
IGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImIGNs
aWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBBU1NF
UlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+Y29udGFpbnMoJmNsaWVudCkpOwog
CkBAIC01NDEsMTEgKzUyMywxNSBAQCBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ0dlbmVyYXRpb24g
PSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRpb24oKQogeworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIHJldHVybiBnR2VuZXJhdGlvbjsK
IH0KIAogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogeworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghZ0NsaWVudHMpIHsKICAgICAgICAgQVNTRVJU
KGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggZGVjZDY3
ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uNTllNDk4NWQ5ZTgyYzMwMGY1NDdk
Y2ZmMzRkYWMxMzE1ZDE4MTg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250VGFn
Z2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2lu
Y2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAsNyBAQCBzdHJ1Y3QgRm9udERl
c2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhl
bFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZv
bnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVz
Y3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmllZExvY2Fs
ZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0
cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVT
ZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGluZ3MoZGVzY3JpcHRpb24udmFy
aWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBtX2Zv
bnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mg
e3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOworICAgIFN0cmluZyBtX2xvY2Fs
ZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNldHRpbmdzOwogICAgIEZvbnRW
YXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwogfTsKQEAgLTE3OCw3ICsxNzks
NyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7CiAKIHN0cnVjdCBGb250Q2FzY2Fk
ZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAv
LyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2Jq
ZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0
cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CiAgICAgdW5z
aWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0yMjYsNyArMjI3LDcgQEAgcHVibGlj
OgogICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3aGVuIHlvdSBjcmVhdGUgYW4gQGZvbnQtZmFj
ZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBhcyBhIHByZWluc3RhbGxlZCBmb250LgogICAg
IFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJp
bGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmll
ZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0Fs
dGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZv
bnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJv
b2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKTsKICAgICBSZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KTsKQEAgLTI4MywxNSArMjg0
LDE3IEBAIHByaXZhdGU6CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRD
YWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4mJik7CiAKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFsbHkg
YmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0s
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOworICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNl
KTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZv
cm0uCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+
IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0
aWVzKTsKICAgICAKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGlj
IE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBwbGF0Zm9ybUFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7CisgICAg
UmVjdXJzaXZlTG9jayBtX2xvY2s7CisKKyAgICBSdW5Mb29wOjpUaW1lcjxGb250Q2FjaGU+IG1f
cHVyZ2VUaW1lcjsKICAgICAKICAgICBib29sIG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9y
QWNjZXNzaWJpbGl0eSB7IGZhbHNlIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKaW5kZXggMWQy
OTNkN2YxNThjZDVjMjlhYTAyYzMxOTI0ODA0M2ZhNzQ2NGFkYy4uN2MzZDNmNjkwYzYzNjUyNzcw
NmUyNWFlN2ExZTZmNWJiYzAxMGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAKQEAgLTEwMSw4
ICsxMDEsMTAgQEAgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbGllc0VxdWFsRm9y
VGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2NhZGVEZXMKIAogI2VuZGlmIC8vIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCiAKLWJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkyKQorYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFs
KGNvbnN0IFN0cmluZyYgZmFtaWx5MSwgY29uc3QgU3RyaW5nJiBmYW1pbHkyKQogeworICAgIGlm
IChmYW1pbHkxLmlzTnVsbCgpIHx8IGZhbWlseTIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YW1pbHkxLmlzRW1wdHkoKSAmJiBmYW1pbHkyLmlzRW1wdHkoKTsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICBpZiAoZmFtaWx5MS5zdGFydHNXaXRoKCcuJykpCiAgICAgICAgIHJldHVybiBmYW1p
bHkxID09IGZhbWlseTI7CkBAIC0xMTAsNyArMTEyLDcgQEAgYm9vbCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNv
bnMKICAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVhbChmYW1pbHkxLCBm
YW1pbHkyKTsKIH0KIAotdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFt
ZUhhc2goY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQordW5zaWduZWQgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7CiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcuJykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0
aW9uLmgKaW5kZXggMGE3ZGYyNTI4ZGFjNjJhOGM1YTg5MGJkMmRmYTQzMGEyMTRkZDdmNi4uMzc5
Y2FkN2ZkNThlZDFmN2QyZjAxNThhNmQzMWE4OTFiYzA2M2JkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aApAQCAtNTcsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQogICAgIGNvbnN0
IFJlZkNvdW50ZWRBcnJheTxBdG9tU3RyaW5nPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBt
X2ZhbWlsaWVzOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0
IEF0b21TdHJpbmcmLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGZh
bWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBmYW1pbHlO
YW1lc0FyZUVxdWFsKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB1
bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgU3RyaW5n
IGZvbGRlZEZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICB1bnNpZ25lZCBlZmZlY3Rp
dmVGYW1pbHlDb3VudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAppbmRleCAyZGRkNmJkZjE5NDM4NDE3YWRl
YTcxMTI0N2QyMTc2ZDU3NjM1MjM0Li42MDdlYTIwZjljNGM0OTA4ODNmMDM1MTUyNjc4MDJhNjNj
NTlhZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcApAQCAtNDg4LDcgKzQ4OCw2IEBAIHN0YXRpYyBSZWZQdHI8R2x5
cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25z
dCBGb250CiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Rm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJpYW50KTsKIAogICAgIGlmICh2YXJpYW50ICE9IE5v
cm1hbFZhcmlhbnQpCkBAIC00OTYsNiArNDk1LDcgQEAgR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9u
dHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGUK
IAogICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBHbHlwaFBhZ2U6OnBhZ2VOdW1iZXJG
b3JDb2RlUG9pbnQoYyk7CiAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAg
ICAgYXV0byYgY2FjaGVFbnRyeSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2VzLmFkZChwYWdl
TnVtYmVyLCBHbHlwaFBhZ2VDYWNoZUVudHJ5KCkpLml0ZXJhdG9yLT52YWx1ZSA6IG1fY2FjaGVk
UGFnZVplcm87CiAKICAgICAvLyBJbml0aWFsaXplIGNhY2hlIHdpdGggYSBmdWxsIHBhZ2Ugb2Yg
Z2x5cGggbWFwcGluZ3MgZnJvbSBhIHNpbmdsZSBmb250LgpAQCAtNTE2LDYgKzUxNiw3IEBAIEds
eXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBjb25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0
ZW1GYWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAg
ICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNrIGZvbnRz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVG
b250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZiYTVjMTgzYTU4ZjViYWQzOGQuLjVh
NGE1ZTA0YzgxMjFjODdlYTE1N2IxZjg1MGU5NmE2ZmZjNTA4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJXaWR0aENhY2hlLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtNDMs
NyArNDQsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRGb250R2x5cGhQYWdlOwogCiBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsK
LWNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2FkZUZv
bnRzPiB7CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q2Fz
Y2FkZUZvbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJ
RklFUihGb250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTExNCw2ICsxMTUsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKICAgICBQaXRjaCBtX3BpdGNo
IHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2Ug
fTsKKyAgICBMb2NrIG1fbG9jazsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6
OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
QEAgLTEyNSw3ICsxMjcsNiBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVk
UGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcAogCiBpbmxpbmUgY29u
c3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKICAgICAgICAgYXV0byYgcHJpbWFyeVJh
bmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICAgICAg
bV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5
YzE2OTZkMTQzN2ZjNTQ4MWFhNjM5ODBiNjEwMDZkODVjMmY1MC4uMWYxZmRiYjBmMWU2YTUwYTQy
ZjUwNDRlOTIyMDgxN2RlYjJjMGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZv
bnRSYW5nZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzTG9hZGluZygpIGNvbnN0ID0gMDsKIH07CiAKLWNsYXNzIEZvbnRTZWxlY3RvciA6IHB1
YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4geworY2xhc3MgRm9udFNlbGVjdG9yIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgogICAgIHZp
cnR1YWwgfkZvbnRTZWxlY3RvcigpID0gZGVmYXVsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAppbmRleCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFl
ZWEyZjhkN2MzODI3NzMzLi44Y2Y5Y2RhY2ZiN2FiNGUwZjgxMTE2OTNiZDU2ZmFjZjVjZDE5NWQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAt
MzIsOCArMzIsOCBAQAogCiAjaW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IEdseXBoRGF0YSB7CiAvLyBBIEdseXBo
UGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUgc2V0IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3Ig
YSBjb250aWd1b3VzCiAvLyByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUg
c3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4ZWQKIC8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5j
cmVtZW50aW5nIGZvciBlYWNoICJzaXplIiBudW1iZXIgb2YgZ2x5cGhzLgotY2xhc3MgR2x5cGhQ
YWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CitjbGFzcyBHbHlwaFBhZ2UgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxHbHlwaFBhZ2U+IGNyZWF0ZShjb25zdCBGb250JiBmb250KQogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcAppbmRleCBmYTc3YjM5OTc3ZGI5NzhhMDU5NzFiNmMyNWM0MWYzNzJk
ZTUyNGIxLi40NTIwNzI3MzE4YTU0ZDY4ZmUzNGQzMWEyY2MxMjYxYmNiNzczZjJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCkBAIC0xNDI4LDcgKzE0MjgsNyBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwog
fQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4
OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0g
eyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzNiwxMCArMTQzNiwxMCBAQCBjb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9
IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMs
IDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25z
dGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0Mi
X3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50
ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7
CiAgICAgY2FzZSAyOgpAQCAtMTQ3NCw3ICsxNDc0LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVk
Rm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKQEAgLTE1NDcsNyArMTU0Nyw3IEBAIFJl
ZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0
dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93
IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3
aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9y
RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsK
IAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmMDI3ZWVkMzE3MTQ0NGJjMzZhNDM0NDc2M2I3
M2UxMmRiMmEwMjY3Li41M2I2Yzk1OTgyZGRhZjE4MmExNmMzMmNkYmZiNGRjODBmOWVjZmY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0zMTksOCArMzE5LDcgQEAgUmVmPEZv
bnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNr
IGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAg
ICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBp
c0ZhbGxiYWNrRm9udEFsbG93ZWQuCi0gICAgc3RhdGljIEF0b21TdHJpbmcgdGltZXNTdHIoInNl
cmlmIik7Ci0gICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9udEZvckZhbWlseShmb250RGVz
Y3JpcHRpb24sIHRpbWVzU3RyKSkKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9y
RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKICAgICAgICAgcmV0dXJuICpmb250
OwogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSByZWFjaGVkIGR1ZSB0byBpbXByb3Blcmx5LWluc3Rh
bGxlZCBvciBtaXNjb25maWd1cmVkIGZvbnRjb25maWcuCkBAIC01OTksOSArNTk4LDkgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhOwogfQogCi1jb25z
dCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBBdG9tU3RyaW5nJikKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9y
bUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gbnVsbEF0
b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElP
Tl9GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2
MzgyZjYxMy4uY2Y4NTQ4YWRmMWZjODZlM2RlZDA2ZDMwNzI4NzZjYjNkMWU4YmVhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAKQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbgogCiBSZWY8
Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOwogCiAgICAgaWYgKCFmYWxsYmFja0ZvbnRO
YW1lLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBSZWY8
Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aQogICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWlu
c3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCiAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVh
c3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNv
ZGVfdHlwZWZhY2VzCiAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5j
ZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxi
YWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNy
b3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAg
ICAgICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgU3RyaW5nKCJUaW1l
cyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3Ry
aW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpCiAgICAgfTsKICAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsr
aSkgewpAQCAtNjkyLDExICs2OTIsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0
YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWlj
cm9zb2Z0IFNhbnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0K
ICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBPbiBXaW5kb3dzLCB3
ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMg
c3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRl
cm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNlcmlmLApAQCAtNzA1LDcgKzcwMiw3IEBA
IGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1l
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBw
bGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgODoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJu
IHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsK
ICAgICAgICAgYnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRt
YXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1
cyB3ZSBhbGxvdyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhl
IGJpdG1hcCBmb250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxMSwxMCBAQCBjb25zdCBB
dG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1z
IHRvby4KICAgICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiBt
aWNyb3NvZnRTYW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gIk1pY3Jvc29mdCBTYW5zIFNl
cmlmIl9zOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlDb250ZXh0LmNwcAppbmRleCBjOWYwZjgxM2JjYjYzNjYxNTRiYzA0YmVhNTAz
YzYyNGZhZWEwMWI1Li41NWYxYjFhZjdmYTFkOWM5MjZhMDE3NjA5MjU0MWJmYmEwNzZiZDc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcApAQCAtMjYs
NyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzQmlk
aUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKK3N0
cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CiAgICAgdWludDMyX3QgYml0ZmllbGRzIDogMTY7CiAg
ICAgdm9pZCogcGFyZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuaAppbmRleCBkNGM0ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5NjcwZDM5YmQzNGQxLi41
YThkOTA5ZWVhOTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2EyNjAzZDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCkBAIC0yMiwxNSArMjIsMTUgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQmlkaUVtYmVk
ZGluZ1NvdXJjZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9tVW5pY29kZSB9OwogCiAvLyBVc2VkIHRv
IGtlZXAgdHJhY2sgb2YgZXhwbGljaXQgZW1iZWRkaW5ncy4KLWNsYXNzIEJpZGlDb250ZXh0IDog
cHVibGljIFJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK2NsYXNzIEJpZGlDb250ZXh0IDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CiBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIg
bGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRp
bmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIp
OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423175</attachid>
            <date>2021-03-15 07:03:30 -0700</date>
            <delta_ts>2021-03-15 07:23:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210315140329.patch</filename>
            <type>text/plain</type>
            <size>36409</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uYjM0ZDM5YzU3MWM0ZWE4ODE0Zjc1YTI4YWIzYTdm
MjQzODBhMWQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHJlbW92aW5nIHVzZSBvZiBBdG9tU3RyaW5nIHdoZXJl
IG5vbi1tYWluIHRocmVhZHMgYXJlIGV4cGVjdGVkIHRvCisgICAgICAgIGFjY2VzcyBhIHBhcnRp
Y3VsYXIgcGF0aC4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRoZSBwYXJ0
aWFsIGxvY2tpbmcgaW1wbGVtZW50YXRpb24gdXNlZCBieQorICAgICAgICBpT1MgZm9yIHRoZSB3
ZWIgdGhyZWFkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXk6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZv
bnRGb3JQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnVwZGF0
ZUZvbnRDYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVGb250
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjphZGRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZW5lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52
YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb25LZXk6OkZvbnREZXNjcmlwdGlvbktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2gpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c2ltaWxhckZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmg6CisKIDIwMjEtMDMtMTAgIENvbW1pdCBRdWV1ZSAg
PGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGlu
ZyByMjc0MTY2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IGM3
ZGE1NDkzZmMxNDY0MDE4YTcxYWIyMTg5ZmE1NWY2YjZiYjMyYWYuLmI2ZTMwYzVjM2U0ZDgyMTg0
ZmQ5NDg0OWE5YzI1ZDFiOGJjMjY0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250
UmVmLCB1bnNpZ25lZCB0YWJsZVRhZzEsIHVuc2lnbmVkIHRhYmxlVGFnMik7CiAjZW5kaWYKIAog
REVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udCk7Ci1jbGFzcyBGb250
IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udD4geworY2xhc3MgRm9udCA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxGb250PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9I
RUFQX0lERU5USUZJRVIoRm9udCk7CiBwdWJsaWM6CiAgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxh
dGZvcm0gZm9udHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAppbmRleCBmYjBmODhkYTc5MWEzYTYxYzU3YmFjYzFhZjcyYjQ2ZjBjYzkwOTZkLi4w
ZTRiODE3MDZlYTczOGI1OTI1OGI2OTAwMmM3MTA3ZWFkYTI5OTg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTQ2LDE1ICs0Niw2IEBA
CiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKICNlbmRpZgogCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9SZWN1
cnNpdmVMb2NrQWRhcHRlci5oPgotCi1zdGF0aWMgUmVjdXJzaXZlTG9jayBmb250TG9jazsKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtNjUsNyArNTYsNyBAQCBGb250Q2FjaGUmIEZvbnRD
YWNoZTo6c2luZ2xldG9uKCkKIH0KIAogRm9udENhY2hlOjpGb250Q2FjaGUoKQotICAgIDogbV9w
dXJnZVRpbWVyKCp0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRl
ZCkKKyAgICA6IG1fcHVyZ2VUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZGb250Q2FjaGU6
OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogewogfQogCkBAIC03Myw3ICs2NCw3IEBA
IHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSgpIHsgfQotICAg
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMpCisgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lm
aWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogICAgICAgICA6IG1fZm9udERl
c2NyaXB0aW9uS2V5KGRlc2NyaXB0aW9uKQogICAgICAgICAsIG1fZmFtaWx5KGZhbWlseSkKICAg
ICAgICAgLCBtX2ZvbnRGYWNlRmVhdHVyZXMoZm9udEZhY2VGZWF0dXJlcyA/ICpmb250RmFjZUZl
YXR1cmVzIDogRm9udEZlYXR1cmVTZXR0aW5ncygpKQpAQCAtMTAwLDcgKzkxLDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIEZvbnREZXNjcmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsK
LSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5OworICAgIFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250
RmVhdHVyZVNldHRpbmdzIG1fZm9udEZhY2VGZWF0dXJlczsKICAgICBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIG1fZm9udEZhY2VDYXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQ3LDMz
ICsxMzgsMjUgQEAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSYgZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkKICAgICByZXR1cm4gY2FjaGU7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRD
YWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQor
T3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJpYWwoIkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gY291cmllcigiQ291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGNvdXJpZXJOZXcoIkNvdXJpZXIgTmV3IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gaGVsdmV0aWNhKCJIZWx2ZXRpY2EiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiB0aW1lcygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5n
PiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBwbGF0Zm9ybVNwZWNpZmljQWx0
ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgIGlm
ICghcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZS5pc051bGwoKSkKKyAgICBpZiAoYXV0byBwbGF0
Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWls
eU5hbWUpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAg
IHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAg
ICAgICAgICAgcmV0dXJuIGhlbHZldGljYTsKKyAgICAgICAgICAgIHJldHVybiAiSGVsdmV0aWNh
Il9zOwogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFt
ZSwgInRpbWVzIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAg
ICAgIHJldHVybiAiVGltZXMgTmV3IFJvbWFuIl9zOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IDc6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1l
LCAiY291cmllciIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXJOZXc7CisgICAgICAgICAg
ICByZXR1cm4gIkNvdXJpZXIgTmV3Il9zOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDk6CiAg
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiaGVs
dmV0aWNhIikpCi0gICAgICAgICAgICByZXR1cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1cm4g
IkFyaWFsIl9zOwogICAgICAgICBicmVhazsKICNpZiAhT1MoV0lORE9XUykKICAgICAvLyBPbiBX
aW5kb3dzLCBDb3VyaWVyIE5ldyBpcyBhIFRydWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdheXMgcHJl
c2VudCBhbmQKQEAgLTE4MywzMyArMTY2LDI5IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogICAg
IC8vIG9ubHkgYmUgdHJpZWQgaWYgQ291cmllciBOZXcgaXMgbm90IGZvdW5kLgogICAgIGNhc2Ug
MTE6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1l
LCAiY291cmllciBuZXciKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyOworICAgICAgICAg
ICAgcmV0dXJuICJDb3VyaWVyIl9zOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2Ug
MTU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1l
LCAidGltZXMgbmV3IHJvbWFuIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXM7CisgICAgICAg
ICAgICByZXR1cm4gIlRpbWVzIl9zOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1
cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIHBhc3NlZEZhbWls
eU5hbWUsCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmlu
ZyYgcGFzc2VkRmFtaWx5TmFtZSwKICAgICBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNl
Q2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2Vu
ZGlmCi0gICAgCiAjaWYgT1MoV0lORE9XUykgJiYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQog
ICAgIC8vIExlYWRpbmcgIkAiIGluIHRoZSBmb250IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRp
Y2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZvbnQuCiAgICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNh
bCBmbG93IGJ5IG91cnNlbHZlcywgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVh
dHVyZS4KICAgICAvLyBJRSBkaXNyZWdhcmRzICJAIiByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRh
dG9pbiwgc28gd2UgZm9sbG93IHRoZSBiZWhhdmlvci4KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lID0gKHBhc3NlZEZhbWlseU5hbWUuaXNFbXB0eSgpIHx8IHBhc3NlZEZhbWlseU5h
bWVbMF0gIT0gJ0AnKSA/Ci0gICAgICAgIHBhc3NlZEZhbWlseU5hbWUgOiBBdG9tU3RyaW5nKHBh
c3NlZEZhbWlseU5hbWUuaW1wbCgpLT5zdWJzdHJpbmcoMSkpOworICAgIGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1pbHlO
YW1lWzBdICE9ICdAJykgPworICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogU3RyaW5nKHBhc3Nl
ZEZhbWlseU5hbWUuaW1wbCgpLT5zdWJzdHJpbmcoMSkpOwogI2Vsc2UKLSAgICBjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcm
IGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9v
bCBpbml0aWFsaXplZDsKQEAgLTIyOCw5ICsyMDcsOCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250
Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
bwogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7CiAg
ICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUgYSBz
bWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKICAgICAgICAg
ICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRjLiAg
VHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KLSAgICAgICAg
ICAgIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1l
KGZhbWlseU5hbWUpOwotICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGVOYW1lLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZvckFs
dGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwg
YWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRy
dWUpOworICAgICAgICAgICAgaWYgKGF1dG8gYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWls
eU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBmb250UGxhdGZvcm1E
YXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmls
aXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBo
YXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAg
ICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0
Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKQEAgLTMxMiw4ICsyOTAsMTAgQEAgY29uc3QgdW5z
aWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4
VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVk
IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBh
YmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1l
KQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRD
YXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICgh
bV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNo
b3QoMF9zKTsKIApAQCAtMzI1LDEwICszMDUsOCBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpm
b250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjbwog
CiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0gICAgCisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgYXV0byBhZGRSZXN1bHQgPSBjYWNo
ZWRGb250cygpLmVuc3VyZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAgICAgICAgIHJldHVybiBGb250
OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9KTsKQEAgLTM0MCw2ICszMTgsOCBAQCBSZWY8
Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSkKIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0
YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgYm9vbCB1
bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5p
c1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZvbnREYXRhTGlt
aXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2
ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7CiAKQEAgLTM1NywxNSArMzM3LDEzIEBA
IHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiAKIHZvaWQg
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIHsK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBMT0coRm9udHMsICJG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSgldSkiLCBwdXJnZUNvdW50KTsKIAogICAg
IHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1
bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0KICAgICB3aGlsZSAo
cHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8UmVmPEZvbnQ+LCAyMD4gZm9udHNUb0RlbGV0
ZTsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewpA
QCAtNDk3LDYgKzQ3NSw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJp
ZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAKIHZvaWQgRm9udENh
Y2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIFJl
ZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVGb250cyhyZXRyaWV2ZU9y
QWRkQ2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1vdmUoZm9u
dFNlbGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDg2LDggQEAgc2l6ZV90IEZvbnRDYWNoZTo6
Zm9udENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250
TG9jayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMo
KS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCkBAIC01MjIsNiAr
NTAwLDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwogCiB2b2lk
IEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghZ0NsaWVudHMpCiAgICAgICAg
IGdDbGllbnRzID0gbmV3IEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj47CiAKQEAgLTUzMSw2ICs1MTEs
OCBAQCB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogCiB2
b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIEFTU0VSVChnQ2xpZW50cyk7
CiAgICAgQVNTRVJUKGdDbGllbnRzLT5jb250YWlucygmY2xpZW50KSk7CiAKQEAgLTU0MSwxMSAr
NTIzLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBnR2VuZXJhdGlvbiA9IDA7CiAKIHVuc2ln
bmVkIHNob3J0IEZvbnRDYWNoZTo6Z2VuZXJhdGlvbigpCiB7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2xvY2spOworCiAgICAgcmV0dXJuIGdHZW5lcmF0aW9uOwogfQogCiB2b2lkIEZv
bnRDYWNoZTo6aW52YWxpZGF0ZSgpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3Jt
RGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4
MmQ4ZmNiNTc4YzMxMjNkNTdmZjJlLi41OWU0OTg1ZDllODJjMzAwZjU0N2RjZmYzNGRhYzEzMTVk
MTgxODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aApAQCAtMzMsMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmdIYXNoLmg+CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkg
ewogICAgICAgICA6IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQogICAg
ICAgICAsIG1fZm9udFNlbGVjdGlvblJlcXVlc3QoZGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJl
cXVlc3QoKSkKICAgICAgICAgLCBtX2ZsYWdzKG1ha2VGbGFnc0tleShkZXNjcmlwdGlvbikpCi0g
ICAgICAgICwgbV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkpCisgICAgICAg
ICwgbV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkuc3RyaW5nKCkpCiAgICAg
ICAgICwgbV9mZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkpCiAg
ICAgICAgICwgbV92YXJpYXRpb25TZXR0aW5ncyhkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5n
cygpKQogICAgIHsgfQpAQCAtMTU3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV9zaXplIHsgMCB9OwogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJl
cXVlc3Q7CiAgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19Owot
ICAgIEF0b21TdHJpbmcgbV9sb2NhbGU7CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRG
ZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRp
bmdzIG1fdmFyaWF0aW9uU2V0dGluZ3M7CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBG
b250RGVzY3JpcHRpb25LZXlIYXNoIHsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewog
ICAgIEZvbnREZXNjcmlwdGlvbktleSBmb250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRo
IHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZl
Y3RvcjxBdG9tU3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1p
bGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2Vs
ZWN0b3JWZXJzaW9uOwogfTsKQEAgLTIyNiw3ICsyMjcsNyBAQCBwdWJsaWM6CiAgICAgLy8gSXQg
Y29tZXMgaW50byBwbGF5IHdoZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJl
cyBhIGZhbWlseSBuYW1lIGFzIGEgcHJlaW5zdGFsbGVkIGZvbnQuCiAgICAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWls
eShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRG
YWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVz
IGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9
IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmll
ZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0Fs
dGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgUmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOwogICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpOwpAQCAtMjgzLDE1ICsyODQsMTcgQEAgcHJpdmF0
ZToKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAog
ICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgot
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVy
ZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxw
dHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KICAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAot
ICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVND
SUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmKTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKKyAgICBSZWN1cnNpdmVMb2Nr
IG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOwog
ICAgIAogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5
IHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMy
OWFhMDJjMzE5MjQ4MDQzZmE3NDY0YWRjLi43YzNkM2Y2OTBjNjM2NTI3NzA2ZTI1YWU3YTFlNmY1
YmJjMDEwYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDggKzEwMSwxMCBAQCBi
b29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1Npemlu
Zyhjb25zdCBGb250Q2FzY2FkZURlcwogCiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklO
RykKIAotYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTIpCitib29s
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5n
JiBmYW1pbHkxLCBjb25zdCBTdHJpbmcmIGZhbWlseTIpCiB7CisgICAgaWYgKGZhbWlseTEuaXNO
dWxsKCkgfHwgZmFtaWx5Mi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbWlseTEuaXNFbXB0
eSgpICYmIGZhbWlseTIuaXNFbXB0eSgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChm
YW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5
MjsKQEAgLTExMCw3ICsxMTIsNyBAQCBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWls
eU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29ucwogICAgIHJldHVy
biBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZhbWlseTEsIGZhbWlseTIpOwogfQog
Ci11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAppbmRleCAw
YTdkZjI1MjhkYWM2MmE4YzVhODkwYmQyZGZhNDMwYTIxNGRkN2Y2Li4zNzljYWQ3ZmQ1OGVkMWY3
ZDJmMDE1OGE2ZDMxYTg5MWJjMDYzYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCkBAIC01Nyw4ICs1
Nyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CiAgICAgY29uc3QgUmVmQ291bnRlZEFy
cmF5PEF0b21TdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0K
IAotICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYs
IGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2go
Y29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHVuc2lnbmVkIGZhbWls
eU5hbWVIYXNoKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBTdHJpbmcgZm9sZGVkRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHVuc2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50
KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwCmluZGV4IDJkZGQ2YmRmMTk0Mzg0MTdhZGVhNzExMjQ3ZDIxNzZk
NTc2MzUyMzQuLjYwN2VhMjBmOWM0YzQ5MDg4M2YwMzUxNTI2NzgwMmE2M2M1OWFmNjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCkBAIC00ODgsNyArNDg4LDYgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBo
UGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQKIAogR2x5
cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2
YXJpYW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlh
bnQgIT0gQXV0b1ZhcmlhbnQpOwogCiAgICAgaWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkK
QEAgLTQ5Niw2ICs0OTUsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZQogCiAgICAgY29uc3Qg
dW5zaWduZWQgcGFnZU51bWJlciA9IEdseXBoUGFnZTo6cGFnZU51bWJlckZvckNvZGVQb2ludChj
KTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBhdXRvJiBjYWNo
ZUVudHJ5ID0gcGFnZU51bWJlciA/IG1fY2FjaGVkUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIEdseXBo
UGFnZUNhY2hlRW50cnkoKSkuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNoZWRQYWdlWmVybzsKIAog
ICAgIC8vIEluaXRpYWxpemUgY2FjaGUgd2l0aCBhIGZ1bGwgcGFnZSBvZiBnbHlwaCBtYXBwaW5n
cyBmcm9tIGEgc2luZ2xlIGZvbnQuCkBAIC01MTYsNiArNTE2LDcgQEAgR2x5cGhEYXRhIEZvbnRD
YXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRD
YXNjYWRlRGUKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygp
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmIChtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBNdXRh
YmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9udHMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKaW5kZXgg
NDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4uNWE0YTVlMDRjODEyMWM4
N2VhMTU3YjFmODUwZTk2YTZmZmM1MDgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00Myw3ICs0NCw3IEBAIGNs
YXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAKIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwotY2xhc3MgRm9udENh
c2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKK2NsYXNz
IEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udENhc2Nh
ZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYXNjYWRlRm9udHMpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNj
YWRlRm9udHMpOwogcHVibGljOgpAQCAtMTE0LDYgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3duUGl0
Y2ggfTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OworICAgIExvY2sg
bV9sb2NrOwogfTsKIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNo
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtMTI1LDcgKzEy
Nyw2IEBAIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwCiAKIGlubGluZSBjb25zdCBGb250JiBGb250
Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9j
YWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgICAgICBtX2NhY2hlZFByaW1h
cnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5h
bFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5mb250OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAppbmRleCBhYzljMTY5NmQxNDM3ZmM1
NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJiMGYxZTZhNTBhNDJmNTA0NGU5MjIwODE3
ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50
ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNl
bGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJiMWJkN2ZhN2ZlMWVlYTJmOGQ3YzM4Mjc3
MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZmYWNmNWNkMTk1ZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCkBAIC0zMiw4ICszMiw4IEBA
CiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5z
IGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMK
IC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVuaWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQ
YWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJvbSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9y
IGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1jbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEdseXBoUGFnZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdseXBo
UGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQu
Y3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3MWI2YzI1YzQxZjM3MmRlNTI0YjEuLjYzMTA5
NjhmYmMwNmJlZmE1NWQxMTNmMDNlMDllZjI3NzY1YTY5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5jcHAKQEAgLTYyOCwyNyArNjI4LDIxIEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0CiAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0aXR1dGUgdGhlIGRlZmF1bHQgbW9u
b3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNlIGZvbnRzLgotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKSB7Ci0gICAgICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiY291cmll
ciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuIGZv
bnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgIH0KKyAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9uYWNvIikgfHwgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkKKyAgICAgICAgcmV0dXJuIGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsKIAogICAgIC8vIFN1YnN0aXR1dGUg
VmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7Ci0gICAgICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuIGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKQorICAgICAgICBy
ZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZlcmRhbmEiX3MpOwogI2VuZGlmCiAK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoIkFyYWJpYyIpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBw
YXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0byIpKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVcmR1Iikp
OwogICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZw
YXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBmb3IgKFN0cmluZyogbWF0Y2hXb3Jk
IDogbWF0Y2hXb3JkcykgewogICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zSWdub3JpbmdBU0NJ
SUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJv
bGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICJHZWV6YVBy
by1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CkBAIC0xNDI4LDcgKzE0MjIsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVy
biBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9
OwpAQCAtMTQzNiwxMCArMTQzMCwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYs
IDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hl
aXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07
CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBz
b25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVp
dGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29u
Z3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFs
IHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0
ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9z
OwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAt
MTQ3NCw3ICsxNDY4LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFs
dGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKQEAgLTE1NDcsNyArMTU0MSw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0
IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAv
LyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFu
eSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9u
LCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNv
cnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBl
LmNwcAppbmRleCBmMDI3ZWVkMzE3MTQ0NGJjMzZhNDM0NDc2M2I3M2UxMmRiMmEwMjY3Li41M2I2
Yzk1OTgyZGRhZjE4MmExNmMzMmNkYmZiNGRjODBmOWVjZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hl
RnJlZVR5cGUuY3BwCkBAIC0zMTksOCArMzE5LDcgQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFz
dFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkK
IHsKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3
aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBu
b24tZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93
ZWQuCi0gICAgc3RhdGljIEF0b21TdHJpbmcgdGltZXNTdHIoInNlcmlmIik7Ci0gICAgaWYgKFJl
ZlB0cjxGb250PiBmb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3Ry
KSkKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgInNlcmlmIl9zKSkKICAgICAgICAgcmV0dXJuICpmb250OwogCiAgICAgLy8gVGhpcyBj
b3VsZCBiZSByZWFjaGVkIGR1ZSB0byBpbXByb3Blcmx5LWluc3RhbGxlZCBvciBtaXNjb25maWd1
cmVkIGZvbnRjb25maWcuCkBAIC01OTksOSArNTk4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGUKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250
Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJikKK09w
dGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAK
aW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4uY2Y4NTQ4YWRm
MWZjODZlM2RlZDA2ZDMwNzI4NzZjYjNkMWU4YmVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTM3Myw3ICsz
NzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbgogCiBSZWY8Rm9udD4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4g
ZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWxs
YmFja0ZvbnROYW1lOwogCiAgICAgaWYgKCFmYWxsYmFja0ZvbnROYW1lLmdldCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJh
Y2tGb250TmFtZSk7CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjps
YXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aQogICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWluc3RhbGxlZCBmdWxsIFVuaWNv
ZGUgZm9udHMuCiAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGlu
ZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCiAgICAg
Ly8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0aGUgZGVmYXVs
dCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKLSAg
ICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygi
VGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9t
U3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGZh
bGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgU3RyaW5nKCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJNaWNyb3NvZnQgU2Fu
cyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmco
IlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmco
Ikx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAg
ICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCiAgICAg
fTsKICAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgewpAQCAtNjkyLDExICs2
OTIsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1l
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZv
bnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWljcm9zb2Z0IFNhbnMgU2VyaWYi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KICAgICBzd2l0Y2ggKGZhbWls
eU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJp
dG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBU
aHVzIHdlIGFsbG93IFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGJp
dG1hcCBmb250IE1TIFNlcmlmLApAQCAtNzA1LDcgKzcwMiw3IEBAIGNvbnN0IEF0b21TdHJpbmcm
IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAg
IGNhc2UgODoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eU5hbWUsICJtcyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47Cisg
ICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAg
ICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdh
Y3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBNaWNyb3Nv
ZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNh
bnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxMSwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2Fj
aGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAog
ICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDEz
OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
Im1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiBtaWNyb3NvZnRTYW5zU2VyaWY7
CisgICAgICAgICAgICByZXR1cm4gIk1pY3Jvc29mdCBTYW5zIFNlcmlmIl9zOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmNwcAppbmRleCBjOWYwZjgxM2JjYjYzNjYxNTRiYzA0YmVhNTAzYzYyNGZhZWEwMWI1Li41NWYx
YjFhZjdmYTFkOWM5MjZhMDE3NjA5MjU0MWJmYmEwNzZiZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMg
UmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKK3N0cnVjdCBTYW1lU2l6ZUFzQmlk
aUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250
ZXh0PiB7CiAgICAgdWludDMyX3QgYml0ZmllbGRzIDogMTY7CiAgICAgdm9pZCogcGFyZW50Owog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAppbmRleCBkNGM0
ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5NjcwZDM5YmQzNGQxLi41YThkOTA5ZWVhOTFiNjE5ZTUz
OTQ2OWZkYWNmYzRmM2EyNjAzZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpQ29udGV4dC5oCkBAIC0yMiwxNSArMjIsMTUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQmlkaUVtYmVkZGluZ1NvdXJjZSB7IEZyb21T
dHlsZU9yRE9NLCBGcm9tVW5pY29kZSB9OwogCiAvLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZXhw
bGljaXQgZW1iZWRkaW5ncy4KLWNsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8
QmlkaUNvbnRleHQ+IHsKK2NsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEJpZGlDb250ZXh0PiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0
aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5
bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423177</attachid>
            <date>2021-03-15 07:23:19 -0700</date>
            <delta_ts>2021-03-16 04:45:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210315142317.patch</filename>
            <type>text/plain</type>
            <size>37168</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uOTc0NWZmOGFhOWVlZjk2ZTdlODJlOWZkZWZjNjFi
MzYyY2ZmZTM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHJlbW92aW5nIHVzZSBvZiBBdG9tU3RyaW5nIHdoZXJl
IG5vbi1tYWluIHRocmVhZHMgYXJlIGV4cGVjdGVkIHRvCisgICAgICAgIGFjY2VzcyBhIHBhcnRp
Y3VsYXIgcGF0aC4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRoZSBwYXJ0
aWFsIGxvY2tpbmcgaW1wbGVtZW50YXRpb24gdXNlZCBieQorICAgICAgICBpT1MgZm9yIHRoZSB3
ZWIgdGhyZWFkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXk6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZv
bnRGb3JQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnVwZGF0
ZUZvbnRDYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVGb250
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjphZGRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhY2hlOjpnZW5lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52
YWxpZGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGVzY3JpcHRpb25LZXk6OkZvbnREZXNjcmlwdGlvbktleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2gpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c2ltaWxhckZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDoKKwogMjAyMS0wMy0xMCAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2
ZXJ0aW5nIHIyNzQxNjYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5k
ZXggYzdkYTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4uYjZlMzBjNWMzZTRk
ODIxODRmZDk0ODQ5YTljMjVkMWI4YmMyNjRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaApAQCAtNzIsNyArNzIsNyBAQCBib29sIGZvbnRIYXNFaXRoZXJUYWJsZShD
VEZvbnRSZWYsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNlbmRp
ZgogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250KTsKLWNsYXNz
IEZvbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250PiB7CitjbGFzcyBGb250IDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEZvbnQ+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9X
SVRIX0hFQVBfSURFTlRJRklFUihGb250KTsKIHB1YmxpYzoKICAgICAvLyBVc2VkIHRvIGNyZWF0
ZSBwbGF0Zm9ybSBmb250cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwCmluZGV4IGZiMGY4OGRhNzkxYTNhNjFjNTdiYWNjMWFmNzJiNDZmMGNjOTA5
NmQuLjBlNGI4MTcwNmVhNzM4YjU5MjU4YjY5MDAyYzcxMDdlYWRhMjk5ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtNDYsMTUgKzQ2
LDYgQEAKICNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+Ci0KLXN0YXRpYyBSZWN1cnNpdmVMb2NrIGZvbnRMb2Nr
OwotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC02NSw3ICs1Niw3IEBAIEZvbnRDYWNoZSYg
Rm9udENhY2hlOjpzaW5nbGV0b24oKQogfQogCiBGb250Q2FjaGU6OkZvbnRDYWNoZSgpCi0gICAg
OiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlm
TmVlZGVkKQorICAgIDogbV9wdXJnZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCiB7CiB9CiAKQEAgLTczLDcgKzY0
LDcgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KCkgeyB9
Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcykKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29u
c3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCiAgICAgICAgIDogbV9m
b250RGVzY3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCiAgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5
KQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRG
YWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCkBAIC0xMDAsNyArOTEsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgRm9udERlc2NyaXB0aW9uS2V5IG1fZm9udERlc2NyaXB0aW9u
S2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7CisgICAgU3RyaW5nIG1fZmFtaWx5OwogICAg
IEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwogICAgIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKIH07CkBAIC0x
NDcsMzMgKzEzOCwyNSBAQCBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZv
cm1EYXRhQ2FjaGUoKQogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYg
Rm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5h
bWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZl
ckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21TdHJpbmc+IHRpbWVzKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLQotICAgIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtU3BlY2lm
aWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0g
ICAgaWYgKCFwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlLmlzTnVsbCgpKQorICAgIGlmIChhdXRv
IHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
ZmFtaWx5TmFtZSkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlOwog
CiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSA1OgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImFyaWFsIikp
Ci0gICAgICAgICAgICByZXR1cm4gaGVsdmV0aWNhOworICAgICAgICAgICAgcmV0dXJuICJIZWx2
ZXRpY2EiX3M7CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHlOYW1lLCAidGltZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAg
ICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgNzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eU5hbWUsICJjb3VyaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllck5ldzsKKyAgICAg
ICAgICAgIHJldHVybiAiQ291cmllciBOZXciX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
OToKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUs
ICJoZWx2ZXRpY2EiKSkKLSAgICAgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICAgICAgICAgIHJl
dHVybiAiQXJpYWwiX3M7CiAgICAgICAgIGJyZWFrOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8v
IE9uIFdpbmRvd3MsIENvdXJpZXIgTmV3IGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IGlzIGFsd2F5
cyBwcmVzZW50IGFuZApAQCAtMTgzLDMzICsxNjYsMjkgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9u
dENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUp
CiAgICAgLy8gb25seSBiZSB0cmllZCBpZiBDb3VyaWVyIE5ldyBpcyBub3QgZm91bmQuCiAgICAg
Y2FzZSAxMToKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eU5hbWUsICJjb3VyaWVyIG5ldyIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXI7CisgICAg
ICAgICAgICByZXR1cm4gIkNvdXJpZXIiX3M7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg
Y2FzZSAxNToKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eU5hbWUsICJ0aW1lcyBuZXcgcm9tYW4iKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lczsKKyAg
ICAgICAgICAgIHJldHVybiAiVGltZXMiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2Vk
RmFtaWx5TmFtZSwKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7
Ci0jZW5kaWYKLSAgICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElD
QUwpCiAgICAgLy8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3Mg
dmVydGljYWwgZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZl
cnRpY2FsIGZsb3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93
cyBmZWF0dXJlLgogICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9y
aWVudGF0b2luLCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFt
aWx5TmFtZVswXSAhPSAnQCcpID8KLSAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJp
bmcocGFzc2VkRmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CisgICAgY29uc3QgU3Ry
aW5nJiBmYW1pbHlOYW1lID0gKHBhc3NlZEZhbWlseU5hbWUuaXNFbXB0eSgpIHx8IHBhc3NlZEZh
bWlseU5hbWVbMF0gIT0gJ0AnKSA/CisgICAgICAgIHBhc3NlZEZhbWlseU5hbWUgOiBTdHJpbmco
cGFzc2VkRmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CiAjZWxzZQotICAgIGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0IFN0
cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAogICAgIHN0YXRp
YyBib29sIGluaXRpYWxpemVkOwpAQCAtMjI4LDkgKzIwNyw4IEBAIEZvbnRQbGF0Zm9ybURhdGEq
IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5hbWUp
IHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2UgaGF2
ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAogICAg
ICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3LCBl
dGMuICBUcnkgbG9va2luZyB1cCB0aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgotICAg
ICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWls
eU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1EYXRh
Rm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGll
cywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRl
RmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQbGF0
Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNh
cGFiaWxpdGllcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkgaW4g
dGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZlCiAg
ICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNhbGwg
dG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgogICAgICAgICAgICAgICAgIGl0ID0gZm9u
dFBsYXRmb3JtRGF0YUNhY2hlKCkuZmluZChrZXkpOwpAQCAtMzEyLDggKzI5MCwxMCBAQCBjb25z
dCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IHVuc2lnbmVk
IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3QgdW5z
aWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7CiAK
LVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmll
ZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAg
aWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0YXJ0
T25lU2hvdCgwX3MpOwogCkBAIC0zMjUsMTAgKzMwNSw4IEBAIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvCiAKIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAgICAKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBhdXRvIGFkZFJlc3VsdCA9
IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKICAgICAgICAgcmV0dXJu
IEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwpAQCAtMzQwLDYgKzMxOCw4IEBA
IFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZv
bnREYXRhSWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBi
b29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRv
bigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIHVuc2lnbmVkIGluYWN0aXZlRm9udERh
dGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUlu
YWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIApAQCAtMzU3LDE1ICszMzcs
MTMgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIAog
dm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50
KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIExPRyhGb250
cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdlQ291bnQpOwog
CiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAg
ICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLQogICAgIHdo
aWxlIChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250c1Rv
RGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVlcygp
KSB7CkBAIC00OTcsNiArNDc1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNoZTo6
cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKIAogdm9pZCBG
b250Q2FjaGU6OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2Fk
ZSwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZvbnRzKHJldHJp
ZXZlT3JBZGRDYWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgV1RGTW92
ZShmb250U2VsZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0ODYsOCBAQCBzaXplX3QgRm9udENh
Y2hlOjpmb250Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGZvbnRMb2NrKTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
KwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRG
b250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKQEAgLTUy
Miw2ICs1MDAsOCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7CiAK
IHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykKICAg
ICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0b3IqPjsKIApAQCAtNTMxLDYg
KzUxMSw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQp
CiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgQVNTRVJUKGdDbGll
bnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsKIApAQCAtNTQx
LDExICs1MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdHZW5lcmF0aW9uID0gMDsKIAog
dW5zaWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkKIHsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247CiB9CiAKIHZv
aWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKSB7CiAgICAgICAgIEFTU0VSVChmb250UGxh
dGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IGRlY2Q2N2VkYWQ2OGM3
NzFmMDgyZDhmY2I1NzhjMzEyM2Q1N2ZmMmUuLjU5ZTQ5ODVkOWU4MmMzMDBmNTQ3ZGNmZjM0ZGFj
MTMxNWQxODE4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCkBAIC0zMywxMiArMzMsMTMgQEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRp
bmdzLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxs
aW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbVN0cmluZ0hhc2guaD4KQEAgLTc5LDcgKzgwLDcgQEAgc3RydWN0IEZvbnREZXNjcmlwdGlv
bktleSB7CiAgICAgICAgIDogbV9zaXplKGRlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkp
CiAgICAgICAgICwgbV9mb250U2VsZWN0aW9uUmVxdWVzdChkZXNjcmlwdGlvbi5mb250U2VsZWN0
aW9uUmVxdWVzdCgpKQogICAgICAgICAsIG1fZmxhZ3MobWFrZUZsYWdzS2V5KGRlc2NyaXB0aW9u
KSkKLSAgICAgICAgLCBtX2xvY2FsZShkZXNjcmlwdGlvbi5zcGVjaWZpZWRMb2NhbGUoKSkKKyAg
ICAgICAgLCBtX2xvY2FsZShkZXNjcmlwdGlvbi5zcGVjaWZpZWRMb2NhbGUoKS5zdHJpbmcoKSkK
ICAgICAgICAgLCBtX2ZlYXR1cmVTZXR0aW5ncyhkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3Mo
KSkKICAgICAgICAgLCBtX3ZhcmlhdGlvblNldHRpbmdzKGRlc2NyaXB0aW9uLnZhcmlhdGlvblNl
dHRpbmdzKCkpCiAgICAgeyB9CkBAIC0xNTcsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX3NpemUgeyAwIH07CiAgICAgRm9udFNlbGVjdGlvblJlcXVlc3QgbV9mb250U2VsZWN0
aW9uUmVxdWVzdDsKICAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCAyPiBtX2ZsYWdzIHt7IDAsIDAg
fX07Ci0gICAgQXRvbVN0cmluZyBtX2xvY2FsZTsKKyAgICBTdHJpbmcgbV9sb2NhbGU7CiAgICAg
Rm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZlYXR1cmVTZXR0aW5nczsKICAgICBGb250VmFyaWF0aW9u
U2V0dGluZ3MgbV92YXJpYXRpb25TZXR0aW5nczsKIH07CkBAIC0xNzgsNyArMTc5LDcgQEAgc3Ry
dWN0IEZvbnREZXNjcmlwdGlvbktleUhhc2ggewogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtl
eSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlvbktleTsgLy8gU2hhcmVk
IHdpdGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2FjaGluZyBGb250IG9iamVjdHMpCi0g
ICAgVmVjdG9yPEF0b21TdHJpbmcsIDM+IGZhbWlsaWVzOworICAgIFZlY3RvcjxTdHJpbmcsIDM+
IGZhbWlsaWVzOwogICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwogICAgIHVuc2lnbmVkIGZv
bnRTZWxlY3RvclZlcnNpb247CiB9OwpAQCAtMjI2LDcgKzIyNyw3IEBAIHB1YmxpYzoKICAgICAv
LyBJdCBjb21lcyBpbnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2gg
c2hhcmVzIGEgZmFtaWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KICAgICBWZWN0b3I8
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0lu
RmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4g
bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7CiAgICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CkBAIC0yODMsMTUgKzI4NCwxNyBAQCBw
cml2YXRlOgogICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9u
dHMoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYp
OwogCiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92
ZWQuCi0gICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRD
YWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0g
bnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgogICAg
IFdFQkNPUkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAg
ICAgCi0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBwbGF0Zm9ybUFs
dGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IGFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1l
KGNvbnN0IFN0cmluZyYpOwogCi0gICAgVGltZXIgbV9wdXJnZVRpbWVyOworICAgIFJlY3Vyc2l2
ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBtX3B1cmdlVGlt
ZXI7CiAgICAgCiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2li
aWxpdHkgeyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4
Y2Q1YzI5YWEwMmMzMTkyNDgwNDNmYTc0NjRhZGMuLjdjM2QzZjY5MGM2MzY1Mjc3MDZlMjVhZTdh
MWU2ZjViYmMwMTBiZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEw
IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRv
U2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRP
U0laSU5HKQogCi1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1
YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikK
K2Jvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBT
dHJpbmcmIGZhbWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5
MS5pc051bGwoKSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5p
c0VtcHR5KCkgJiYgZmFtaWx5Mi5pc0VtcHR5KCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
aWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1cm4gZmFtaWx5MSA9PSBm
YW1pbHkyOwpAQCAtMTEwLDcgKzExMiw3IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAg
cmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7
CiB9CiAKLXVuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmlu
ZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4
ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3
LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2ln
bmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3Vu
dGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGll
czsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3Ry
aW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1l
SGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVF
cXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQg
ZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRG
YW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5
Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdk
MjE3NmQ1NzYzNTIzNC4uNjA3ZWEyMGY5YzRjNDkwODgzZjAzNTE1MjY3ODAyYTYzYzU5YWY2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVG
b250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVGb250cy5jcHAKQEAgLTQ4OCw3ICs0ODgsNiBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4g
Z2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAog
CiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJp
YW50IHZhcmlhbnQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQo
dmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CiAKICAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJp
YW50KQpAQCAtNDk2LDYgKzQ5NSw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlw
aERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlCiAKICAgICBj
b25zdCB1bnNpZ25lZCBwYWdlTnVtYmVyID0gR2x5cGhQYWdlOjpwYWdlTnVtYmVyRm9yQ29kZVBv
aW50KGMpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGF1dG8m
IGNhY2hlRW50cnkgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQYWdlcy5hZGQocGFnZU51bWJlciwg
R2x5cGhQYWdlQ2FjaGVFbnRyeSgpKS5pdGVyYXRvci0+dmFsdWUgOiBtX2NhY2hlZFBhZ2VaZXJv
OwogCiAgICAgLy8gSW5pdGlhbGl6ZSBjYWNoZSB3aXRoIGEgZnVsbCBwYWdlIG9mIGdseXBoIG1h
cHBpbmdzIGZyb20gYSBzaW5nbGUgZm9udC4KQEAgLTUxNiw2ICs1MTYsNyBAQCBHbHlwaERhdGEg
Rm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3Qg
Rm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFsbGJh
Y2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYgKG1f
c3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8v
IE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApp
bmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi41YTRhNWUwNGM4
MTIxYzg3ZWExNTdiMWY4NTBlOTZhNmZmYzUwODA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQzLDcgKzQ0LDcg
QEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFzcyBG
b250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4gewor
Y2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250
Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVGb250
cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9u
dENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC0xMTQsNiArMTE1LDcgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVua25v
d25QaXRjaCB9OwogICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisgICAg
TG9jayBtX2xvY2s7CiB9OwogCiBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVk
UGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xMjUs
NyArMTI3LDYgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQm
IEZvbnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYg
KCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSBy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgICAgIG1fY2FjaGVk
UHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmdseXBoRGF0YUZvckNoYXJhY3RlcignICcsIEV4
dGVybmFsUmVzb3VyY2VEb3dubG9hZFBvbGljeTo6QWxsb3cpLmZvbnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCmluZGV4IGFjOWMxNjk2ZDE0
MzdmYzU0ODFhYTYzOTgwYjYxMDA2ZDg1YzJmNTAuLjFmMWZkYmIwZjFlNmE1MGE0MmY1MDQ0ZTky
MjA4MTdkZWIyYzBlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJGb250UmFuZ2Vz
LmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0xv
YWRpbmcoKSBjb25zdCA9IDA7CiB9OwogCi1jbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgUmVm
Q291bnRlZDxGb250U2VsZWN0b3I+IHsKK2NsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5G
b250U2VsZWN0b3IoKSA9IGRlZmF1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlLmgKaW5kZXggY2QwZGNkNDZmZWFiMmIxYmQ3ZmE3ZmUxZWVhMmY4ZDdj
MzgyNzczMy4uOGNmOWNkYWNmYjdhYjRlMGY4MTExNjkzYmQ1NmZhY2Y1Y2QxOTVkNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKQEAgLTMyLDggKzMy
LDggQEAKIAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gQSBHbHlwaFBhZ2UgY29u
dGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERhdGEgbWFwcGluZ3MgZm9yIGEgY29udGln
dW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgVW5pY29kZSBjb2RlIHNwYWNlLiBH
bHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBzdGFydGluZyBmcm9tIDAgYW5kIGluY3JlbWVudGlu
ZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVyIG9mIGdseXBocy4KLWNsYXNzIEdseXBoUGFnZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4geworY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
R2x5cGhQYWdlPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCkKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3Jl
VGV4dC5jcHAKaW5kZXggZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZjMjVjNDFmMzcyZGU1MjRiMS4u
NjMxMDk2OGZiYzA2YmVmYTU1ZDExM2YwM2UwOWVmMjc3NjVhNjkwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcApAQCAtNjI4LDI3ICs2MjgsMjEgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVs
dCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJj
b3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1cm4g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3Rp
dHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJk
YW5hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAg
ICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5k
aWYKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiQXJhYmljIikpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHBhc2h0byhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVy
ZHUiKSk7CiAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQo
KSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGZvciAoU3RyaW5nKiBtYXRj
aFdvcmQgOiBtYXRjaFdvcmRzKSB7CiAgICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmlu
Z0FTQ0lJQ2FzZSgqbWF0Y2hXb3JkKSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdl
ZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgICAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gIkdl
ZXphUHJvLUJvbGQiX3MgOiAiR2VlemFQcm8iX3MpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KQEAgLTE0MjgsNyArMTQyMiw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3Rl
bUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAg
cmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKLWNvbnN0IEF0
b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsK
ICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsgMHg5ZWQxLCAweDRmNTMg
fTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10gPSB7IDB4NWI4YiwgMHg0
ZjUzIH07CkBAIC0xNDM2LDEwICsxNDMwLDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1tdID0geyAweDVmYWUsIDB4
OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhblpo
ZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2MywgMHg5ZWQxLCAweDlh
ZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5n
PiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJh
bCBzb25ndGlTQyA9ICJTb25ndGkgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxp
dGVyYWwgc29uZ3RpVEMgPSAiU29uZ3RpIFRDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVND
SUlMaXRlcmFsIGhlaXRpU0NSZXBsYWNlbWVudCA9ICJQaW5nRmFuZyBTQyJfczsKKyAgICBzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVRDUmVwbGFjZW1lbnQgPSAiUGluZ0Zhbmcg
VEMiX3M7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6
CkBAIC0xNDc0LDcgKzE0NjgsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQpAQCAtMTU0Nyw3ICsxNTQxLDcgQEAgUmVmPEZvbnQ+IEZvbnRD
YWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGkKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhv
dyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawog
ICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdp
bmcgYW55IHByZWZzLgotICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCBBdG9tU3RyaW5nKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWlseShmb250RGVzY3Jp
cHRpb24sICJUaW1lcyJfcykpCiAgICAgICAgIHJldHVybiAqcmVzdWx0OwogCiAgICAgLy8gTGFz
dFJlc29ydCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcu
LjUzYjZjOTU5ODJkZGFmMTgyYTE2YzMyY2RiZmI0ZGM4MGY5ZWNmZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMxOSw4ICszMTksNyBAQCBSZWY8Rm9udD4gRm9udENhY2hl
OjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aQogewogICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBoZXJlLCBv
dGhlcndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwogICAgIC8vIG1hdGNoZXMg
Zm9yIG5vbi1mYWxsYmFjayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFsbGJhY2tGb250
QWxsb3dlZC4KLSAgICBzdGF0aWMgQXRvbVN0cmluZyB0aW1lc1N0cigic2VyaWYiKTsKLSAgICBp
ZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGlt
ZXNTdHIpKQorICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCAic2VyaWYiX3MpKQogICAgICAgICByZXR1cm4gKmZvbnQ7CiAKICAgICAvLyBU
aGlzIGNvdWxkIGJlIHJlYWNoZWQgZHVlIHRvIGltcHJvcGVybHktaW5zdGFsbGVkIG9yIG1pc2Nv
bmZpZ3VyZWQgZm9udGNvbmZpZy4KQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcm
IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi4zMzE0
Zjc2NDQ3NTZjNTQxOWZmNjM0NTY1NmJlMjZjMGM0ZmE4MGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzYy
LDkgKzM2Miw5IEBAIGJvb2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0
aW5nKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgTE9HRk9OVCYgZm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBB
dG9tU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNl
TmFtZSwgTEZfRkFDRVNJWkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5h
bWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0cjxG
b250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1l
KTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5
TmFtZTsKQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbgogCiBSZWY8
Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOwogCiAgICAgaWYgKCFmYWxsYmFja0ZvbnRO
YW1lLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBSZWY8
Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aQogICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWlu
c3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCiAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVh
c3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNv
ZGVfdHlwZWZhY2VzCiAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5j
ZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxi
YWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNy
b3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAg
ICAgICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgU3RyaW5nKCJUaW1l
cyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3Ry
aW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpCiAgICAgfTsKICAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsr
aSkgewpAQCAtNjkyLDExICs2OTIsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0
YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWlj
cm9zb2Z0IFNhbnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0K
ICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBPbiBXaW5kb3dzLCB3
ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMg
c3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRl
cm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNlcmlmLApAQCAtNzA1LDcgKzcwMiw3IEBA
IGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1l
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBw
bGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgODoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJu
IHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsK
ICAgICAgICAgYnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRt
YXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1
cyB3ZSBhbGxvdyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhl
IGJpdG1hcCBmb250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxMSwxMCBAQCBjb25zdCBB
dG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1z
IHRvby4KICAgICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiBt
aWNyb3NvZnRTYW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gIk1pY3Jvc29mdCBTYW5zIFNl
cmlmIl9zOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7Cisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlDb250ZXh0LmNwcAppbmRleCBjOWYwZjgxM2JjYjYzNjYxNTRiYzA0YmVhNTAz
YzYyNGZhZWEwMWI1Li41NWYxYjFhZjdmYTFkOWM5MjZhMDE3NjA5MjU0MWJmYmEwNzZiZDc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcApAQCAtMjYs
NyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzQmlk
aUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKK3N0
cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CiAgICAgdWludDMyX3QgYml0ZmllbGRzIDogMTY7CiAg
ICAgdm9pZCogcGFyZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuaAppbmRleCBkNGM0ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5NjcwZDM5YmQzNGQxLi41
YThkOTA5ZWVhOTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2EyNjAzZDcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCkBAIC0yMiwxNSArMjIsMTUgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQmlkaUVtYmVk
ZGluZ1NvdXJjZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9tVW5pY29kZSB9OwogCiAvLyBVc2VkIHRv
IGtlZXAgdHJhY2sgb2YgZXhwbGljaXQgZW1iZWRkaW5ncy4KLWNsYXNzIEJpZGlDb250ZXh0IDog
cHVibGljIFJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK2NsYXNzIEJpZGlDb250ZXh0IDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CiBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIg
bGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRp
bmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIp
OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423318</attachid>
            <date>2021-03-16 04:46:02 -0700</date>
            <delta_ts>2021-03-16 05:08:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210316114600.patch</filename>
            <type>text/plain</type>
            <size>50679</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNmMzNTY0YjhhOGFmOTgxNmI2MWI3OWRmMDY0OTZj
YzdhNWM4MDA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHJlbW92aW5nIHVzZSBvZiBBdG9tU3RyaW5nIHdoZXJl
IG5vbi1tYWluIHRocmVhZHMgYXJlIGV4cGVjdGVkIHRvCisgICAgICAgIGFjY2VzcyBhIHBhcnRp
Y3VsYXIgcGF0aC4gV2hlcmUgc3RyaW5ncyBhcmUgcmV0YWluZWQsIGlzb2xhdGVkIGNvcGllcwor
ICAgICAgICBhcmUgbWFkZS4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRo
ZSBwYXJ0aWFsIGxvY2tpbmcgaW1wbGVtZW50YXRpb24gdXNlZCBieQorICAgICAgICBpT1MgZm9y
IHRoZSB3ZWIgdGhyZWFkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFkeSBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXk6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlRm9udENh
c2NhZGVDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnVwZGF0ZUZvbnRD
YXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjphZGRDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZW5lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnNpbWlsYXJGb250KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRE
ZXNjcmlwdGlvbktleTo6Rm9udERlc2NyaXB0aW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpj
cmVhdGVGb250UGxhdGZvcm1EYXRhRm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnNpbWlsYXJGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZSk6CisgICAgICAgIChXZWJD
b3JlOjpmb250V2l0aEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9y
bUFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0
UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6bGFz
dFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRG
YW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpw
bGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR0RJRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFpdHNJbkZhbWlseVByb2NEYXRhOjpUcmFpdHNJbkZh
bWlseVByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRp
Q29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAy
MDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2
YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wg
Zm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25l
ZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2Ns
YXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgog
ICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1
N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uYmQ3NDFkMTQxNWVjY2ZjYmQ0MjZlMzNkNDM3YWYyZDRh
OWEyMWNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRh
LmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJl
Y3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQot
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcg
KzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNo
ZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkK
IHsKIH0KIApAQCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKLSAgICAg
ICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVk
Q29weSgpKQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8g
KmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwgbV9m
b250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFiaWxpdGllcykKICAgICB7IH0KQEAgLTEw
MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb25LZXkgbV9m
b250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcg
bV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAg
ICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0
aWVzOwogfTsKQEAgLTE0NywzMyArMTM4LDI1IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2Fj
aGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25z
dCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMg
TWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZl
ckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYg
cGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShm
YW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkp
CisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lm
aWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBj
YXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlO
YW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAg
ICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVz
TmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3Vy
aWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOwor
ICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJ
TkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250
IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE2NiwyOSBAQCBjb25zdCBB
dG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5v
dCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4g
Y291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7
CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0
dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShP
UEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVu
YWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJl
Y2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8g
dXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCiAgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJk
bGVzcyBvZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHko
KSB8fCBwYXNzZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlO
YW1lIDogQXRvbVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsK
KyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5
KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KKyAgICAgICAgcGFzc2VkRmFtaWx5
TmFtZSA6IFN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKICNl
bHNlCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7
CisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRp
ZgogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjgsOSArMjA3LDggQEAgRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBh
IGZvbnQuICBXZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3Ro
ZXIgbmFtZXMsCiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIv
Q291cmllciBOZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlh
c2VkIG5hbWUuCi0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVOYW1lID0g
YWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICghYWx0ZXJu
YXRlTmFtZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZv
bnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShmb250RGVzY3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5h
bWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAg
YXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29r
dXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0
b3IgbWF5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSBy
ZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAg
ICAgICAgaXQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0zMTIsOCAr
MjkwLDEwIEBAIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwog
Y29uc3QgdW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0g
NTA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9u
dERhdGEgPSAzMDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1
cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA1LDggQEAgUmVmUHRy
PEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNl
bmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGF1
dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJl0gewog
ICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7CkBAIC0z
NDAsNiArMzE4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5zaWduZWQg
aW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1l
bW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCkBA
IC0zNTcsMTUgKzMzNywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
SWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2ln
bmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
CiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoJXUpIiwg
cHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udENhc2Nh
ZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNl
bmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJlZjxGb250
PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZv
bnRzKCkudmFsdWVzKCkpIHsKQEAgLTQzNyw3ICs0MTUsNyBAQCBzdGF0aWMgRm9udENhc2NhZGVD
YWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJgogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQo
KTsKICAgICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAg
IGtleS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOwor
ICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0
KGkpLnN0cmluZygpLmlzb2xhdGVkQ29weSgpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBm
b250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250
U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkg
OiAwOwogICAgIHJldHVybiBrZXk7CkBAIC00OTcsNiArNDc1LDcgQEAgUmVmPEZvbnRDYXNjYWRl
Rm9udHM+IEZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3IKIAogdm9pZCBGb250Q2FjaGU6OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250Q2FzY2FkZSwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3Ip
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRl
LnVwZGF0ZUZvbnRzKHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVz
Y3JpcHRpb24oKSwgV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0ODYs
OCBAQCBzaXplX3QgRm9udENhY2hlOjpmb250Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjpp
bmFjdGl2ZUZvbnRDb3VudCgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1
dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5o
YXNPbmVSZWYoKSkKQEAgLTUyMiw2ICs1MDAsOCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0
b3IqPiogZ0NsaWVudHM7CiAKIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9y
JiBjbGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAg
aWYgKCFnQ2xpZW50cykKICAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0
b3IqPjsKIApAQCAtNTMxLDYgKzUxMSw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9u
dFNlbGVjdG9yJiBjbGllbnQpCiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNl
bGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
CiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZj
bGllbnQpKTsKIApAQCAtNTQxLDExICs1MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdH
ZW5lcmF0aW9uID0gMDsKIAogdW5zaWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICByZXR1cm4gZ0dl
bmVyYXRpb247CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKSB7CiAgICAg
ICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAgICBy
ZXR1cm47CkBAIC01ODUsNyArNTcxLDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29uc3Qg
UHJld2FybUluZm9ybWF0aW9uJikKIHsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2lt
aWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYpCitSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4
MmQ4ZmNiNTc4YzMxMjNkNTdmZjJlLi40YWUwYzdkNjU0ZjMyZWFhMTVlM2Q3ZWRhZWY1MTkxNzgw
NmY4MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aApAQCAtMzMsMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmdIYXNoLmg+CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkg
ewogICAgICAgICA6IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQogICAg
ICAgICAsIG1fZm9udFNlbGVjdGlvblJlcXVlc3QoZGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJl
cXVlc3QoKSkKICAgICAgICAgLCBtX2ZsYWdzKG1ha2VGbGFnc0tleShkZXNjcmlwdGlvbikpCi0g
ICAgICAgICwgbV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkpCisgICAgICAg
ICwgbV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkuc3RyaW5nKCkpCiAgICAg
ICAgICwgbV9mZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkpCiAg
ICAgICAgICwgbV92YXJpYXRpb25TZXR0aW5ncyhkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5n
cygpKQogICAgIHsgfQpAQCAtMTU3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV9zaXplIHsgMCB9OwogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJl
cXVlc3Q7CiAgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19Owot
ICAgIEF0b21TdHJpbmcgbV9sb2NhbGU7CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRG
ZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRp
bmdzIG1fdmFyaWF0aW9uU2V0dGluZ3M7CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBG
b250RGVzY3JpcHRpb25LZXlIYXNoIHsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewog
ICAgIEZvbnREZXNjcmlwdGlvbktleSBmb250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRo
IHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZl
Y3RvcjxBdG9tU3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1p
bGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2Vs
ZWN0b3JWZXJzaW9uOwogfTsKQEAgLTIyNCwxMiArMjI1LDEyIEBAIHB1YmxpYzoKIAogICAgIC8v
IFRoaXMgZnVuY3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3RvciBjYW4gaGF2ZSBhIHVuaWZp
ZWQgbm90aW9uIG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZvbnQtZmFjZS4KICAgICAvLyBJ
dCBjb21lcyBpbnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2ggc2hh
cmVzIGEgZmFtaWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KLSAgICBWZWN0b3I8Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVj
dG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXNJbkZhbWlseShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4g
bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKIAog
ICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KEZvbnRTZWxlY3RvciYpOwpAQCAtMjQ3LDcgKzI0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBSZWZQdHI8Rm9udD4g
Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgTE9HRk9OVCYsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBSZWZQdHI8
Rm9udD4gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgTE9HRk9OVCYsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0yODMsMTUgKzI4NCwxNyBAQCBwcml2
YXRlOgogICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQu
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVs
bHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAot
ICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVND
SUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmKTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKKyAgICBSZWN1cnNpdmVMb2Nr
IG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOwog
ICAgIAogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5
IHsgZmFsc2UgfTsKIApAQCAtMzA5LDcgKzMxMiw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhRm9yVGVzdGluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQogewotICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LCBudWxscHRyLCB7IH0pOworICAgIHJldHVy
biBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LnN0cmluZygp
LCBudWxscHRyLCB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVU
WVBFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5
MjQ4MDQzZmE3NDY0YWRjLi44NjQ3ZTg3MDZkYTM2ZGM0NTQ4OWQ4NTc0ODcyYjVkYzE4Mzg3Mzk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDggKzEwMSwxMCBAQCBib29sIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBG
b250Q2FzY2FkZURlcwogCiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotYm9v
bCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTIpCitib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiBmYW1pbHkx
LCBjb25zdCBTdHJpbmcmIGZhbWlseTIpCiB7CisgICAgaWYgKGZhbWlseTEuaXNOdWxsKCkgfHwg
ZmFtaWx5Mi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGlmIChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZh
bWlseTEgPT0gZmFtaWx5MjsKQEAgLTExMCw3ICsxMTIsNyBAQCBib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwg
Y29ucwogICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZhbWlseTEs
IGZhbWlseTIpOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlO
YW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24uaAppbmRleCAwYTdkZjI1MjhkYWM2MmE4YzVhODkwYmQyZGZhNDMwYTIxNGRkN2Y2Li4z
NzljYWQ3ZmQ1OGVkMWY3ZDJmMDE1OGE2ZDMxYTg5MWJjMDYzYmQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oCkBAIC01Nyw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CiAgICAgY29u
c3QgUmVmQ291bnRlZEFycmF5PEF0b21TdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fZmFtaWxpZXM7IH0KIAotICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29u
c3QgQXRvbVN0cmluZyYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQg
ZmFtaWx5TmFtZUhhc2goY29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGZhbWls
eU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBTdHJp
bmcgZm9sZGVkRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHVuc2lnbmVkIGVmZmVj
dGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCmluZGV4IDJkZGQ2YmRmMTk0Mzg0MTdh
ZGVhNzExMjQ3ZDIxNzZkNTc2MzUyMzQuLjYwN2VhMjBmOWM0YzQ5MDg4M2YwMzUxNTI2NzgwMmE2
M2M1OWFmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlRm9udHMuY3BwCkBAIC00ODgsNyArNDg4LDYgQEAgc3RhdGljIFJlZlB0cjxH
bHlwaFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNv
bnN0IEZvbnQKIAogR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBGb250VmFyaWFudCB2YXJpYW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwogCiAgICAgaWYgKHZhcmlhbnQgIT0g
Tm9ybWFsVmFyaWFudCkKQEAgLTQ5Niw2ICs0OTUsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVG
b250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVE
ZQogCiAgICAgY29uc3QgdW5zaWduZWQgcGFnZU51bWJlciA9IEdseXBoUGFnZTo6cGFnZU51bWJl
ckZvckNvZGVQb2ludChjKTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
ICAgICBhdXRvJiBjYWNoZUVudHJ5ID0gcGFnZU51bWJlciA/IG1fY2FjaGVkUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIEdseXBoUGFnZUNhY2hlRW50cnkoKSkuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNo
ZWRQYWdlWmVybzsKIAogICAgIC8vIEluaXRpYWxpemUgY2FjaGUgd2l0aCBhIGZ1bGwgcGFnZSBv
ZiBnbHlwaCBtYXBwaW5ncyBmcm9tIGEgc2luZ2xlIGZvbnQuCkBAIC01MTYsNiArNTE2LDcgQEAg
R2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMy
IGMsIGNvbnN0IEZvbnRDYXNjYWRlRGUKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5
c3RlbUZhbGxiYWNrcygpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwog
ICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9u
dHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmgKaW5kZXggNDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4u
NWE0YTVlMDRjODEyMWM4N2VhMTU3YjFmODUwZTk2YTZmZmM1MDgwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIldpZHRoQ2FjaGUu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00
Myw3ICs0NCw3IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAK
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMp
OwotY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRl
Rm9udHM+IHsKK2NsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udENhc2NhZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRD
YXNjYWRlRm9udHMpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwogcHVibGljOgpAQCAtMTE0LDYgKzExNSw3IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0
Y2ggeyBVbmtub3duUGl0Y2ggfTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxz
ZSB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250
czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQpAQCAtMTI1LDcgKzEyNyw2IEBAIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4
ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwCiAKIGlubGluZSBj
b25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgICAg
ICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5mb250OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAppbmRleCBh
YzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJiMGYxZTZhNTBh
NDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAi
Rm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNlbGVjdG9yIDog
cHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2VsZWN0b3IgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJiMWJkN2ZhN2Zl
MWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZmYWNmNWNkMTk1
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCkBA
IC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHVuaWNvZGUv
dXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIEEgR2x5
cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZv
ciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVuaWNvZGUgY29k
ZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJvbSAwIGFuZCBp
bmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1jbGFzcyBHbHlw
aFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEdseXBoUGFnZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3MWI2YzI1YzQxZjM3
MmRlNTI0YjEuLmFkYTFlZDIyMzVmN2U5YWJkOTYxNmI3OWY3MzljMDE1MWJkYzYyYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRhaW5QdHI8Q1RGb250
UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIGNvbnN0IEZv
bnREZXNjcgogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRl
cyhvcmlnaW5hbEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwgbnVsbHB0ciwgZGVz
Y3JpcHRvci5nZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBB
dHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9u
IHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMu
IEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMi
IHRvIEdlZXphIFByby4KQEAgLTYyOCwyNyArNjI4LDIxIEBAIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0
IEF0CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0aXR1dGUgdGhlIGRl
ZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNlIGZvbnRzLgotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKSB7Ci0gICAgICAg
IHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmll
cigiY291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
cmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgIH0KKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9uYWNvIikgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkKKyAgICAgICAgcmV0
dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsKIAogICAgIC8vIFN1
YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7Ci0gICAgICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdmVyZGFuYSgi
dmVyZGFuYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0
dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAgIH0KKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKQor
ICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZlcmRhbmEiX3MpOwog
I2VuZGlmCiAKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0byIpKTsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJVcmR1IikpOwogICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMu
Z2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9s
ZCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBmb3IgKFN0cmluZyog
bWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewogICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zSWdu
b3JpbmdBU0NJSUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkg
PyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgzLDEwIEBAIHN0YXRpYyBjb25zdCBGb250RGF0YWJh
c2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0YWJhc2U6Oklu
CiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07CiB9CiAKLVZl
Y3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxGb250
U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1dG8mIGZvbnREYXRhYmFz
ZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZ
ZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkg
OiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7
Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWls
eShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRh
YmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGlmIChmb250cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAgKzExMDIsMTAgQEAgc3Ry
dWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0U2NyaXB0TmFtZSB7IGZh
bHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVz
dCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNv
bnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBz
aXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsK
ICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7Ci0gICAgaWYgKCFp
c1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYmICFhbGxv
d2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkpICYm
IGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQogICAgICAg
ICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpAQCAtMTEyMyw3ICsxMTE3
LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAgICBhdXRvJiBmb250RGF0
YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250
czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250
cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250
cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rp
b25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250
cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAgICAgaWYgKGZh
bWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRo
YXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1p
bHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwogICAgICAgICAvLyBzdXBw
b3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBIb3dldmVyLCB0aGlzIGNy
ZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAoZm9udC13ZWlnaHQsCkBA
IC0xMTc3LDcgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCkKICAg
ICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKTsKIH0KIAotc3RhdGljIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitz
dGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25z
dCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAg
IE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjQwLDcgKzEyMzQs
NyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2Fz
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0
YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lm
aWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9hdCBzaXplKQorc3RhdGlj
IFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKIHsKICAgICBpZiAoZmFt
aWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjgzLDcgKzEyNzcs
NyBAQCBzdGF0aWMgdm9pZCBhdXRvQWN0aXZhdGVGb250KGNvbnN0IFN0cmluZyYgbmFtZSwgQ0dG
bG9hdCBzaXplKQogfQogI2VuZGlmCiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRh
PiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxh
dGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lm
aWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogewogICAgIGZsb2F0IHNpemUg
PSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKIApAQCAtMTI5Niw3ICsxMjkw
LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKIAogICAgICAgICAvLyBBdXRvIGFjdGl2YXRl
IHRoZSBmb250IGJlZm9yZSBsb29raW5nIGZvciBpdCBhIHNlY29uZCB0aW1lLgogICAgICAgICAv
LyBJZ25vcmUgdGhlIHJlc3VsdCBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gYWxnb3Jp
dGhtIHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZvbnQuCi0gICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQo
ZmFtaWx5LnN0cmluZygpLCBzaXplKTsKKyAgICAgICAgYXV0b0FjdGl2YXRlRm9udChmYW1pbHks
IHNpemUpOwogCiAgICAgICAgIGZvbnQgPSBmb250V2l0aEZhbWlseShmYW1pbHksIGZvbnREZXNj
cmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHNpemUpOwog
ICAgIH0KQEAgLTE0MjgsNyArMTQyMiw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3Rl
bUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAg
cmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKLWNvbnN0IEF0
b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsK
ICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsgMHg5ZWQxLCAweDRmNTMg
fTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10gPSB7IDB4NWI4YiwgMHg0
ZjUzIH07CkBAIC0xNDM2LDEwICsxNDMwLDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1tdID0geyAweDVmYWUsIDB4
OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhblpo
ZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2MywgMHg5ZWQxLCAweDlh
ZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5n
PiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJh
bCBzb25ndGlTQyA9ICJTb25ndGkgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxp
dGVyYWwgc29uZ3RpVEMgPSAiU29uZ3RpIFRDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVND
SUlMaXRlcmFsIGhlaXRpU0NSZXBsYWNlbWVudCA9ICJQaW5nRmFuZyBTQyJfczsKKyAgICBzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVRDUmVwbGFjZW1lbnQgPSAiUGluZ0Zhbmcg
VEMiX3M7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6
CkBAIC0xNDc0LDcgKzE0NjgsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFi
bGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQpAQCAtMTU0Nyw3ICsxNTQxLDcgQEAgUmVmPEZvbnQ+IEZvbnRD
YWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGkKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhv
dyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawog
ICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdp
bmcgYW55IHByZWZzLgotICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCBBdG9tU3RyaW5nKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWlseShmb250RGVzY3Jp
cHRpb24sICJUaW1lcyJfcykpCiAgICAgICAgIHJldHVybiAqcmVzdWx0OwogCiAgICAgLy8gTGFz
dFJlc29ydCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgK
aW5kZXggOWFiYTg5ZjIxMzcwNzJkNDNhOGY4OThhZGRkMThkYWQ2MjQ5MDM5NS4uZTg3Yjk2MTdl
ZGY5MDI0YjQwZDA3YzgxMTgwZmJkMDA0Y2YxM2Y3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCkBA
IC02Miw3ICs2Miw3IEBAIHR5cGVkZWYgSGFzaE1hcDxGb250VGFnLCBWYXJpYXRpb25EZWZhdWx0
cywgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUCiBSZXRhaW5QdHI8Q1RGb250
UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVj
dGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBhcHBs
eVdlaWdodFdpZHRoU2xvcGVWYXJpYXRpb25zID0gdHJ1ZSk7CiBlbnVtIGNsYXNzIFNob3VsZENv
bXB1dGVQaHlzaWNhbFRyYWl0cyA6IGJvb2wgeyBObywgWWVzIH07CiBTeW50aGVzaXNQYWlyIGNv
bXB1dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVmLCBjb25zdCBGb250RGVzY3JpcHRpb24m
LCBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgPSBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFp
dHM6Ok5vLCBib29sIGlzUGxhdGZvcm1Gb250ID0gZmFsc2UpOwotUmV0YWluUHRyPENURm9udFJl
Zj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRT
ZWxlY3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQgc2l6ZSk7CitSZXRhaW5Q
dHI8Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOwog
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXNGb3JGb250RGVzY3JpcHRvcihD
VEZvbnREZXNjcmlwdG9yUmVmKTsKIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRz
KENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpOwogUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENU
Rm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0
MzQ0NzYzYjczZTEyZGIyYTAyNjcuLmZmYjA0MTA3MTBiZjIwMTc2NzJmY2RjMDY4MTI1ZGFhOGRj
YjU5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMxOSwyNSArMzE5LDI0
IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4g
YSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBGb250
Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVy
biAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5nIHRp
bWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCisgICAgaWYgKFJlZlB0cjxGb250PiBmb250
ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sICJzZXJpZiJfcykpCiAgICAgICAgIHJl
dHVybiAqZm9udDsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9w
ZXJseS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
SW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAg
cmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZh
bWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5h
bWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdl
J3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwg
Y29udmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1v
bm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxl
bmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJu
IGZhbWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAogICAgIGlmIChmYW1p
bHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5KQogICAgICAgICBy
ZXR1cm4gInNlcmlmIjsKQEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXND
b21tb25seVVzZWRHZW5lcmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykK
ICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmlu
ZywgImN1cnNpdmUiKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVy
ZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJp
bGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRG
YWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAg
Ly8gVGhlIENTUyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIv
Y3NzMy1mb250cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdl
IG11c3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMg
b3Igb2JsaXF1ZSBjYW4gYmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJp
bmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJp
bmcmKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi4w
MzE2NmVkODAyZmI5NDM2OWMxOWRjYzVmODc1MTE2ZGQ5MTc0MTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAt
MzYyLDkgKzM2Miw5IEBAIGJvb2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JF
ZGl0aW5nKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9u
dD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmlu
ZyYgb3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgTE9HRk9OVCYgZm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAg
ICBBdG9tU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZG
YWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFj
ZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0
cjxGb250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlO
YW1lKTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFt
aWx5TmFtZTsKQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbgogCiBS
ZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOwogCiAgICAgaWYgKCFmYWxsYmFja0Zv
bnROYW1lLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBS
ZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aQogICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dz
LWluc3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCiAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8g
bGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Vu
aWNvZGVfdHlwZWZhY2VzCiAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBz
aW5jZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4K
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZh
bGxiYWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJN
aWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwK
LSAgICAgICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgU3RyaW5nKCJU
aW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
U3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpCiAgICAgfTsKICAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7
ICsraSkgewpAQCAtNTEyLDcgKzUxMiw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgbWF0Y2hJbXBy
b3ZpbmdFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBjYW5kaWRhdGUsIENPTlNUIFRFWFRNCiAgICAg
cmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0
YWxpYywgaW50IHNpemUsIGJvb2wgc3ludGhlc2l6ZUl0YWxpYykKK3N0YXRpYyBHRElPYmplY3Q8
SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdl
aWdodCwgYm9vbCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGlj
KQogewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAgLTU3MCwxMiArNTcwLDEyIEBAIHN0YXRpYyBH
RElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBM
T05HIGRlc2lyZWRXZWlnCiB9CiAKIHN0cnVjdCBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHsKLSAg
ICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCisg
ICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiAgICAg
ICAgIDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCiAgICAgewogICAgIH0KIAotICAgIGNvbnN0
IEF0b21TdHJpbmcmIG1fZmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcmIG1fZmFtaWx5TmFt
ZTsKICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7
CiB9OwogCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZh
bWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVQKICAgICBy
ZXR1cm4gMTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNo
ZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0lu
RmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
CiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNjQ2LDcgKzY0Niw3IEBAIFZlY3RvcjxGb250
U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXNJbkZhbWlsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKIHsKICAgICBib29sIGlzTHVjaWRhR3Jh
bmRlID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5k
ZSIpOwogCkBAIC02OTIsMTEgKzY5Miw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1E
YXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9y
bUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlv
bmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFu
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJN
aWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LQogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIC8vIE9uIFdpbmRvd3Ms
IHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0
cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFs
dGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2VyaWYsCkBAIC03MDUsNyArNzAyLDcg
QEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVy
IHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSA4OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1
cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAiVGltZXMgTmV3IFJvbWFuIl9z
OwogICAgICAgICBicmVhazsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJp
dG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBU
aHVzIHdlIGFsbG93IE1pY3Jvc29mdCBTYW5zIFNlcmlmIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0
aGUgYml0bWFwIGZvbnQgTVMgU2FucyBTZXJpZiwKQEAgLTcxNCwxMCArNzExLDEwIEBAIGNvbnN0
IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9y
bXMgdG9vLgogICAgIGNhc2UgMTM6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2FucyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJu
IG1pY3Jvc29mdFNhbnNTZXJpZjsKKyAgICAgICAgICAgIHJldHVybiAiTWljcm9zb2Z0IFNhbnMg
U2VyaWYiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b20oKTsK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1
MDNjNjI0ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJkNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0y
Niw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNC
aWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewor
c3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsK
ICAgICB2b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRp
Q29udGV4dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0ZDEu
LjVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCaWRpRW1i
ZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVzZWQg
dG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQg
OiBwdWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworY2xhc3MgQmlkaUNvbnRleHQgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hh
ciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVk
ZGluZ1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0
cik7CiAK
</data>
<flag name="commit-queue"
          id="442668"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423321</attachid>
            <date>2021-03-16 05:05:59 -0700</date>
            <delta_ts>2021-03-17 05:13:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210316120557.patch</filename>
            <type>text/plain</type>
            <size>51808</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNmMzNTY0YjhhOGFmOTgxNmI2MWI3OWRmMDY0OTZj
YzdhNWM4MDA1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHJlbW92aW5nIHVzZSBvZiBBdG9tU3RyaW5nIHdoZXJl
IG5vbi1tYWluIHRocmVhZHMgYXJlIGV4cGVjdGVkIHRvCisgICAgICAgIGFjY2VzcyBhIHBhcnRp
Y3VsYXIgcGF0aC4gV2hlcmUgc3RyaW5ncyBhcmUgcmV0YWluZWQsIGlzb2xhdGVkIGNvcGllcwor
ICAgICAgICBhcmUgbWFkZS4KKworICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgZm9yIHRo
ZSBwYXJ0aWFsIGxvY2tpbmcgaW1wbGVtZW50YXRpb24gdXNlZCBieQorICAgICAgICBpT1MgZm9y
IHRoZSB3ZWIgdGhyZWFkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWxyZWFkeSBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXk6OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlRm9udENh
c2NhZGVDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnVwZGF0ZUZvbnRD
YXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjphZGRDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpyZW1vdmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
Y2hlOjpnZW5lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnNpbWlsYXJGb250KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRE
ZXNjcmlwdGlvbktleTo6Rm9udERlc2NyaXB0aW9uS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpj
cmVhdGVGb250UGxhdGZvcm1EYXRhRm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnNpbWlsYXJGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZSk6CisgICAgICAgIChXZWJD
b3JlOjpmb250V2l0aEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9y
bUFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpsYXN0
UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6bGFz
dFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRG
YW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpw
bGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR0RJRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFpdHNJbkZhbWlseVByb2NEYXRhOjpUcmFpdHNJbkZh
bWlseVByb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRp
Q29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oOgorCiAy
MDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2
YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wg
Zm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25l
ZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2Ns
YXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgog
ICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1
N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uYmQ3NDFkMTQxNWVjY2ZjYmQ0MjZlMzNkNDM3YWYyZDRh
OWEyMWNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRh
LmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xv
Y2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJl
Y3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQot
Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcg
KzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNo
ZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkK
IHsKIH0KIApAQCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKLSAgICAg
ICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVk
Q29weSgpKQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8g
KmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwgbV9m
b250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFiaWxpdGllcykKICAgICB7IH0KQEAgLTEw
MCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb25LZXkgbV9m
b250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcg
bV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAg
ICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0
aWVzOwogfTsKQEAgLTE0NywzMyArMTM4LDI1IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2Fj
aGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25z
dCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMg
TWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9t
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZl
ckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYg
cGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShm
YW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkp
CisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lm
aWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBj
YXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlO
YW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAg
ICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVz
TmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3Vy
aWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOwor
ICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJ
TkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250
IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE2NiwyOSBAQCBjb25zdCBB
dG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5v
dCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4g
Y291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7
CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0
dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
U3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5h
bWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShP
UEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVu
YWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJl
Y2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8g
dXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCiAgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJk
bGVzcyBvZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHko
KSB8fCBwYXNzZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlO
YW1lIDogQXRvbVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsK
KyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5
KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KKyAgICAgICAgcGFzc2VkRmFtaWx5
TmFtZSA6IFN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKICNl
bHNlCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7
CisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRp
ZgogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjgsOSArMjA3LDggQEAgRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBh
IGZvbnQuICBXZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3Ro
ZXIgbmFtZXMsCiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIv
Q291cmllciBOZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlh
c2VkIG5hbWUuCi0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVOYW1lID0g
YWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICghYWx0ZXJu
YXRlTmFtZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZv
bnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShmb250RGVzY3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5h
bWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAg
YXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29r
dXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0
b3IgbWF5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSBy
ZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAg
ICAgICAgaXQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0zMTIsOCAr
MjkwLDEwIEBAIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwog
Y29uc3QgdW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0g
NTA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9u
dERhdGEgPSAzMDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29s
IGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1
cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA1LDggQEAgUmVmUHRy
PEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNl
bmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGF1
dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJl0gewog
ICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7CkBAIC0z
NDAsNiArMzE4LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5zaWduZWQg
aW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1l
bW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCkBA
IC0zNTcsMTUgKzMzNywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
SWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2ln
bmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
CiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoJXUpIiwg
cHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udENhc2Nh
ZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNl
bmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJlZjxGb250
PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZv
bnRzKCkudmFsdWVzKCkpIHsKQEAgLTQzNyw3ICs0MTUsNyBAQCBzdGF0aWMgRm9udENhc2NhZGVD
YWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJgogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQo
KTsKICAgICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAg
IGtleS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOwor
ICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0
KGkpLnN0cmluZygpLmlzb2xhdGVkQ29weSgpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBm
b250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250
U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkg
OiAwOwogICAgIHJldHVybiBrZXk7CkBAIC00OTcsNiArNDc1LDcgQEAgUmVmPEZvbnRDYXNjYWRl
Rm9udHM+IEZvbnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3IKIAogdm9pZCBGb250Q2FjaGU6OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250Q2FzY2FkZSwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3Ip
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRl
LnVwZGF0ZUZvbnRzKHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVz
Y3JpcHRpb24oKSwgV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0ODYs
OCBAQCBzaXplX3QgRm9udENhY2hlOjpmb250Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjpp
bmFjdGl2ZUZvbnRDb3VudCgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKKwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1
dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5o
YXNPbmVSZWYoKSkKQEAgLTUyMiw2ICs1MDAsOCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0
b3IqPiogZ0NsaWVudHM7CiAKIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9y
JiBjbGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAg
aWYgKCFnQ2xpZW50cykKICAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0
b3IqPjsKIApAQCAtNTMxLDYgKzUxMSw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9u
dFNlbGVjdG9yJiBjbGllbnQpCiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNl
bGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
CiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZj
bGllbnQpKTsKIApAQCAtNTQxLDExICs1MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdH
ZW5lcmF0aW9uID0gMDsKIAogdW5zaWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICByZXR1cm4gZ0dl
bmVyYXRpb247CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKSB7CiAgICAg
ICAgIEFTU0VSVChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAgICBy
ZXR1cm47CkBAIC01ODUsNyArNTcxLDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29uc3Qg
UHJld2FybUluZm9ybWF0aW9uJikKIHsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2lt
aWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYpCitSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4
MmQ4ZmNiNTc4YzMxMjNkNTdmZjJlLi40YWUwYzdkNjU0ZjMyZWFhMTVlM2Q3ZWRhZWY1MTkxNzgw
NmY4MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aApAQCAtMzMsMTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5j
bHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmdIYXNoLmg+CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkg
ewogICAgICAgICA6IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQogICAg
ICAgICAsIG1fZm9udFNlbGVjdGlvblJlcXVlc3QoZGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJl
cXVlc3QoKSkKICAgICAgICAgLCBtX2ZsYWdzKG1ha2VGbGFnc0tleShkZXNjcmlwdGlvbikpCi0g
ICAgICAgICwgbV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkpCisgICAgICAg
ICwgbV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkuc3RyaW5nKCkpCiAgICAg
ICAgICwgbV9mZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkpCiAg
ICAgICAgICwgbV92YXJpYXRpb25TZXR0aW5ncyhkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5n
cygpKQogICAgIHsgfQpAQCAtMTU3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV9zaXplIHsgMCB9OwogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJl
cXVlc3Q7CiAgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19Owot
ICAgIEF0b21TdHJpbmcgbV9sb2NhbGU7CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRG
ZWF0dXJlU2V0dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRp
bmdzIG1fdmFyaWF0aW9uU2V0dGluZ3M7CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBG
b250RGVzY3JpcHRpb25LZXlIYXNoIHsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewog
ICAgIEZvbnREZXNjcmlwdGlvbktleSBmb250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRo
IHRoZSBsb3dlciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZl
Y3RvcjxBdG9tU3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1p
bGllczsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2Vs
ZWN0b3JWZXJzaW9uOwogfTsKQEAgLTIyNCwxMiArMjI1LDEyIEBAIHB1YmxpYzoKIAogICAgIC8v
IFRoaXMgZnVuY3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3RvciBjYW4gaGF2ZSBhIHVuaWZp
ZWQgbm90aW9uIG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZvbnQtZmFjZS4KICAgICAvLyBJ
dCBjb21lcyBpbnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2ggc2hh
cmVzIGEgZmFtaWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KLSAgICBWZWN0b3I8Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVj
dG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXNJbkZhbWlseShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4g
bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKIAog
ICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50
KEZvbnRTZWxlY3RvciYpOwpAQCAtMjQ3LDcgKzI0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyV2lkdGhDYWNoZXMoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBSZWZQdHI8Rm9udD4g
Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgTE9HRk9OVCYsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBSZWZQdHI8
Rm9udD4gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgTE9HRk9OVCYsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0yODMsMTUgKzI4NCwxNyBAQCBwcml2
YXRlOgogICAgIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQu
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNr
aW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVs
bHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAot
ICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVND
SUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRp
YyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmKTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKKyAgICBSZWN1cnNpdmVMb2Nr
IG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOwog
ICAgIAogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5
IHsgZmFsc2UgfTsKIApAQCAtMzA5LDcgKzMxMiw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhRm9yVGVzdGluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQogewotICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LCBudWxscHRyLCB7IH0pOworICAgIHJldHVy
biBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LnN0cmluZygp
LCBudWxscHRyLCB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVU
WVBFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5
MjQ4MDQzZmE3NDY0YWRjLi44NjQ3ZTg3MDZkYTM2ZGM0NTQ4OWQ4NTc0ODcyYjVkYzE4Mzg3Mzk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDggKzEwMSwxMCBAQCBib29sIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBG
b250Q2FzY2FkZURlcwogCiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotYm9v
bCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTIpCitib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiBmYW1pbHkx
LCBjb25zdCBTdHJpbmcmIGZhbWlseTIpCiB7CisgICAgaWYgKGZhbWlseTEuaXNOdWxsKCkgfHwg
ZmFtaWx5Mi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIGlmIChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZh
bWlseTEgPT0gZmFtaWx5MjsKQEAgLTExMCw3ICsxMTIsNyBAQCBib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwg
Y29ucwogICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZhbWlseTEs
IGZhbWlseTIpOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlO
YW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24uaAppbmRleCAwYTdkZjI1MjhkYWM2MmE4YzVhODkwYmQyZGZhNDMwYTIxNGRkN2Y2Li4z
NzljYWQ3ZmQ1OGVkMWY3ZDJmMDE1OGE2ZDMxYTg5MWJjMDYzYmQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oCkBAIC01Nyw4ICs1Nyw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CiAgICAgY29u
c3QgUmVmQ291bnRlZEFycmF5PEF0b21TdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fZmFtaWxpZXM7IH0KIAotICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29u
c3QgQXRvbVN0cmluZyYsIGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQg
ZmFtaWx5TmFtZUhhc2goY29uc3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGZhbWls
eU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBTdHJp
bmcgZm9sZGVkRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHVuc2lnbmVkIGVmZmVj
dGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCmluZGV4IDJkZGQ2YmRmMTk0Mzg0MTdh
ZGVhNzExMjQ3ZDIxNzZkNTc2MzUyMzQuLjYwN2VhMjBmOWM0YzQ5MDg4M2YwMzUxNTI2NzgwMmE2
M2M1OWFmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlRm9udHMuY3BwCkBAIC00ODgsNyArNDg4LDYgQEAgc3RhdGljIFJlZlB0cjxH
bHlwaFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNv
bnN0IEZvbnQKIAogR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
LCBGb250VmFyaWFudCB2YXJpYW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwogCiAgICAgaWYgKHZhcmlhbnQgIT0g
Tm9ybWFsVmFyaWFudCkKQEAgLTQ5Niw2ICs0OTUsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVG
b250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVE
ZQogCiAgICAgY29uc3QgdW5zaWduZWQgcGFnZU51bWJlciA9IEdseXBoUGFnZTo6cGFnZU51bWJl
ckZvckNvZGVQb2ludChjKTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsK
ICAgICBhdXRvJiBjYWNoZUVudHJ5ID0gcGFnZU51bWJlciA/IG1fY2FjaGVkUGFnZXMuYWRkKHBh
Z2VOdW1iZXIsIEdseXBoUGFnZUNhY2hlRW50cnkoKSkuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNo
ZWRQYWdlWmVybzsKIAogICAgIC8vIEluaXRpYWxpemUgY2FjaGUgd2l0aCBhIGZ1bGwgcGFnZSBv
ZiBnbHlwaCBtYXBwaW5ncyBmcm9tIGEgc2luZ2xlIGZvbnQuCkBAIC01MTYsNiArNTE2LDcgQEAg
R2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMy
IGMsIGNvbnN0IEZvbnRDYXNjYWRlRGUKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5
c3RlbUZhbGxiYWNrcygpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwog
ICAgIGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9u
dHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmgKaW5kZXggNDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4u
NWE0YTVlMDRjODEyMWM4N2VhMTU3YjFmODUwZTk2YTZmZmM1MDgwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIldpZHRoQ2FjaGUu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00
Myw3ICs0NCw3IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAK
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMp
OwotY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRl
Rm9udHM+IHsKK2NsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udENhc2NhZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRD
YXNjYWRlRm9udHMpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwogcHVibGljOgpAQCAtMTE0LDYgKzExNSw3IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0
Y2ggeyBVbmtub3duUGl0Y2ggfTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxz
ZSB9OworICAgIExvY2sgbV9sb2NrOwogfTsKIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250
czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQpAQCAtMTI1LDcgKzEyNyw2IEBAIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4
ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwCiAKIGlubGluZSBj
b25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgICAg
ICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5mb250OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAppbmRleCBh
YzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJiMGYxZTZhNTBh
NDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAi
Rm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNlbGVjdG9yIDog
cHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2VsZWN0b3IgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJiMWJkN2ZhN2Zl
MWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZmYWNmNWNkMTk1
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCkBA
IC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHVuaWNvZGUv
dXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIEEgR2x5
cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZv
ciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVuaWNvZGUgY29k
ZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJvbSAwIGFuZCBp
bmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1jbGFzcyBHbHlw
aFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEdseXBoUGFnZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3MWI2YzI1YzQxZjM3
MmRlNTI0YjEuLmU2ZjU3Y2M5MzFlN2U5NzU1NGViNTVjNDk1NjQyMzRlMTgwYWY5MmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRhaW5QdHI8Q1RGb250
UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIGNvbnN0IEZv
bnREZXNjcgogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRl
cyhvcmlnaW5hbEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwgbnVsbHB0ciwgZGVz
Y3JpcHRvci5nZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBB
dHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9u
IHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMu
IEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMi
IHRvIEdlZXphIFByby4KQEAgLTYyOCwyNyArNjI4LDIxIEBAIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0
IEF0CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0aXR1dGUgdGhlIGRl
ZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNlIGZvbnRzLgotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKSB7Ci0gICAgICAg
IHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmll
cigiY291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAg
cmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgIH0KKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9uYWNvIikgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkKKyAgICAgICAgcmV0
dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsKIAogICAgIC8vIFN1
YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7Ci0gICAgICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdmVyZGFuYSgi
dmVyZGFuYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0
dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAgIH0KKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKQor
ICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZlcmRhbmEiX3MpOwog
I2VuZGlmCiAKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0byIpKTsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJVcmR1IikpOwogICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMu
Z2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9s
ZCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBmb3IgKFN0cmluZyog
bWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewogICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zSWdu
b3JpbmdBU0NJSUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkg
PyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgzLDEwIEBAIHN0YXRpYyBjb25zdCBGb250RGF0YWJh
c2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0YWJhc2U6Oklu
CiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07CiB9CiAKLVZl
Y3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxGb250
U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1dG8mIGZvbnREYXRhYmFz
ZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZ
ZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkg
OiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7
Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWls
eShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRh
YmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGlmIChmb250cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAgKzExMDIsMTAgQEAgc3Ry
dWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0U2NyaXB0TmFtZSB7IGZh
bHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVz
dCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNv
bnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBz
aXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsK
ICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7Ci0gICAgaWYgKCFp
c1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYmICFhbGxv
d2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkpICYm
IGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQogICAgICAg
ICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpAQCAtMTEyMyw3ICsxMTE3
LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAgICBhdXRvJiBmb250RGF0
YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250
czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250
cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250
cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rp
b25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250
cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAgICAgaWYgKGZh
bWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRo
YXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1p
bHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwogICAgICAgICAvLyBzdXBw
b3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBIb3dldmVyLCB0aGlzIGNy
ZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAoZm9udC13ZWlnaHQsCkBA
IC0xMTc3LDcgKzExNzEsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCkKICAg
ICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKTsKIH0KIAotc3RhdGljIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQg
c2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitz
dGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25z
dCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAg
IE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjA2LDcgKzEyMDAs
NyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2Fz
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCJV
SUNURm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlcXVlc3QgPSBmb250
RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICAgICAgQ1RGb250U3ltYm9s
aWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWlnaHQpIHx8IEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJp
bGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVlc3Quc2xvcGUp
ID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LnN0cmluZygp
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNv
bnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3Ry
aW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWlseS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNvY29hOjpzaW5nbGV0b24oKS5jb250ZW50
U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLnN0cmluZygp
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWl0cykKICAgICAgICAg
ICAgIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5
bWJvbGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRyYWl0cywgdHJhaXRzKSk7CiAgICAgICAg
IHJldHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6
ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtMTI0MCw3ICsxMjM0LDcgQEAgc3RhdGlj
IFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmV0YWlu
UHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8
Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI4Myw3ICsxMjc3LDcgQEAgc3RhdGlj
IHZvaWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJpbmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkK
IH0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hl
OjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMg
Zm9udEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4g
Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAgICBmbG9hdCBzaXplID0gZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAgLTEyOTYsNyArMTI5MCw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8gQXV0byBhY3RpdmF0ZSB0aGUgZm9udCBi
ZWZvcmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGltZS4KICAgICAgICAgLy8gSWdub3JlIHRo
ZSByZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0byBhY3R1
YWxseSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWlseS5zdHJp
bmcoKSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAog
ICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZv
bnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBzaXplKTsKICAgICB9CkBAIC0x
NDI4LDcgKzE0MjIsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0Zv
ckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250
Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBG
b250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9OwpAQCAt
MTQzNiwxMCArMTQzMCwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0YXRpYyBj
b25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZj
NSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3Ry
aW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0
aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25ndGlU
QygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlTQ1Jl
cGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpU0Mg
PSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0
aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBo
ZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAg
ICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAtMTQ3NCw3
ICsxNDY4LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFy
eVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKQEAgLTE1NDcsNyArMTU0MSw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RS
ZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7
CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1
c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUg
ZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVm
cy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwg
QXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAiVGlt
ZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNvcnQgaXMg
Z3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4
OWYyMTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAzOTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQw
N2M4MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaApAQCAtNjIsNyArNjIs
NyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFy
YWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFy
ZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZp
ZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0
aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBjbGFzcyBTaG91bGRDb21wdXRlUGh5c2lj
YWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNz
YXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkQ29t
cHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9v
bCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3Jt
Rm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVx
dWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOworUmV0YWluUHRyPENURm9udFJl
Zj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVj
dGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3Jp
cHRvclJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVE
aWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKIFJldGFp
blB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlw
dG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZy
ZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmMDI3ZWVkMzE3MTQ0NGJjMzZhNDM0NDc2M2I3M2Ux
MmRiMmEwMjY3Li5mZmIwNDEwNzEwYmYyMDE3NjcyZmNkYzA2ODEyNWRhYThkY2I1OWUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2Fj
aGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0zMTksMjUgKzMxOSwyNCBAQCBSZWY8Rm9u
dD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aQogewogICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sg
Zm9udCBoZXJlLCBvdGhlcndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwogICAg
IC8vIG1hdGNoZXMgZm9yIG5vbi1mYWxsYmFjayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlz
RmFsbGJhY2tGb250QWxsb3dlZC4KLSAgICBzdGF0aWMgQXRvbVN0cmluZyB0aW1lc1N0cigic2Vy
aWYiKTsKLSAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgdGltZXNTdHIpKQorICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCAic2VyaWYiX3MpKQogICAgICAgICByZXR1cm4gKmZvbnQ7
CiAKICAgICAvLyBUaGlzIGNvdWxkIGJlIHJlYWNoZWQgZHVlIHRvIGltcHJvcGVybHktaW5zdGFs
bGVkIG9yIG1pc2NvbmZpZ3VyZWQgZm9udGNvbmZpZy4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENh
Y2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmlu
ZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNv
bnN0IFN0cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIHJldHVybiB7IH07
CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21GYW1pbHkoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5KQorc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJv
bUZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBJZiB3ZSdyZSBjcmVhdGlu
ZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9ub3NwYWNlIiksIGNvbnZlcnQgdGhl
IG5hbWUgaW50bwogICAgIC8vIHRoZSBmYWxsYmFjayBuYW1lIChsaWtlICJtb25vc3BhY2UiKSB0
aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCiAgICAgaWYgKGZhbWlseS5sZW5ndGgoKSAmJiAh
ZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCi0gICAgICAgIHJldHVybiBmYW1pbHkuc3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBmYW1pbHk7CiAKICAgICBpZiAoZmFtaWx5ID09IHN0YW5k
YXJkRmFtaWx5IHx8IGZhbWlseSA9PSBzZXJpZkZhbWlseSkKICAgICAgICAgcmV0dXJuICJzZXJp
ZiI7CkBAIC01MDAsNyArNDk5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tbW9ubHlVc2Vk
R2VuZXJpY0ZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWVTdHJpbmcpCiAgICAgICAgIHx8
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJjdXJzaXZl
Iik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKK3N0
ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVz
LCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIC8vIFRoZSBDU1Mg
Zm9udCBtYXRjaGluZyBhbGdvcml0aG0gKGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMv
I2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtKQogICAgIC8vIHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQg
YW4gZXhhY3QgbWF0Y2ggZm9yIGZvbnQgZmFtaWx5LCBzbGFudCAoaXRhbGljIG9yIG9ibGlxdWUg
Y2FuIGJlIHVzZWQpCkBAIC01OTksOSArNTk4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUK
ICAgICByZXR1cm4gcGxhdGZvcm1EYXRhOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2Fj
aGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJikKK09wdGlv
bmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKaW5k
ZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4uMDMxNjZlZDgwMmZi
OTQzNjljMTlkY2M1Zjg3NTExNmRkOTE3NDE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTM2Miw5ICszNjIs
OSBAQCBib29sIEZvbnRDYWNoZTo6aXNTeXN0ZW1Gb250Rm9yYmlkZGVuRm9yRWRpdGluZyhjb25z
dCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0b21TdHJpbmcmIG91dEZvbnRG
YW1pbHlOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExP
R0ZPTlQmIGZvbnQsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCiB7Ci0gICAgQXRvbVN0cmlu
ZyBmYW1pbHlOYW1lKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExG
X0ZBQ0VTSVpFKSk7CisgICAgU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3Nu
bGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKICAgICBSZWZQdHI8Rm9udD4gZm9u
dERhdGEgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSk7CiAgICAg
aWYgKGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFtaWx5TmFtZSA9IGZhbWlseU5hbWU7CkBA
IC0zNzMsNyArMzczLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb24KIAogUmVmPEZvbnQ+IEZv
bnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPEF0
b21TdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gZmFsbGJhY2tGb250TmFtZTsKIAogICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5nZXQo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIGZhbGxiYWNrRm9udE5hbWUpOwpAQCAtMzg0LDEyICszODQsMTIgQEAgUmVmPEZvbnQ+IEZv
bnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGkKICAgICAvLyBTZWFyY2ggYWxsIHR5cGljYWwgV2luZG93cy1pbnN0YWxsZWQg
ZnVsbCBVbmljb2RlIGZvbnRzLgogICAgIC8vIFNvcnRlZCBieSBtb3N0IHRvIGxlYXN0IGdseXBo
cyBhY2NvcmRpbmcgdG8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmljb2RlX3R5cGVm
YWNlcwogICAgIC8vIFN0YXJ0IHdpdGggVGltZXMgTmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMg
dGhlIGRlZmF1bHQgaWYgdGhlIHVzZXIgZG9lc24ndCBjaGFuZ2UgcHJlZnMuCi0gICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnRz
W10gPSB7Ci0gICAgICAgIEF0b21TdHJpbmcoIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiTWljcm9zb2Z0IFNh
bnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0
b21TdHJpbmcoIlRhaG9tYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAg
ICAgICAgQXRvbVN0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiQXJpYWwiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
U3RyaW5nPiBmYWxsYmFja0ZvbnRzW10gPSB7CisgICAgICAgIFN0cmluZygiVGltZXMgTmV3IFJv
bWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiTWlj
cm9zb2Z0IFNhbnMgU2VyaWYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAg
ICAgU3RyaW5nKCJUYWhvbWEiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAg
ICAgU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCisgICAgICAgIFN0cmluZygiQXJpYWwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKQogICAgIH07CiAgICAgUmVmUHRyPEZvbnQ+IHNpbXBsZUZvbnQ7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKQEAg
LTUxMiw3ICs1MTIsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIG1hdGNoSW1wcm92aW5nRW51bVBy
b2MoQ09OU1QgTE9HRk9OVCogY2FuZGlkYXRlLCBDT05TVCBURVhUTQogICAgIHJldHVybiAxOwog
fQogCi1zdGF0aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBz
aXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCitzdGF0aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVh
dGVHRElGb250KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJvb2wg
ZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJvb2wgc3ludGhlc2l6ZUl0YWxpYykKIHsKICAgICBI
V25kREMgaGRjKDApOwogCkBAIC01NzAsMTIgKzU3MCwxMiBAQCBzdGF0aWMgR0RJT2JqZWN0PEhG
T05UPiBjcmVhdGVHRElGb250KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVk
V2VpZwogfQogCiBzdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YSB7Ci0gICAgVHJhaXRzSW5G
YW1pbHlQcm9jRGF0YShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgIFRyYWl0c0lu
RmFtaWx5UHJvY0RhdGEoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgICAgICA6IG1fZmFt
aWx5TmFtZShmYW1pbHlOYW1lKQogICAgIHsKICAgICB9CiAKLSAgICBjb25zdCBBdG9tU3RyaW5n
JiBtX2ZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5nJiBtX2ZhbWlseU5hbWU7CiAgICAgVmVj
dG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogfTsKIApAQCAt
NjI2LDcgKzYyNiw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgdHJhaXRzSW5GYW1pbHlFbnVtUHJv
YyhDT05TVCBMT0dGT05UKiBsb2dGb250LCBDT05TVCBURVhUTUVUCiAgICAgcmV0dXJuIDE7CiB9
CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIEhX
bmREQyBoZGMoMCk7CiAKQEAgLTY0Niw3ICs2NDYsNyBAQCBWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1p
bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1E
YXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyosIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCitz
dGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyosIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgYm9vbCBpc0x1Y2lkYUdyYW5kZSA9IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgImx1Y2lkYSBncmFuZGUiKTsKIApAQCAt
NjkyLDExICs2OTIsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENh
Y2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxp
dGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmlu
ZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNhbnNTZXJpZigiTWljcm9zb2Z0IFNh
bnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KICAgICBzd2l0
Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBz
dXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4K
ICAgICAvLyBUaHVzIHdlIGFsbG93IFRpbWVzIE5ldyBSb21hbiBhcyBhbiBhbHRlcm5hdGl2ZSBm
b3IgdGhlIGJpdG1hcCBmb250IE1TIFNlcmlmLApAQCAtNzA1LDcgKzcwMiw3IEBAIGNvbnN0IEF0
b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMg
dG9vLgogICAgIGNhc2UgODoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseU5hbWUsICJtcyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3
Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAg
YnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMs
IGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxv
dyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBm
b250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxMSwxMCBAQCBjb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAg
ICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiBtaWNyb3NvZnRT
YW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gIk1pY3Jvc29mdCBTYW5zIFNlcmlmIl9zOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmNwcAppbmRleCBjOWYwZjgxM2JjYjYzNjYxNTRiYzA0YmVhNTAzYzYyNGZhZWEw
MWI1Li41NWYxYjFhZjdmYTFkOWM5MjZhMDE3NjA5MjU0MWJmYmEwNzZiZDc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcApAQCAtMjYsNyArMjYsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQg
OiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKK3N0cnVjdCBTYW1l
U2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2FtZVNpemVB
c0JpZGlDb250ZXh0PiB7CiAgICAgdWludDMyX3QgYml0ZmllbGRzIDogMTY7CiAgICAgdm9pZCog
cGFyZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApp
bmRleCBkNGM0ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5NjcwZDM5YmQzNGQxLi41YThkOTA5ZWVh
OTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2EyNjAzZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5oCkBAIC0yMiwxNSArMjIsMTUgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291
bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gQmlkaUVtYmVkZGluZ1NvdXJj
ZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9tVW5pY29kZSB9OwogCiAvLyBVc2VkIHRvIGtlZXAgdHJh
Y2sgb2YgZXhwbGljaXQgZW1iZWRkaW5ncy4KLWNsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFJl
ZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK2NsYXNzIEJpZGlDb250ZXh0IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVD
aGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2UsIEJpZGlFbWJlZGRpbmdTb3VyY2Ug
PSBGcm9tU3R5bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423473</attachid>
            <date>2021-03-17 05:13:11 -0700</date>
            <delta_ts>2021-03-17 05:37:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210317121310.patch</filename>
            <type>text/plain</type>
            <size>57915</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uY2Q1NWY4YmVhYTIwZWQxNDA3YTliM2UwOTI3NmU2
YWFjOGY4OWRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFuZ2VzCisgICAgICAgICAgICBhbmQgcmVtb3Zl
IENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxvbmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERvbid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQK
KyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5nIGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgcmVh
ZC93cml0ZS4gTWVtYmVycyB0aGF0CisgICAgICAgICAgICBhcmUgb25seSBzZXQgb25jZSBtYWlu
dGFpbiBsb2NrLWZyZWUgcmVhZHMgKGlzRml4ZWRQaXRjaCBhbmQKKyAgICAgICAgICAgIHByaW1h
cnlGb250KS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oOiBNYWtlIFRocmVhZFNhZmVSZWZDb3VudGVkCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAg
ICAgICAgICAgIEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAg
IEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvQmlkaUNvbnRleHQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEw
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5i
NmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0Vp
dGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRh
ZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZv
bnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVz
ZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3
MmI0NmYwY2M5MDk2ZC4uYmQ3NDFkMTQxNWVjY2ZjYmQ0MjZlMzNkNDM3YWYyZDRhOWEyMWNlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBA
IC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxv
Y2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAg
Rm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENh
Y2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApA
QCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoKSB7IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAg
ICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2Zh
bWlseShmYW1pbHkpCisgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQog
ICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNl
RmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNh
cGFiaWxpdGllcyhmb250RmFjZUNhcGFiaWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3Jp
cHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7
CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsK
QEAgLTE0NywzMyArMTM4LDI1IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSgpCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1T
cGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1l
KTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYg
KGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAg
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJp
YWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4g
IkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47
CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3Owor
ICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAg
ICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAg
ICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMg
YWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE2NiwyOSBAQCBjb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4K
ICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsK
KyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVz
OworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
Rm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRM
b2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2lu
ZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2Ug
ZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBX
aW5kb3dzIGZlYXR1cmUuCiAgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0
aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNz
ZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRv
bVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICBjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFz
c2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KKyAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IFN0
cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKICNlbHNlCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjgsOSArMjA3LDggQEAgRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRl
TmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBhIGZvbnQuICBX
ZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMs
CiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBO
ZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5hbWUu
Ci0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRl
RmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICghYWx0ZXJuYXRlTmFtZS5p
c051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9y
bURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVz
Y3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRl
cm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXV0byogZm9u
dFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtl
eSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhh
dmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUg
Y2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAgICAgICAgaXQg
PSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0zMTIsOCArMjkwLDEwIEBA
IGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgdW5z
aWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBjb25z
dCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAz
MDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA1LDggQEAgUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAg
IAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGF1dG8gYWRkUmVz
dWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJl0gewogICAgICAgICBy
ZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7CkBAIC0zNDAsNiArMzE4
LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0
aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwog
ICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2lu
Z2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5zaWduZWQgaW5hY3RpdmVG
b250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCkBAIC0zNTcsMTUg
KzMzNywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQo
KQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdl
Q291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgTE9H
KEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoJXUpIiwgcHVyZ2VDb3Vu
dCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgp
OwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotCiAg
ICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJlZjxGb250PiwgMjA+IGZv
bnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFs
dWVzKCkpIHsKQEAgLTQzNyw3ICs0MTUsNyBAQCBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBt
YWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJgogICAg
IHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsKICAgICBr
ZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAgIGtleS5mYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworICAgICAgICBr
ZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpLnN0cmlu
ZygpLmlzb2xhdGVkQ29weSgpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0
b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JW
ZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAg
IHJldHVybiBrZXk7CkBAIC00OTcsNiArNDc1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZv
bnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IK
IAogdm9pZCBGb250Q2FjaGU6OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250Q2FzY2FkZSwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZv
bnRzKHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24o
KSwgV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0ODYsOCBAQCBzaXpl
X3QgRm9udENhY2hlOjpmb250Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZv
bnRDb3VudCgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQg
OiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYo
KSkKQEAgLTUyMiw2ICs1MDAsOCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0Ns
aWVudHM7CiAKIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQp
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgaWYgKCFnQ2xp
ZW50cykKICAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0b3IqPjsKIApA
QCAtNTMxLDYgKzUxMSw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9y
JiBjbGllbnQpCiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJiBj
bGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgQVNT
RVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsK
IApAQCAtNTQxLDExICs1MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdHZW5lcmF0aW9u
ID0gMDsKIAogdW5zaWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247
CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKSB7CiAgICAgICAgIEFTU0VS
VChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CkBA
IC01ODUsNyArNTcxLDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29uc3QgUHJld2FybUlu
Zm9ybWF0aW9uJikKIHsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYpCitSZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJp
bmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4MmQ4ZmNiNTc4
YzMxMjNkNTdmZjJlLi40YWUwYzdkNjU0ZjMyZWFhMTVlM2Q3ZWRhZWY1MTkxNzgwNmY4MmU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzMs
MTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkgewogICAgICAg
ICA6IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQogICAgICAgICAsIG1f
Zm9udFNlbGVjdGlvblJlcXVlc3QoZGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKSkK
ICAgICAgICAgLCBtX2ZsYWdzKG1ha2VGbGFnc0tleShkZXNjcmlwdGlvbikpCi0gICAgICAgICwg
bV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkpCisgICAgICAgICwgbV9sb2Nh
bGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkuc3RyaW5nKCkpCiAgICAgICAgICwgbV9m
ZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwg
bV92YXJpYXRpb25TZXR0aW5ncyhkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5ncygpKQogICAg
IHsgfQpAQCAtMTU3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplIHsg
MCB9OwogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7CiAg
ICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19OwotICAgIEF0b21T
dHJpbmcgbV9sb2NhbGU7CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRGZWF0dXJlU2V0
dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFy
aWF0aW9uU2V0dGluZ3M7CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBGb250RGVzY3Jp
cHRpb25LZXlIYXNoIHsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewogICAgIEZvbnRE
ZXNjcmlwdGlvbktleSBmb250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRoIHRoZSBsb3dl
ciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZlY3RvcjxBdG9t
U3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1pbGllczsKICAg
ICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJz
aW9uOwogfTsKQEAgLTIyNCwxMiArMjI1LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3RvciBjYW4gaGF2ZSBhIHVuaWZpZWQgbm90aW9u
IG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZvbnQtZmFjZS4KICAgICAvLyBJdCBjb21lcyBp
bnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2ggc2hhcmVzIGEgZmFt
aWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KLSAgICBWZWN0b3I8Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWls
eShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKIAogICAgIHZvaWQg
YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KEZvbnRTZWxl
Y3RvciYpOwpAQCAtMjQ3LDcgKzI0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyV2lkdGhD
YWNoZXMoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBSZWZQdHI8Rm9udD4gZm9udEZyb21E
ZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9O
VCYsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9u
dEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
TE9HRk9OVCYsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0yODMsMTUgKzI4NCwxNyBAQCBwcml2YXRlOgogICAg
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogCiAgICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCi0gICAgRm9u
dFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsg
fSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAotICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
KTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsK
KworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOwogICAgIAogICAg
IGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2Ug
fTsKIApAQCAtMzA5LDcgKzMxMiw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhRm9y
VGVzdGluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5KQogewotICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5LCBudWxscHRyLCB7IH0pOworICAgIHJldHVybiBjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LnN0cmluZygpLCBudWxscHRy
LCB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNj
cmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5MjQ4MDQzZmE3
NDY0YWRjLi5iMzhjYWVmYzU1MWM4YmIxY2ViN2M5OTE1YWI0Y2FjN2JlODY3OTIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDMwICsxMDEsMjAgQEAgYm9vbCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpmYW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2Nh
ZGVEZXMKIAogI2VuZGlmIC8vIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAKLWJvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkxLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkyKQorYm9vbCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IFN0cmluZyYgZmFtaWx5MSwgY29uc3Qg
U3RyaW5nJiBmYW1pbHkyKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChmYW1pbHkx
LnN0YXJ0c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5MjsKLSNl
bmRpZgorICAgIGlmIChmYW1pbHkxLmlzTnVsbCgpIHx8IGZhbWlseTIuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpl
cXVhbChmYW1pbHkxLCBmYW1pbHkyKTsKIH0KIAotdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQordW5zaWduZWQg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJiBmYW1p
bHkpCiB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcu
JykpCi0gICAgICAgIHJldHVybiBmYW1pbHkuZXhpc3RpbmdIYXNoKCk7Ci0jZW5kaWYKICAgICBy
ZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpoYXNoKGZhbWlseSk7CiB9CiAKIFN0cmlu
ZyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYg
ZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0
aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5OwotI2VuZGlmCiAgICAgcmV0dXJuIGZhbWls
eS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKaW5kZXgg
MGE3ZGYyNTI4ZGFjNjJhOGM1YTg5MGJkMmRmYTQzMGEyMTRkZDdmNi4uMzc5Y2FkN2ZkNThlZDFm
N2QyZjAxNThhNmQzMWE4OTFiYzA2M2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApAQCAtNTcsOCAr
NTcsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5QXQodW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQogICAgIGNvbnN0IFJlZkNvdW50ZWRB
cnJheTxBdG9tU3RyaW5nPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9
CiAKLSAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcm
LCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNo
KGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFs
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1p
bHlOYW1lSGFzaChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgU3RyaW5nIGZvbGRlZEZhbWls
eU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICB1bnNpZ25lZCBlZmZlY3RpdmVGYW1pbHlDb3Vu
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcAppbmRleCAyZGRkNmJkZjE5NDM4NDE3YWRlYTcxMTI0N2QyMTc2
ZDU3NjM1MjM0Li5hMTI0MmIyODZkM2M3Mzc4NjAzZDk5Njk4NmRhNDk5ZjQ3ZTg2NDJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmNwcApAQCAtMTI5LDYgKzEyOSw3IEBAIHZvaWQgRm9udENhc2NhZGVGb250czo6ZGV0ZXJt
aW5lUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiAKIGJv
b2wgRm9udENhc2NhZGVGb250czo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogeworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb3IgKGF1dG8mIGZvbnRSYW5n
ZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMpIHsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMu
aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3MSwxNiArMTcyLDIx
IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotY29uc3Qg
Rm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQor
Y29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGlu
ZGV4LCBib29sIGxvY2tIZWxkKQogewogICAgIGlmIChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNb
aW5kZXhdOwogCisgICAgLy8gQ2hlY2sgYWdhaW4gd2l0aCBsb2NrIGhlbGQuIFRoaXMgYWxsb3dz
IHVzIHRvIGhhdmUgYSBsb2NrLWxlc3MgZmFzdCBwYXRoIGluIHRoZSBjb21tb24gY2FzZSB0aGF0
CisgICAgLy8gdGhpcyBmYWxsYmFjayByYW5nZSBoYXMgYWxyZWFkeSBiZWVuIHJlYWxpemVkIHdp
dGhvdXQgaW50cm9kdWNpbmcgYSByYWNlIGNvbmRpdGlvbi4KKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrSWYobV9sb2NrLCAhbG9ja0hlbGQpOworICAgIGlmICghbG9ja0hlbGQgJiYgaW5kZXgg
PCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKKwogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0
b24oKS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxs
YmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0g
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBG
b250UmFuZ2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSBy
ZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTk0LDI4IEBAIGNvbnN0IEZv
bnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0
IEZvbnRDYXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3It
PmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAg
ICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9u
dFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVz
Y3JpcHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgfQotCi0gICAgaWYg
KG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWls
eUNvdW50KCkpCi0gICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2Ny
aXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4
IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSkKKyAgICAgICAgICAgIGZvbnRS
YW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZh
bGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKIAotICAgIGlmIChmb250UmFuZ2Vz
LmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VSVChtX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7
CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Cisg
ICAgICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0
aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOwogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxl
Y3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlw
dGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9PSBtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmb250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleDsKLSAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3It
PmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7
CisgICAgICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQo
KTsKKyAgICAgICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1fZm9udFNl
bGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKyttX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRS
YW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2Vs
ZWN0b3JGYWxsYmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gZm9udFJhbmdlczsKKyAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBw
ZW5kKFdURk1vdmUoZm9udFJhbmdlcykpOworICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tS
YW5nZXMubGFzdCgpOworfQorCitjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHJlYWxpemVGYWxsYmFja1Jh
bmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFy
MzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzM0LDEwIEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFy
YWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250KiBmaW5kQmVzdEZh
bGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0ZXIpCitjb25z
dCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5kQmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0ZXIpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgOyArK2ZhbGxiYWNrSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZvbnRDYXNjYWRlRm9udHMucmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAgICBhdXRvJiBm
b250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNr
SW5kZXgsIHRydWUpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9udCA9IGZvbnRSYW5nZXMuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5
OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM1MywxMCBAQCBzdGF0aWMgY29uc3QgRm9udCog
ZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250cywg
Y29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hvdWxk
QmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9udCA9IGZpbmRCZXN0RmFsbGJhY2tG
b250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKKyAgICBjb25zdCBGb250KiBmb250
ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CiAKICAgICBp
ZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAsIHRydWUpLmZvbnRGb3JGaXJzdFJhbmdlKCk7
CiAKICAgICBhdXRvIHN5c3RlbUZhbGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9u
dEZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250
ID8gSXNGb3JQbGF0Zm9ybUZvbnQ6OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAg
aWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnQpCkBAIC00MDIsNyArNDEzLDcgQEAgR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIGNv
bnN0IEZvbnRDYXMKICAgICBHbHlwaERhdGEgbG9hZGluZ1Jlc3VsdDsKICAgICBvcHBvcnR1bmlz
dGljYWxseVN0YXJ0Rm9udERhdGFVUkxMb2FkaW5nKGRlc2NyaXB0aW9uLCBtX2ZvbnRTZWxlY3Rv
ci5nZXQoKSk7CiAgICAgZm9yICg7IDsgKytmYWxsYmFja0luZGV4KSB7Ci0gICAgICAgIGF1dG8m
IGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJh
Y2tJbmRleCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCwgdHJ1ZSk7CiAgICAgICAgIGlmIChmb250
UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ4OCw3ICs0OTksNiBA
QCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWdu
ZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CiAKICAg
ICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQpAQCAtNDk2LDExICs1MDYsMTIgQEAgR2x5
cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IGNvbnN0IEZvbnRDYXNjYWRlRGUKIAogICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBH
bHlwaFBhZ2U6OnBhZ2VOdW1iZXJGb3JDb2RlUG9pbnQoYyk7CiAKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgYXV0byYgY2FjaGVFbnRyeSA9IHBhZ2VOdW1iZXIgPyBt
X2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBHbHlwaFBhZ2VDYWNoZUVudHJ5KCkpLml0ZXJh
dG9yLT52YWx1ZSA6IG1fY2FjaGVkUGFnZVplcm87CiAKICAgICAvLyBJbml0aWFsaXplIGNhY2hl
IHdpdGggYSBmdWxsIHBhZ2Ugb2YgZ2x5cGggbWFwcGluZ3MgZnJvbSBhIHNpbmdsZSBmb250Lgog
ICAgIGlmIChjYWNoZUVudHJ5LmlzTnVsbCgpKQotICAgICAgICBjYWNoZUVudHJ5LnNldFNpbmds
ZUZvbnRQYWdlKGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKSkpOworICAgICAgICBjYWNoZUVudHJ5LnNldFNp
bmdsZUZvbnRQYWdlKGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVG
YWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwLCB0cnVlKSkpOwogCiAgICAgR2x5cGhEYXRh
IGdseXBoRGF0YSA9IGNhY2hlRW50cnkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogICAgIGlm
ICghZ2x5cGhEYXRhLmdseXBoKSB7CkBAIC01MTYsNiArNTI3LDcgQEAgR2x5cGhEYXRhIEZvbnRD
YXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRD
YXNjYWRlRGUKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygp
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmIChtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBNdXRh
YmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9udHMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKaW5kZXgg
NDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4uODIxNmNiZjJjNTlkOWRk
ODdmMTMwNjkxMTRkMzVlZThmYjg5MWEzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00Myw3ICs0NCw3IEBAIGNs
YXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAKIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwotY2xhc3MgRm9udENh
c2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKK2NsYXNz
IEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udENhc2Nh
ZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYXNjYWRlRm9udHMpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNj
YWRlRm9udHMpOwogcHVibGljOgpAQCAtNzgsOSArNzksMTIgQEAgcHJpdmF0ZToKICAgICBGb250
Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogICAgIEZvbnRDYXNjYWRlRm9u
dHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCisgICAgY29uc3QgRm9udCogZmluZEJlc3RG
YWxsYmFja0ZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFVDaGFyMzIpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIGJvb2wgc3lzdGVtRmFsbGJhY2tTaG91
bGRCZUludmlzaWJsZSk7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIz
MiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50LCB1bnNpZ25lZCBm
YWxsYmFja0luZGV4ID0gMCk7CiAKKyAgICBjb25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJh
Y2tJbmRleCwgYm9vbCBsb2NrSGVsZCk7CisKICAgICBWZWN0b3I8Rm9udFJhbmdlcywgMT4gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzOwogICAgIHVuc2lnbmVkIG1fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleCB7IDAgfTsKIApAQCAtMTE0LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3duUGl0Y2gg
fTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OworICAgIG11dGFibGUg
TG9jayBtX2xvY2s7CiB9OwogCiBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVk
UGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0xMjUs
MTUgKzEzMCwxOCBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2go
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcAogCiBpbmxpbmUgY29uc3QgRm9u
dCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAobV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAgICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlG
b250OworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmICghbV9j
YWNoZWRQcmltYXJ5Rm9udCkgewotICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOworICAgICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAsIHRydWUpOwog
ICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5mb250
OwogICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCiAgICAgICAgICAgICBtX2NhY2hl
ZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0UmFuZ2UoKTsKICAgICAg
ICAgZWxzZSBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udC0+aXNJbnRlcnN0aXRpYWwoKSkgewogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDE7IDsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGF1dG8mIGxvY2FsUmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIGluZGV4KTsKKyAgICAgICAgICAgICAgICBhdXRvJiBsb2NhbFJhbmdlcyA9IHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCwgdHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGxvY2FsUmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBhdXRvKiBmb250ID0gbG9jYWxSYW5nZXMuZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5OjpGb3JiaWQpLmZv
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5o
CmluZGV4IGFjOWMxNjk2ZDE0MzdmYzU0ODFhYTYzOTgwYjYxMDA2ZDg1YzJmNTAuLjFmMWZkYmIw
ZjFlNmE1MGE0MmY1MDQ0ZTkyMjA4MTdkZWIyYzBlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNp
bmNsdWRlICJGb250UmFuZ2VzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCA9IDA7CiB9OwogCi1jbGFzcyBGb250U2Vs
ZWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKK2NsYXNzIEZvbnRTZWxl
Y3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSA9IGRlZmF1bHQ7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKaW5kZXggY2QwZGNkNDZmZWFiMmIx
YmQ3ZmE3ZmUxZWVhMmY4ZDdjMzgyNzczMy4uOGNmOWNkYWNmYjdhYjRlMGY4MTExNjkzYmQ1NmZh
Y2Y1Y2QxOTVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhQYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlLmgKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8
dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHbHlwaERhdGEgewog
Ly8gQSBHbHlwaFBhZ2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERhdGEgbWFw
cGluZ3MgZm9yIGEgY29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgVW5p
Y29kZSBjb2RlIHNwYWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBzdGFydGluZyBmcm9t
IDAgYW5kIGluY3JlbWVudGluZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVyIG9mIGdseXBocy4KLWNs
YXNzIEdseXBoUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4geworY2xhc3MgR2x5
cGhQYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8R2x5cGhQYWdlPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCkKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZj
MjVjNDFmMzcyZGU1MjRiMS4uZTZmNTdjYzkzMWU3ZTk3NTU0ZWI1NWM0OTU2NDIzNGUxODBhZjky
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtNjE5LDcgKzYxOSw3IEBAIFJldGFpblB0
cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwg
Y29uc3QgRm9udERlc2NyCiAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhB
dHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwgQ1RGb250R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxs
cHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewog
ICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2gg
YmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3Rl
ZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMg
IkFyYWJpYyIgdG8gR2VlemEgUHJvLgpAQCAtNjI4LDI3ICs2MjgsMjEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgQXQKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0
ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9u
dHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFj
byIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsK
LSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5n
PiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAg
fQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28i
KSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKQorICAg
ICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAg
ICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAg
ICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2
ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAg
ICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQor
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3Jh
bmRlIikpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFu
YSJfcyk7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJp
YyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXJhYmljIikpOwogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IHBhc2h0byhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikp
OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoIlVyZHUiKSk7CiAgICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsg
JmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMg
TWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdl
ZXphUHJvIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6
YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGZvciAo
U3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7CiAgICAgICAgIGlmIChmYW1pbHkuY29u
dGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgqbWF0Y2hXb3JkKSkKLSAgICAgICAgICAgIHJldHVybiBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndl
aWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgICAgICAgICAgcmV0dXJuIGZv
bnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2Vp
Z2h0KCkpID8gIkdlZXphUHJvLUJvbGQiX3MgOiAiR2VlemFQcm8iX3MpOwogICAgIH0KICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEwODksMTAgKzEwODMsMTAgQEAgc3RhdGljIGNvbnN0IEZv
bnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udCogZmluZENsb3Nlc3RGb250KGNvbnN0IEZvbnREYXRh
YmFzZTo6SW4KICAgICByZXR1cm4gJmZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzW2luZGV4XTsK
IH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5h
bWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVj
dG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgYXV0byYgZm9u
dERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVk
Rm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVk
Rm9udHMoKTsKLSAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9u
Rm9yRmFtaWx5KGZhbWlseU5hbWUuc3RyaW5nKCkpOworICAgIGNvbnN0IGF1dG8mIGZvbnRzID0g
Zm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZv
bnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTEwOCwxMCArMTEwMiwx
MCBAQCBzdHJ1Y3QgRm9udExvb2t1cCB7CiAgICAgYm9vbCBjcmVhdGVkRnJvbVBvc3RTY3JpcHRO
YW1lIHsgZmFsc2UgfTsKIH07CiAKLXN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1
cFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVz
dCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKK3N0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhG
YW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IHJlcXVlc3Qs
IGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQogewogICAgIGNvbnN0IGF1dG8mIGFsbG93bGlzdCA9IGZvbnRBbGxvd2xpc3QoKTsKLSAg
ICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkuc3RyaW5nKCkpICYmIGFsbG93bGlzdC5zaXplKCkg
JiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQorICAgIGlmICghaXNTeXN0ZW1Gb250KGZh
bWlseSkgJiYgYWxsb3dsaXN0LnNpemUoKSAmJiAhYWxsb3dsaXN0LmNvbnRhaW5zKGZhbWlseSkp
CiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmYW1pbHksICIuYXBwbGVzeXN0ZW11aWZvbnRzZXJpZiIpCkBAIC0xMTIz
LDcgKzExMTcsNyBAQCBzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbAogICAgIH0KIAogICAgIGF1dG8m
IGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3Rh
bGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3Rh
bGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZmFtaWx5Rm9udHMgPSBmb250RGF0YWJhc2Uu
Y29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkuc3RyaW5nKCkpOworICAgIGNvbnN0IGF1dG8mIGZh
bWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5KTsKICAg
ICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoZSBDU1Mgc3BlYyBz
dGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5IGFjY2VwdHMgYSBuYW1lIG9mIGFuIGFjdHVhbCBm
b250IGZhbWlseS4gSG93ZXZlciwgaW4gV2ViS2l0LCB3ZSBjbGFpbSB0byBhbHNvCiAgICAgICAg
IC8vIHN1cHBvcnQgc3VwcGx5aW5nIGEgUG9zdFNjcmlwdCBuYW1lIGluc3RlYWQuIEhvd2V2ZXIs
IHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVuIHRoZSBvdGhlciBwcm9wZXJ0aWVzIChmb250LXdl
aWdodCwKQEAgLTExNzcsNyArMTE3MSw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVGb250Q2Fj
aGUoKQogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgpOwogfQogCi1zdGF0
aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cykKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxD
YXNlKGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpCiB7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KCkgaW4gRm9udERlc2NyaXB0aW9uQ29jb2Eu
Y3BwCiAgICAgT3B0aW9uYWw8U3lzdGVtRm9udEtpbmQ+IHN5c3RlbURlc2lnbjsKQEAgLTEyMDYs
NyArMTIwMCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNw
ZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwKICAgICBpZiAoZmFtaWx5LnN0YXJ0
c1dpdGgoIlVJQ1RGb250VGV4dFN0eWxlIikpIHsKICAgICAgICAgY29uc3QgYXV0byYgcmVxdWVz
dCA9IGZvbnREZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVzdCgpOwogICAgICAgICBDVEZv
bnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSAoaXNGb250V2VpZ2h0Qm9sZChyZXF1ZXN0LndlaWdo
dCkgfHwgRm9udENhY2hlOjpzaW5nbGV0b24oKS5zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JB
Y2Nlc3NpYmlsaXR5KCkgPyBrQ1RGb250VHJhaXRCb2xkIDogMCkgfCAoaXNJdGFsaWMocmVxdWVz
dC5zbG9wZSkgPyBrQ1RGb250VHJhaXRJdGFsaWMgOiAwKTsKLSAgICAgICAgYXV0byBkZXNjcmlw
dG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZShmYW1pbHku
c3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhlbWVDb2NvYTo6c2luZ2xl
dG9uKCkuY29udGVudFNpemVDYXRlZ29yeSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRMb2Nh
bGUoKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgICAgIGF1dG8gZGVz
Y3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFt
aWx5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigp
LmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCku
c3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgICAgICBpZiAodHJhaXRzKQog
ICAgICAgICAgICAgZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNv
cHlXaXRoU3ltYm9saWNUcmFpdHMoZGVzY3JpcHRvci5nZXQoKSwgdHJhaXRzLCB0cmFpdHMpKTsK
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhkZXNjcmlwdG9yLmdl
dCgpLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CkBAIC0xMjQwLDcgKzEyMzQsNyBA
QCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRp
YyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9hdCBzaXplKQorc3RhdGljIFJl
dGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKIHsKICAgICBpZiAoZmFtaWx5
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjgzLDcgKzEyNzcsNyBA
QCBzdGF0aWMgdm9pZCBhdXRvQWN0aXZhdGVGb250KGNvbnN0IFN0cmluZyYgbmFtZSwgQ0dGbG9h
dCBzaXplKQogfQogI2VuZGlmCiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogewogICAgIGZsb2F0IHNpemUgPSBm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKIApAQCAtMTI5Niw3ICsxMjkwLDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKIAogICAgICAgICAvLyBBdXRvIGFjdGl2YXRlIHRo
ZSBmb250IGJlZm9yZSBsb29raW5nIGZvciBpdCBhIHNlY29uZCB0aW1lLgogICAgICAgICAvLyBJ
Z25vcmUgdGhlIHJlc3VsdCBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gYWxnb3JpdGht
IHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZvbnQuCi0gICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFt
aWx5LnN0cmluZygpLCBzaXplKTsKKyAgICAgICAgYXV0b0FjdGl2YXRlRm9udChmYW1pbHksIHNp
emUpOwogCiAgICAgICAgIGZvbnQgPSBmb250V2l0aEZhbWlseShmYW1pbHksIGZvbnREZXNjcmlw
dGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHNpemUpOwogICAg
IH0KQEAgLTE0MjgsNyArMTQyMiw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZh
bGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgcmV0
dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKLWNvbnN0IEF0b21T
dHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxh
dGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAg
ICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsgMHg5ZWQxLCAweDRmNTMgfTsK
ICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10gPSB7IDB4NWI4YiwgMHg0ZjUz
IH07CkBAIC0xNDM2LDEwICsxNDMwLDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAg
c3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1tdID0geyAweDVmYWUsIDB4OGY2
ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhblpoZW5n
SGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2MywgMHg5ZWQxLCAweDlhZDQg
fTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBo
ZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBz
b25ndGlTQyA9ICJTb25ndGkgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVy
YWwgc29uZ3RpVEMgPSAiU29uZ3RpIFRDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlM
aXRlcmFsIGhlaXRpU0NSZXBsYWNlbWVudCA9ICJQaW5nRmFuZyBTQyJfczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVRDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgVEMi
X3M7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6CkBA
IC0xNDc0LDcgKzE0NjgsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVE
aWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKQpAQCAtMTU0Nyw3ICsxNTQxLDcgQEAgUmVmPEZvbnQ+IEZvbnRDYWNo
ZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGkKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBn
ZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAg
IC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcg
YW55IHByZWZzLgotICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLCBBdG9tU3RyaW5nKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sICJUaW1lcyJfcykpCiAgICAgICAgIHJldHVybiAqcmVzdWx0OwogCiAgICAgLy8gTGFzdFJl
c29ydCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKaW5k
ZXggOWFiYTg5ZjIxMzcwNzJkNDNhOGY4OThhZGRkMThkYWQ2MjQ5MDM5NS4uZTg3Yjk2MTdlZGY5
MDI0YjQwZDA3YzgxMTgwZmJkMDA0Y2YxM2Y3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCkBAIC02
Miw3ICs2Miw3IEBAIHR5cGVkZWYgSGFzaE1hcDxGb250VGFnLCBWYXJpYXRpb25EZWZhdWx0cywg
Rm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUCiBSZXRhaW5QdHI8Q1RGb250UmVm
PiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBhcHBseVdl
aWdodFdpZHRoU2xvcGVWYXJpYXRpb25zID0gdHJ1ZSk7CiBlbnVtIGNsYXNzIFNob3VsZENvbXB1
dGVQaHlzaWNhbFRyYWl0cyA6IGJvb2wgeyBObywgWWVzIH07CiBTeW50aGVzaXNQYWlyIGNvbXB1
dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVmLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBT
aG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgPSBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHM6
Ok5vLCBib29sIGlzUGxhdGZvcm1Gb250ID0gZmFsc2UpOwotUmV0YWluUHRyPENURm9udFJlZj4g
cGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxl
Y3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQgc2l6ZSk7CitSZXRhaW5QdHI8
Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBG
b250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOwogRm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXNGb3JGb250RGVzY3JpcHRvcihDVEZv
bnREZXNjcmlwdG9yUmVmKTsKIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENG
TXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
OwogUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9u
dERlc2NyaXB0b3JSZWYsIENHRmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0
NzYzYjczZTEyZGIyYTAyNjcuLmZmYjA0MTA3MTBiZjIwMTc2NzJmY2RjMDY4MTI1ZGFhOGRjYjU5
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMxOSwyNSArMzE5LDI0IEBA
IFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSBm
YWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBGb250Q29u
ZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVybiAw
LiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5nIHRpbWVz
U3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHko
Zm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCisgICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0g
Zm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sICJzZXJpZiJfcykpCiAgICAgICAgIHJldHVy
biAqZm9udDsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9wZXJs
eS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
PiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5G
YW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWls
eShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVT
dHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdlJ3Jl
IGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29u
dmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9z
cGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxlbmd0
aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZh
bWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAogICAgIGlmIChmYW1pbHkg
PT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5KQogICAgICAgICByZXR1
cm4gInNlcmlmIjsKQEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21t
b25seVVzZWRHZW5lcmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykKICAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmluZywg
ImN1cnNpdmUiKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgLy8g
VGhlIENTUyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3Nz
My1mb250cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdlIG11
c3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Ig
b2JsaXF1ZSBjYW4gYmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcm
IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi4wMzE2
NmVkODAyZmI5NDM2OWMxOWRjYzVmODc1MTE2ZGQ5MTc0MTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzYy
LDkgKzM2Miw5IEBAIGJvb2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0
aW5nKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmluZyYg
b3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgTE9HRk9OVCYgZm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBB
dG9tU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNl
TmFtZSwgTEZfRkFDRVNJWkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5h
bWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0cjxG
b250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1l
KTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5
TmFtZTsKQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbgogCiBSZWY8
Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOwogCiAgICAgaWYgKCFmYWxsYmFja0ZvbnRO
YW1lLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CkBAIC0zODQsMTIgKzM4NCwxMiBAQCBSZWY8
Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aQogICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWlu
c3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCiAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVh
c3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNv
ZGVfdHlwZWZhY2VzCiAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5j
ZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxi
YWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNy
b3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAg
ICAgICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgU3RyaW5nKCJUaW1l
cyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3Ry
aW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpCiAgICAgfTsKICAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsr
aSkgewpAQCAtNTEyLDcgKzUxMiw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgbWF0Y2hJbXByb3Zp
bmdFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBjYW5kaWRhdGUsIENPTlNUIFRFWFRNCiAgICAgcmV0
dXJuIDE7CiB9CiAKLXN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0YWxp
YywgaW50IHNpemUsIGJvb2wgc3ludGhlc2l6ZUl0YWxpYykKK3N0YXRpYyBHRElPYmplY3Q8SEZP
TlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdo
dCwgYm9vbCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQog
ewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAgLTU3MCwxMiArNTcwLDEyIEBAIHN0YXRpYyBHRElP
YmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05H
IGRlc2lyZWRXZWlnCiB9CiAKIHN0cnVjdCBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHsKLSAgICBU
cmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCisgICAg
VHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgICAg
IDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCiAgICAgewogICAgIH0KIAotICAgIGNvbnN0IEF0
b21TdHJpbmcmIG1fZmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcmIG1fZmFtaWx5TmFtZTsK
ICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CiB9
OwogCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWls
eUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVQKICAgICByZXR1
cm4gMTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6
Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFt
aWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7
CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNjQ2LDcgKzY0Niw3IEBAIFZlY3RvcjxGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXNJbkZhbWlsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKIHsKICAgICBib29sIGlzTHVjaWRhR3JhbmRl
ID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIp
OwogCkBAIC02OTIsMTEgKzY5Miw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRh
PiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFs
dGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFs
PEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFk
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJNaWNy
b3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQog
ICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIC8vIE9uIFdpbmRvd3MsIHdl
IGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBz
dXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVy
bmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2VyaWYsCkBAIC03MDUsNyArNzAyLDcgQEAg
Y29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBs
YXRmb3JtcyB0b28uCiAgICAgY2FzZSA4OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4g
dGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAiVGltZXMgTmV3IFJvbWFuIl9zOwog
ICAgICAgICBicmVhazsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJpdG1h
cCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBUaHVz
IHdlIGFsbG93IE1pY3Jvc29mdCBTYW5zIFNlcmlmIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUg
Yml0bWFwIGZvbnQgTVMgU2FucyBTZXJpZiwKQEAgLTcxNCwxMCArNzExLDEwIEBAIGNvbnN0IEF0
b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMg
dG9vLgogICAgIGNhc2UgMTM6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHlOYW1lLCAibXMgc2FucyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIG1p
Y3Jvc29mdFNhbnNTZXJpZjsKKyAgICAgICAgICAgIHJldHVybiAiTWljcm9zb2Z0IFNhbnMgU2Vy
aWYiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1MDNj
NjI0ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJkNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0yNiw3
ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNCaWRp
Q29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4geworc3Ry
dWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
YW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKICAg
ICB2b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0ZDEuLjVh
OGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNh
ZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCaWRpRW1iZWRk
aW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVzZWQgdG8g
a2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQgOiBw
dWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hhciBs
ZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVkZGlu
Z1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7
CiAK
</data>
<flag name="commit-queue"
          id="442845"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423476</attachid>
            <date>2021-03-17 05:34:05 -0700</date>
            <delta_ts>2021-03-17 07:50:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210317123404.patch</filename>
            <type>text/plain</type>
            <size>57930</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uY2Q1NWY4YmVhYTIwZWQxNDA3YTliM2UwOTI3NmU2
YWFjOGY4OWRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFuZ2VzCisgICAgICAgICAgICBhbmQgcmVtb3Zl
IENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxvbmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERvbid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQK
KyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5nIGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgcmVh
ZC93cml0ZS4gTWVtYmVycyB0aGF0CisgICAgICAgICAgICBhcmUgb25seSBzZXQgb25jZSBtYWlu
dGFpbiBsb2NrLWZyZWUgcmVhZHMgKGlzRml4ZWRQaXRjaCBhbmQKKyAgICAgICAgICAgIHByaW1h
cnlGb250KS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oOiBNYWtlIFRocmVhZFNhZmVSZWZDb3VudGVkCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAg
ICAgICAgICAgIEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAg
IEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvQmlkaUNvbnRleHQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEw
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5i
NmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0Vp
dGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRh
ZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZv
bnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVz
ZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3
MmI0NmYwY2M5MDk2ZC4uYmQ3NDFkMTQxNWVjY2ZjYmQ0MjZlMzNkNDM3YWYyZDRhOWEyMWNlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBA
IC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxv
Y2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAg
Rm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENh
Y2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApA
QCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoKSB7IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAg
ICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2Zh
bWlseShmYW1pbHkpCisgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQog
ICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNl
RmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNh
cGFiaWxpdGllcyhmb250RmFjZUNhcGFiaWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3Jp
cHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7
CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsK
QEAgLTE0NywzMyArMTM4LDI1IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSgpCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1T
cGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1l
KTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYg
KGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAg
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJp
YWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4g
IkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47
CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3Owor
ICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAg
ICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAg
ICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMg
YWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE2NiwyOSBAQCBjb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4K
ICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsK
KyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVz
OworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
Rm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRM
b2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2lu
ZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2Ug
ZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBX
aW5kb3dzIGZlYXR1cmUuCiAgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0
aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNz
ZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRv
bVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICBjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFz
c2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KKyAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IFN0
cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKICNlbHNlCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjgsOSArMjA3LDggQEAgRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRl
TmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBhIGZvbnQuICBX
ZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMs
CiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBO
ZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5hbWUu
Ci0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRl
RmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICghYWx0ZXJuYXRlTmFtZS5p
c051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9y
bURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVz
Y3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRl
cm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXV0byogZm9u
dFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtl
eSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhh
dmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUg
Y2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAgICAgICAgaXQg
PSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0zMTIsOCArMjkwLDEwIEBA
IGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgdW5z
aWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBjb25z
dCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAz
MDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA1LDggQEAgUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAg
IAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGF1dG8gYWRkUmVz
dWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJl0gewogICAgICAgICBy
ZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7CkBAIC0zNDAsNiArMzE4
LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0
aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwog
ICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2lu
Z2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5zaWduZWQgaW5hY3RpdmVG
b250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCkBAIC0zNTcsMTUg
KzMzNywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQo
KQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdl
Q291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgTE9H
KEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoJXUpIiwgcHVyZ2VDb3Vu
dCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgp
OwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotCiAg
ICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJlZjxGb250PiwgMjA+IGZv
bnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFs
dWVzKCkpIHsKQEAgLTQzNyw3ICs0MTUsNyBAQCBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBt
YWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJgogICAg
IHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsKICAgICBr
ZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAgIGtleS5mYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworICAgICAgICBr
ZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpLnN0cmlu
ZygpLmlzb2xhdGVkQ29weSgpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0
b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JW
ZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAg
IHJldHVybiBrZXk7CkBAIC00OTcsNiArNDc1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZv
bnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IK
IAogdm9pZCBGb250Q2FjaGU6OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250Q2FzY2FkZSwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZv
bnRzKHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24o
KSwgV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0ODYsOCBAQCBzaXpl
X3QgRm9udENhY2hlOjpmb250Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZv
bnRDb3VudCgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQg
OiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYo
KSkKQEAgLTUyMiw2ICs1MDAsOCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0Ns
aWVudHM7CiAKIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQp
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgaWYgKCFnQ2xp
ZW50cykKICAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0b3IqPjsKIApA
QCAtNTMxLDYgKzUxMSw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9y
JiBjbGllbnQpCiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJiBj
bGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgQVNT
RVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsK
IApAQCAtNTQxLDExICs1MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdHZW5lcmF0aW9u
ID0gMDsKIAogdW5zaWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247
CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKSB7CiAgICAgICAgIEFTU0VS
VChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CkBA
IC01ODUsNyArNTcxLDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29uc3QgUHJld2FybUlu
Zm9ybWF0aW9uJikKIHsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYpCitSZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJp
bmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4MmQ4ZmNiNTc4
YzMxMjNkNTdmZjJlLi40YWUwYzdkNjU0ZjMyZWFhMTVlM2Q3ZWRhZWY1MTkxNzgwNmY4MmU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzMs
MTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkgewogICAgICAg
ICA6IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQogICAgICAgICAsIG1f
Zm9udFNlbGVjdGlvblJlcXVlc3QoZGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKSkK
ICAgICAgICAgLCBtX2ZsYWdzKG1ha2VGbGFnc0tleShkZXNjcmlwdGlvbikpCi0gICAgICAgICwg
bV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkpCisgICAgICAgICwgbV9sb2Nh
bGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkuc3RyaW5nKCkpCiAgICAgICAgICwgbV9m
ZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwg
bV92YXJpYXRpb25TZXR0aW5ncyhkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5ncygpKQogICAg
IHsgfQpAQCAtMTU3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplIHsg
MCB9OwogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7CiAg
ICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19OwotICAgIEF0b21T
dHJpbmcgbV9sb2NhbGU7CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRGZWF0dXJlU2V0
dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFy
aWF0aW9uU2V0dGluZ3M7CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBGb250RGVzY3Jp
cHRpb25LZXlIYXNoIHsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewogICAgIEZvbnRE
ZXNjcmlwdGlvbktleSBmb250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRoIHRoZSBsb3dl
ciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZlY3RvcjxBdG9t
U3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1pbGllczsKICAg
ICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJz
aW9uOwogfTsKQEAgLTIyNCwxMiArMjI1LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3RvciBjYW4gaGF2ZSBhIHVuaWZpZWQgbm90aW9u
IG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZvbnQtZmFjZS4KICAgICAvLyBJdCBjb21lcyBp
bnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2ggc2hhcmVzIGEgZmFt
aWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KLSAgICBWZWN0b3I8Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWls
eShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKIAogICAgIHZvaWQg
YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KEZvbnRTZWxl
Y3RvciYpOwpAQCAtMjQ3LDcgKzI0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyV2lkdGhD
YWNoZXMoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBSZWZQdHI8Rm9udD4gZm9udEZyb21E
ZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9O
VCYsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9u
dEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
TE9HRk9OVCYsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0yODMsMTUgKzI4NCwxNyBAQCBwcml2YXRlOgogICAg
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogCiAgICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCi0gICAgRm9u
dFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsg
fSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAotICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
KTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsK
KworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOwogICAgIAogICAg
IGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2Ug
fTsKIApAQCAtMzA5LDcgKzMxMiw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhRm9y
VGVzdGluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5KQogewotICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5LCBudWxscHRyLCB7IH0pOworICAgIHJldHVybiBjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LnN0cmluZygpLCBudWxscHRy
LCB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNj
cmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5MjQ4MDQzZmE3
NDY0YWRjLi5iMzhjYWVmYzU1MWM4YmIxY2ViN2M5OTE1YWI0Y2FjN2JlODY3OTIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDMwICsxMDEsMjAgQEAgYm9vbCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjpmYW1pbGllc0VxdWFsRm9yVGV4dEF1dG9TaXppbmcoY29uc3QgRm9udENhc2Nh
ZGVEZXMKIAogI2VuZGlmIC8vIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAKLWJvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkxLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkyKQorYm9vbCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IFN0cmluZyYgZmFtaWx5MSwgY29uc3Qg
U3RyaW5nJiBmYW1pbHkyKQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChmYW1pbHkx
LnN0YXJ0c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5MjsKLSNl
bmRpZgorICAgIGlmIChmYW1pbHkxLmlzTnVsbCgpIHx8IGZhbWlseTIuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpl
cXVhbChmYW1pbHkxLCBmYW1pbHkyKTsKIH0KIAotdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQordW5zaWduZWQg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJiBmYW1p
bHkpCiB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcu
JykpCi0gICAgICAgIHJldHVybiBmYW1pbHkuZXhpc3RpbmdIYXNoKCk7Ci0jZW5kaWYKICAgICBy
ZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpoYXNoKGZhbWlseSk7CiB9CiAKIFN0cmlu
ZyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYg
ZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0
aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5OwotI2VuZGlmCiAgICAgcmV0dXJuIGZhbWls
eS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKaW5kZXgg
MGE3ZGYyNTI4ZGFjNjJhOGM1YTg5MGJkMmRmYTQzMGEyMTRkZDdmNi4uMzc5Y2FkN2ZkNThlZDFm
N2QyZjAxNThhNmQzMWE4OTFiYzA2M2JkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaApAQCAtNTcsOCAr
NTcsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5QXQodW5zaWduZWQg
aSkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllc1tpXTsgfQogICAgIGNvbnN0IFJlZkNvdW50ZWRB
cnJheTxBdG9tU3RyaW5nPiYgZmFtaWxpZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9
CiAKLSAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcm
LCBjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNo
KGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFs
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1p
bHlOYW1lSGFzaChjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgU3RyaW5nIGZvbGRlZEZhbWls
eU5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICB1bnNpZ25lZCBlZmZlY3RpdmVGYW1pbHlDb3Vu
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZUZvbnRzLmNwcAppbmRleCAyZGRkNmJkZjE5NDM4NDE3YWRlYTcxMTI0N2QyMTc2
ZDU3NjM1MjM0Li5hMTI0MmIyODZkM2M3Mzc4NjAzZDk5Njk4NmRhNDk5ZjQ3ZTg2NDJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmNwcApAQCAtMTI5LDYgKzEyOSw3IEBAIHZvaWQgRm9udENhc2NhZGVGb250czo6ZGV0ZXJt
aW5lUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiAKIGJv
b2wgRm9udENhc2NhZGVGb250czo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogeworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb3IgKGF1dG8mIGZvbnRSYW5n
ZXMgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMpIHsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMu
aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3MSwxNiArMTcyLDIx
IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotY29uc3Qg
Rm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQor
Y29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGlu
ZGV4LCBib29sIGxvY2tIZWxkKQogewogICAgIGlmIChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNb
aW5kZXhdOwogCisgICAgLy8gQ2hlY2sgYWdhaW4gd2l0aCBsb2NrIGhlbGQuIFRoaXMgYWxsb3dz
IHVzIHRvIGhhdmUgYSBsb2NrLWxlc3MgZmFzdCBwYXRoIGluIHRoZSBjb21tb24gY2FzZSB0aGF0
CisgICAgLy8gdGhpcyBmYWxsYmFjayByYW5nZSBoYXMgYWxyZWFkeSBiZWVuIHJlYWxpemVkIHdp
dGhvdXQgaW50cm9kdWNpbmcgYSByYWNlIGNvbmRpdGlvbi4KKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrSWYobV9sb2NrLCAhbG9ja0hlbGQpOworICAgIGlmICghbG9ja0hlbGQgJiYgaW5kZXgg
PCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKKwogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0
b24oKS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxs
YmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0g
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBG
b250UmFuZ2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSBy
ZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTk0LDI4IEBAIGNvbnN0IEZv
bnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0
IEZvbnRDYXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3It
PmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAg
ICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9u
dFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVz
Y3JpcHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgfQotCi0gICAgaWYg
KG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWls
eUNvdW50KCkpCi0gICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2Ny
aXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4
IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSkKKyAgICAgICAgICAgIGZvbnRS
YW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZh
bGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9yLmdldCgpKTsKIAotICAgIGlmIChmb250UmFuZ2Vz
LmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VSVChtX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7
CisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Cisg
ICAgICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0
aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOwogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxl
Y3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlw
dGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCA9PSBtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmb250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleDsKLSAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3It
PmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7
CisgICAgICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQo
KTsKKyAgICAgICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1fZm9udFNl
bGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKyttX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRS
YW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2Vs
ZWN0b3JGYWxsYmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gZm9udFJhbmdlczsKKyAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBw
ZW5kKFdURk1vdmUoZm9udFJhbmdlcykpOworICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tS
YW5nZXMubGFzdCgpOworfQorCitjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHJlYWxpemVGYWxsYmFja1Jh
bmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFy
MzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzM0LDEwIEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFy
YWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250KiBmaW5kQmVzdEZh
bGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0ZXIpCitjb25z
dCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5kQmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0ZXIpCiB7CiAg
ICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgOyArK2ZhbGxiYWNrSW5kZXgpIHsK
LSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZvbnRDYXNjYWRlRm9udHMucmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAgICBhdXRvJiBm
b250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNr
SW5kZXgsIHRydWUpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9udCA9IGZvbnRSYW5nZXMuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5
OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM1MywxMCBAQCBzdGF0aWMgY29uc3QgRm9udCog
ZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250cywg
Y29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVtRmFs
bGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hvdWxk
QmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9udCA9IGZpbmRCZXN0RmFsbGJhY2tG
b250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKKyAgICBjb25zdCBGb250KiBmb250
ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CiAKICAgICBp
ZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAsIHRydWUpLmZvbnRGb3JGaXJzdFJhbmdlKCk7
CiAKICAgICBhdXRvIHN5c3RlbUZhbGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9u
dEZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250
ID8gSXNGb3JQbGF0Zm9ybUZvbnQ6OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAg
aWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnQpCkBAIC00MDIsNyArNDEzLDcgQEAgR2x5cGhEYXRhIEZv
bnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIGNv
bnN0IEZvbnRDYXMKICAgICBHbHlwaERhdGEgbG9hZGluZ1Jlc3VsdDsKICAgICBvcHBvcnR1bmlz
dGljYWxseVN0YXJ0Rm9udERhdGFVUkxMb2FkaW5nKGRlc2NyaXB0aW9uLCBtX2ZvbnRTZWxlY3Rv
ci5nZXQoKSk7CiAgICAgZm9yICg7IDsgKytmYWxsYmFja0luZGV4KSB7Ci0gICAgICAgIGF1dG8m
IGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJh
Y2tJbmRleCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCwgdHJ1ZSk7CiAgICAgICAgIGlmIChmb250
UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTQ4OCw3ICs0OTksNiBA
QCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXModW5zaWdu
ZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRvVmFyaWFudCk7CiAKICAg
ICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQpAQCAtNDk2LDExICs1MDYsMTIgQEAgR2x5
cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IGNvbnN0IEZvbnRDYXNjYWRlRGUKIAogICAgIGNvbnN0IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBH
bHlwaFBhZ2U6OnBhZ2VOdW1iZXJGb3JDb2RlUG9pbnQoYyk7CiAKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgYXV0byYgY2FjaGVFbnRyeSA9IHBhZ2VOdW1iZXIgPyBt
X2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBHbHlwaFBhZ2VDYWNoZUVudHJ5KCkpLml0ZXJh
dG9yLT52YWx1ZSA6IG1fY2FjaGVkUGFnZVplcm87CiAKICAgICAvLyBJbml0aWFsaXplIGNhY2hl
IHdpdGggYSBmdWxsIHBhZ2Ugb2YgZ2x5cGggbWFwcGluZ3MgZnJvbSBhIHNpbmdsZSBmb250Lgog
ICAgIGlmIChjYWNoZUVudHJ5LmlzTnVsbCgpKQotICAgICAgICBjYWNoZUVudHJ5LnNldFNpbmds
ZUZvbnRQYWdlKGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKSkpOworICAgICAgICBjYWNoZUVudHJ5LnNldFNp
bmdsZUZvbnRQYWdlKGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVG
YWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwLCB0cnVlKSkpOwogCiAgICAgR2x5cGhEYXRh
IGdseXBoRGF0YSA9IGNhY2hlRW50cnkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwogICAgIGlm
ICghZ2x5cGhEYXRhLmdseXBoKSB7CkBAIC01MTYsNiArNTI3LDcgQEAgR2x5cGhEYXRhIEZvbnRD
YXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRD
YXNjYWRlRGUKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3RlbUZhbGxiYWNrcygp
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmIChtX3N5c3Rl
bUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBNdXRh
YmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9udHMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKaW5kZXgg
NDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4uNjVmMmQ4YjA3NDFhNjQ3
YmRiNzUyYTFlN2Q3MzhiMzJhNThlM2JlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtMjcsNiArMjcsNyBAQAogI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC00Myw3ICs0NCw3IEBAIGNs
YXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAKIERFQ0xBUkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwotY2xhc3MgRm9udENh
c2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKK2NsYXNz
IEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udENhc2Nh
ZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYXNjYWRlRm9udHMpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNj
YWRlRm9udHMpOwogcHVibGljOgpAQCAtNzgsOSArNzksMTIgQEAgcHJpdmF0ZToKICAgICBGb250
Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogICAgIEZvbnRDYXNjYWRlRm9u
dHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCisgICAgY29uc3QgRm9udCogZmluZEJlc3RG
YWxsYmFja0ZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFVDaGFyMzIpOwogICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyLCBjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIGJvb2wgc3lzdGVtRmFsbGJhY2tTaG91
bGRCZUludmlzaWJsZSk7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZhcmlhbnQoVUNoYXIz
MiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50LCB1bnNpZ25lZCBm
YWxsYmFja0luZGV4ID0gMCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2Vz
JiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCwgYm9vbCBsb2NrSGVsZCk7CisKICAgICBWZWN0b3I8Rm9u
dFJhbmdlcywgMT4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOwogICAgIHVuc2lnbmVkIG1fbGFz
dFJlYWxpemVkRmFsbGJhY2tJbmRleCB7IDAgfTsKIApAQCAtMTE0LDYgKzExOCw3IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0Y2gg
eyBVbmtub3duUGl0Y2ggfTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9
OworICAgIG11dGFibGUgTG9jayBtX2xvY2s7CiB9OwogCiBpbmxpbmUgYm9vbCBGb250Q2FzY2Fk
ZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pCkBAIC0xMjUsMTUgKzEzMCwxOCBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRz
Ojppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcAogCiBp
bmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAgICAgcmV0dXJuICpt
X2NhY2hlZFByaW1hcnlGb250OworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewotICAgICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOworICAgICAg
ICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRp
b24sIDAsIHRydWUpOwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdl
cy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xp
Y3k6OkFsbG93KS5mb250OwogICAgICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpCiAgICAg
ICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gJnByaW1hcnlSYW5nZXMuZm9udEZvckZpcnN0
UmFuZ2UoKTsKICAgICAgICAgZWxzZSBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udC0+aXNJbnRlcnN0
aXRpYWwoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDE7IDsgKytpbmRl
eCkgewotICAgICAgICAgICAgICAgIGF1dG8mIGxvY2FsUmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KTsKKyAgICAgICAgICAgICAgICBhdXRvJiBsb2Nh
bFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGxvY2FsUmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBhdXRvKiBmb250ID0gbG9jYWxSYW5n
ZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9s
aWN5OjpGb3JiaWQpLmZvbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRTZWxlY3Rvci5oCmluZGV4IGFjOWMxNjk2ZDE0MzdmYzU0ODFhYTYzOTgwYjYxMDA2ZDg1
YzJmNTAuLjFmMWZkYmIwZjFlNmE1MGE0MmY1MDQ0ZTkyMjA4MTdkZWIyYzBlODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw3
ICsyNyw3IEBACiAKICNpbmNsdWRlICJGb250UmFuZ2VzLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQzLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCA9IDA7CiB9Owog
Ci1jbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsK
K2NsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250U2Vs
ZWN0b3I+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSA9IGRlZmF1bHQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKaW5kZXgg
Y2QwZGNkNDZmZWFiMmIxYmQ3ZmE3ZmUxZWVhMmY4ZDdjMzgyNzczMy4uOGNmOWNkYWNmYjdhYjRl
MGY4MTExNjkzYmQ1NmZhY2Y1Y2QxOTVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhQYWdlLmgKQEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1ZGUgIkdseXBo
LmgiCiAjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVj
dCBHbHlwaERhdGEgewogLy8gQSBHbHlwaFBhZ2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBv
ZiBHbHlwaERhdGEgbWFwcGluZ3MgZm9yIGEgY29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFj
dGVycyBpbiB0aGUgVW5pY29kZSBjb2RlIHNwYWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAv
LyBzdGFydGluZyBmcm9tIDAgYW5kIGluY3JlbWVudGluZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVy
IG9mIGdseXBocy4KLWNsYXNzIEdseXBoUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFn
ZT4geworY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdseXBo
UGFnZT4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R2x5cGhQYWdlPiBjcmVhdGUoY29uc3Qg
Rm9udCYgZm9udCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggZmE3N2IzOTk3
N2RiOTc4YTA1OTcxYjZjMjVjNDFmMzcyZGU1MjRiMS4uZTZmNTdjYzkzMWU3ZTk3NTU0ZWI1NWM0
OTU2NDIzNGUxODBhZjkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtNjE5LDcgKzYx
OSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVm
IG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwgQ1RGb250R2V0U2l6ZShvcmln
aW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7CiB9CiAKLVJlZlB0cjxGb250
PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNp
bWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmlu
ZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250
IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAg
Ly8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1l
IHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgpAQCAtNjI4LDI3ICs2MjgsMjEg
QEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93
biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwg
Y291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShm
YW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHks
ICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgImNv
dXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRl
LgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEg
Z3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVy
ZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXJhYmljIikpOwogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhNQUtFX1NUQVRJQ19TVFJJTkdf
SU1QTCgiUGFzaHRvIikpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUo
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUiKSk7CiAgICAgc3RhdGljIFN0cmluZyogbWF0
Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkg
fTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
Z2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwogICAgIGZvciAoU3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7CiAgICAgICAg
IGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgqbWF0Y2hXb3JkKSkKLSAgICAg
ICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgICAg
ICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gIkdlZXphUHJvLUJvbGQiX3MgOiAiR2VlemFQcm8iX3Mp
OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEwODksMTAgKzEwODMsMTAgQEAg
c3RhdGljIGNvbnN0IEZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udCogZmluZENsb3Nlc3RGb250
KGNvbnN0IEZvbnREYXRhYmFzZTo6SW4KICAgICByZXR1cm4gJmZhbWlseUZvbnRzLmluc3RhbGxl
ZEZvbnRzW2luZGV4XTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZv
bnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6
Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7
CiAgICAgYXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dp
bmdVc2VySW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dp
bmdVc2VySW5zdGFsbGVkRm9udHMoKTsKLSAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRh
YmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUuc3RyaW5nKCkpOworICAgIGNvbnN0
IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFt
ZSk7CiAgICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAt
MTEwOCwxMCArMTEwMiwxMCBAQCBzdHJ1Y3QgRm9udExvb2t1cCB7CiAgICAgYm9vbCBjcmVhdGVk
RnJvbVBvc3RTY3JpcHROYW1lIHsgZmFsc2UgfTsKIH07CiAKLXN0YXRpYyBGb250TG9va3VwIHBs
YXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250
U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRG
b250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBGb250TG9va3VwIHBsYXRmb3Jt
Rm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGNvbnN0IGF1dG8mIGFsbG93bGlzdCA9IGZvbnRB
bGxvd2xpc3QoKTsKLSAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkuc3RyaW5nKCkpICYmIGFs
bG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQorICAgIGlmICgh
aXNTeXN0ZW1Gb250KGZhbWlseSkgJiYgYWxsb3dsaXN0LnNpemUoKSAmJiAhYWxsb3dsaXN0LmNv
bnRhaW5zKGZhbWlseSkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKIAogICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICIuYXBwbGVzeXN0ZW11aWZvbnRz
ZXJpZiIpCkBAIC0xMTIzLDcgKzExMTcsNyBAQCBzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZv
bnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbAogICAg
IH0KIAogICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFs
bG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2Fs
bG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZmFtaWx5Rm9udHMg
PSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkuc3RyaW5nKCkpOworICAg
IGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1p
bHkoZmFtaWx5KTsKICAgICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8v
IFRoZSBDU1Mgc3BlYyBzdGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5IGFjY2VwdHMgYSBuYW1l
IG9mIGFuIGFjdHVhbCBmb250IGZhbWlseS4gSG93ZXZlciwgaW4gV2ViS2l0LCB3ZSBjbGFpbSB0
byBhbHNvCiAgICAgICAgIC8vIHN1cHBvcnQgc3VwcGx5aW5nIGEgUG9zdFNjcmlwdCBuYW1lIGlu
c3RlYWQuIEhvd2V2ZXIsIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVuIHRoZSBvdGhlciBwcm9w
ZXJ0aWVzIChmb250LXdlaWdodCwKQEAgLTExNzcsNyArMTE3MSw3IEBAIHN0YXRpYyB2b2lkIGlu
dmFsaWRhdGVGb250Q2FjaGUoKQogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuaW52YWxpZGF0
ZSgpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVj
aWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0
aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50
IGluIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KCkgaW4gRm9udERl
c2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgT3B0aW9uYWw8U3lzdGVtRm9udEtpbmQ+IHN5c3RlbURl
c2lnbjsKQEAgLTEyMDYsNyArMTIwMCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBm
b250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwKICAgICBp
ZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIlVJQ1RGb250VGV4dFN0eWxlIikpIHsKICAgICAgICAgY29u
c3QgYXV0byYgcmVxdWVzdCA9IGZvbnREZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVzdCgp
OwogICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSAoaXNGb250V2VpZ2h0Qm9s
ZChyZXF1ZXN0LndlaWdodCkgfHwgRm9udENhY2hlOjpzaW5nbGV0b24oKS5zaG91bGRNb2NrQm9s
ZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPyBrQ1RGb250VHJhaXRCb2xkIDogMCkgfCAo
aXNJdGFsaWMocmVxdWVzdC5zbG9wZSkgPyBrQ1RGb250VHJhaXRJdGFsaWMgOiAwKTsKLSAgICAg
ICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRl
eHRTdHlsZShmYW1pbHkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhl
bWVDb2NvYTo6c2luZ2xldG9uKCkuY29udGVudFNpemVDYXRlZ29yeSgpLCBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRMb2NhbGUoKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7Cisg
ICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdp
dGhUZXh0U3R5bGUoZmFtaWx5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29j
b2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgICAg
ICBpZiAodHJhaXRzKQogICAgICAgICAgICAgZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZUNvcHlXaXRoU3ltYm9saWNUcmFpdHMoZGVzY3JpcHRvci5nZXQoKSwgdHJh
aXRzLCB0cmFpdHMpKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250
cyhkZXNjcmlwdG9yLmdldCgpLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CkBAIC0x
MjQwLDcgKzEyMzQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1p
bHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9hdCBz
aXplKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKIHsK
ICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MjgzLDcgKzEyNzcsNyBAQCBzdGF0aWMgdm9pZCBhdXRvQWN0aXZhdGVGb250KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgQ0dGbG9hdCBzaXplKQogfQogI2VuZGlmCiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250
UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVl
X3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogewogICAg
IGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKIApAQCAt
MTI5Niw3ICsxMjkwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKIAogICAgICAgICAvLyBB
dXRvIGFjdGl2YXRlIHRoZSBmb250IGJlZm9yZSBsb29raW5nIGZvciBpdCBhIHNlY29uZCB0aW1l
LgogICAgICAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIG91
ciBvd24gYWxnb3JpdGhtIHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZvbnQuCi0gICAgICAgIGF1dG9B
Y3RpdmF0ZUZvbnQoZmFtaWx5LnN0cmluZygpLCBzaXplKTsKKyAgICAgICAgYXV0b0FjdGl2YXRl
Rm9udChmYW1pbHksIHNpemUpOwogCiAgICAgICAgIGZvbnQgPSBmb250V2l0aEZhbWlseShmYW1p
bHksIGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIHNpemUpOwogICAgIH0KQEAgLTE0MjgsNyArMTQyMiw3IEBAIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9
CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+
IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFt
aWx5TmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsgMHg5
ZWQxLCAweDRmNTMgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10gPSB7
IDB4NWI4YiwgMHg0ZjUzIH07CkBAIC0xNDM2LDEwICsxNDMwLDEwIEBAIGNvbnN0IEF0b21TdHJp
bmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlsCiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1tdID0g
eyAweDVmYWUsIDB4OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3QgVUNo
YXIgd2VpcnVhblpoZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2Mywg
MHg5ZWQxLCAweDlhZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbVN0cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21TdHJpbmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0
cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEFTQ0lJTGl0ZXJhbCBzb25ndGlTQyA9ICJTb25ndGkgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpVEMgPSAiU29uZ3RpIFRDIl9zOworICAgIHN0YXRpYyBj
b25zdGV4cHIgQVNDSUlMaXRlcmFsIGhlaXRpU0NSZXBsYWNlbWVudCA9ICJQaW5nRmFuZyBTQyJf
czsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVRDUmVwbGFjZW1lbnQg
PSAiUGluZ0ZhbmcgVEMiX3M7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsK
ICAgICBjYXNlIDI6CkBAIC0xNDc0LDcgKzE0NjgsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250
Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRG
b250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQpAQCAtMTU0Nyw3ICsxNTQxLDcgQEAgUmVm
PEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0
ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cg
d2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdp
dGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBBdG9tU3RyaW5nKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWls
eShmb250RGVzY3JpcHRpb24sICJUaW1lcyJfcykpCiAgICAgICAgIHJldHVybiAqcmVzdWx0Owog
CiAgICAgLy8gTGFzdFJlc29ydCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29y
ZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmgKaW5kZXggOWFiYTg5ZjIxMzcwNzJkNDNhOGY4OThhZGRkMThkYWQ2MjQ5MDM5
NS4uZTg3Yjk2MTdlZGY5MDI0YjQwZDA3YzgxMTgwZmJkMDA0Y2YxM2Y3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5oCkBAIC02Miw3ICs2Miw3IEBAIHR5cGVkZWYgSGFzaE1hcDxGb250VGFnLCBWYXJp
YXRpb25EZWZhdWx0cywgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUCiBSZXRh
aW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJl
cywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGll
cywgYm9vbCBhcHBseVdlaWdodFdpZHRoU2xvcGVWYXJpYXRpb25zID0gdHJ1ZSk7CiBlbnVtIGNs
YXNzIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA6IGJvb2wgeyBObywgWWVzIH07CiBTeW50
aGVzaXNQYWlyIGNvbXB1dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVmLCBjb25zdCBGb250
RGVzY3JpcHRpb24mLCBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgPSBTaG91bGRDb21wdXRl
UGh5c2ljYWxUcmFpdHM6Ok5vLCBib29sIGlzUGxhdGZvcm1Gb250ID0gZmFsc2UpOwotUmV0YWlu
UHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQgc2l6
ZSk7CitSZXRhaW5QdHI8Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZs
b2F0IHNpemUpOwogRm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXNGb3JGb250
RGVzY3JpcHRvcihDVEZvbnREZXNjcmlwdG9yUmVmKTsKIHZvaWQgYWRkQXR0cmlidXRlc0Zvcklu
c3RhbGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpOwogUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3Rh
bGxlZEZvbnRzKENURm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQz
MTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLmZmYjA0MTA3MTBiZjIwMTc2NzJmY2Rj
MDY4MTI1ZGFhOGRjYjU5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMx
OSwyNSArMzE5LDI0IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2Fu
dCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJl
dmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRz
IG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBB
dG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9
IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCisgICAgaWYgKFJlZlB0
cjxGb250PiBmb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sICJzZXJpZiJfcykp
CiAgICAgICAgIHJldHVybiAqZm9udDsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBk
dWUgdG8gaW1wcm9wZXJseS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0
aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJ
bkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0
b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1l
U3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5n
IGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewog
ICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1t
b25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5h
bWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBp
ZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAog
ICAgIGlmIChmYW1pbHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5
KQogICAgICAgICByZXR1cm4gInNlcmlmIjsKQEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNDb21tb25seVVzZWRHZW5lcmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZVN0cmluZykKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5TmFtZVN0cmluZywgImN1cnNpdmUiKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMpCiB7CiAgICAgLy8gVGhlIENTUyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3
dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8g
c2F5cyB0aGF0IHdlIG11c3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNs
YW50IChpdGFsaWMgb3Igb2JsaXF1ZSBjYW4gYmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNv
bnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxs
QXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZj
OTYzODJmNjEzLi4wMzE2NmVkODAyZmI5NDM2OWMxOWRjYzVmODc1MTE2ZGQ5MTc0MTRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcApAQCAtMzYyLDkgKzM2Miw5IEBAIGJvb2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRG
b3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9u
dCwgQXRvbVN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hl
Ojpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5
TmFtZSkKIHsKLSAgICBBdG9tU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3Nu
bGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFt
ZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkp
OwogICAgIFJlZlB0cjxGb250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1p
bHlOYW1lID0gZmFtaWx5TmFtZTsKQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbgogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOwogCiAgICAgaWYg
KCFmYWxsYmFja0ZvbnROYW1lLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICpmb250
Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CkBAIC0zODQsMTIg
KzM4NCwxMiBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aQogICAgIC8vIFNlYXJjaCBhbGwgdHlw
aWNhbCBXaW5kb3dzLWluc3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCiAgICAgLy8gU29ydGVk
IGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCiAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcg
Um9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNo
YW5nZSBwcmVmcy4KLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMg
TmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBB
dG9tU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmlj
b2RlIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3Ry
aW5nKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAg
ICAgU3RyaW5nKCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwKKyAgICAgICAgU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCiAgICAgfTsKICAgICBSZWZQdHI8Rm9udD4gc2lt
cGxlRm9udDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFs
bGJhY2tGb250cyk7ICsraSkgewpAQCAtNTEyLDcgKzUxMiw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJB
Q0sgbWF0Y2hJbXByb3ZpbmdFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBjYW5kaWRhdGUsIENPTlNU
IFRFWFRNCiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0
ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJv
b2wgZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJvb2wgc3ludGhlc2l6ZUl0YWxpYykKK3N0YXRp
YyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgU3RyaW5nJiBmYW1pbHksIExP
TkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50
aGVzaXplSXRhbGljKQogewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAgLTU3MCwxMiArNTcwLDEy
IEBAIHN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnCiB9CiAKIHN0cnVjdCBUcmFpdHNJbkZhbWlseVBy
b2NEYXRhIHsKLSAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseU5hbWUpCisgICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBTdHJpbmcmIGZhbWls
eU5hbWUpCiAgICAgICAgIDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCiAgICAgewogICAgIH0K
IAotICAgIGNvbnN0IEF0b21TdHJpbmcmIG1fZmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcm
IG1fZmFtaWx5TmFtZTsKICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gbV9j
YXBhYmlsaXRpZXM7CiB9OwogCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGludCBDQUxMQkFD
SyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxvZ0ZvbnQsIENPTlNUIFRF
WFRNRVQKICAgICByZXR1cm4gMTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9y
PEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNjQ2LDcgKzY0Niw3IEBA
IFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKIHsKICAgICBib29s
IGlzTHVjaWRhR3JhbmRlID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAi
bHVjaWRhIGdyYW5kZSIpOwogCkBAIC02OTIsMTEgKzY5Miw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxG
b250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENh
Y2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGlt
ZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbWljcm9zb2Z0
U2Fuc1NlcmlmKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLQogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIC8v
IE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNv
bnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgVGltZXMgTmV3IFJv
bWFuIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2VyaWYsCkBAIC03
MDUsNyArNzAyLDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVk
IGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSA4OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNlcmlmIikpCi0gICAg
ICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAiVGltZXMg
TmV3IFJvbWFuIl9zOwogICAgICAgICBicmVhazsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24n
dCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9y
dC4KICAgICAvLyBUaHVzIHdlIGFsbG93IE1pY3Jvc29mdCBTYW5zIFNlcmlmIGFzIGFuIGFsdGVy
bmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2FucyBTZXJpZiwKQEAgLTcxNCwxMCArNzEx
LDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBv
dGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgMTM6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2FucyBzZXJpZiIpKQotICAgICAg
ICAgICAgcmV0dXJuIG1pY3Jvc29mdFNhbnNTZXJpZjsKKyAgICAgICAgICAgIHJldHVybiAiTWlj
cm9zb2Z0IFNhbnMgU2VyaWYiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4g
bnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2
NjE1NGJjMDRiZWE1MDNjNjI0ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQx
YmZiYTA3NmJkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRl
eHQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0
IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRp
Q29udGV4dD4geworc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAgICB1aW50MzJfdCBiaXRm
aWVsZHMgOiAxNjsKICAgICB2b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2
NzBkMzliZDM0ZDEuLjVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsy
MiwxNSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ZW51bSBCaWRpRW1iZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07
CiAKIC8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3Mg
QmlkaUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworY2xhc3MgQmlk
aUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUo
dW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxz
ZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFy
ZW50ID0gbnVsbHB0cik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423487</attachid>
            <date>2021-03-17 07:50:39 -0700</date>
            <delta_ts>2021-03-18 11:42:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210317145037.patch</filename>
            <type>text/plain</type>
            <size>57812</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uY2Q1NWY4YmVhYTIwZWQxNDA3YTliM2UwOTI3NmU2
YWFjOGY4OWRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURl
c2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFuZ2VzCisgICAgICAgICAgICBhbmQgcmVtb3Zl
IENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxvbmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERvbid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQK
KyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5nIGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgcmVh
ZC93cml0ZS4gTWVtYmVycyB0aGF0CisgICAgICAgICAgICBhcmUgb25seSBzZXQgb25jZSBtYWlu
dGFpbiBsb2NrLWZyZWUgcmVhZHMgKGlzRml4ZWRQaXRjaCBhbmQKKyAgICAgICAgICAgIHByaW1h
cnlGb250KS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oOiBNYWtlIFRocmVhZFNhZmVSZWZDb3VudGVkCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAg
ICAgICAgICAgIEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAg
IEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAg
ICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvQmlkaUNvbnRleHQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEw
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaAppbmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5i
NmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0Vp
dGhlclRhYmxlKENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRh
ZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZv
bnQpOwotY2xhc3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVz
ZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3
MmI0NmYwY2M5MDk2ZC4uYmQ3NDFkMTQxNWVjY2ZjYmQ0MjZlMzNkNDM3YWYyZDRhOWEyMWNlMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBA
IC00NiwxNSArNDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNp
bmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxv
Y2sgZm9udExvY2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAg
Rm9udENhY2hlJiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENh
Y2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApA
QCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoKSB7IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAg
ICAgICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2Zh
bWlseShmYW1pbHkpCisgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQog
ICAgICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNl
RmVhdHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNh
cGFiaWxpdGllcyhmb250RmFjZUNhcGFiaWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3Jp
cHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7
CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsK
QEAgLTE0NywzMyArMTM4LDI1IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSgpCiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1T
cGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1l
KTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYg
KGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAg
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJp
YWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4g
IkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47
CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3Owor
ICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAg
ICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAg
ICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMg
YWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE2NiwyOSBAQCBjb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4K
ICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsK
KyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
ZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVz
OworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAot
Rm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRM
b2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2lu
ZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2Ug
ZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBX
aW5kb3dzIGZlYXR1cmUuCiAgICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0
aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNz
ZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRv
bVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICBjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFz
c2VkRmFtaWx5TmFtZVswXSAhPSAnQCcpID8KKyAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IFN0
cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKICNlbHNlCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjgsOSArMjA3LDggQEAgRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm8KICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNoZWNraW5nQWx0ZXJuYXRl
TmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZmluZCBhIGZvbnQuICBX
ZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMgdG8gb3RoZXIgbmFtZXMs
CiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENvdXJpZXIvQ291cmllciBO
ZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRoZSBhbGlhc2VkIG5hbWUu
Ci0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRl
RmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICghYWx0ZXJuYXRlTmFtZS5p
c051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0Zm9y
bURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250RGVz
Y3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRl
cm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXV0byogZm9u
dFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtl
eSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhh
dmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUg
Y2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAgICAgICAgICAgICAgaXQg
PSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0zMTIsOCArMjkwLDEwIEBA
IGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogY29uc3QgdW5z
aWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7CiBjb25z
dCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAz
MDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5nQWx0
ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
ICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3B1cmdlVGltZXIu
c3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA1LDggQEAgUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAg
IAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGF1dG8gYWRkUmVz
dWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJl0gewogICAgICAgICBy
ZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7CkBAIC0zNDAsNiArMzE4
LDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250
UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0
aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwog
ICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2lu
Z2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5zaWduZWQgaW5hY3RpdmVG
b250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCkBAIC0zNTcsMTUg
KzMzNywxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQo
KQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdl
Q291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgTE9H
KEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoJXUpIiwgcHVyZ2VDb3Vu
dCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgp
OwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotCiAg
ICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJlZjxGb250PiwgMjA+IGZv
bnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFs
dWVzKCkpIHsKQEAgLTQzNyw3ICs0MTUsNyBAQCBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBt
YWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJgogICAg
IHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsKICAgICBr
ZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAgIGtleS5mYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworICAgICAgICBr
ZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpLnN0cmlu
ZygpLmlzb2xhdGVkQ29weSgpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0
b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JW
ZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAg
IHJldHVybiBrZXk7CkBAIC00OTcsNiArNDc1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZv
bnRDYWNoZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IK
IAogdm9pZCBGb250Q2FjaGU6OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250Q2FzY2FkZSwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZv
bnRzKHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24o
KSwgV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0ODYsOCBAQCBzaXpl
X3QgRm9udENhY2hlOjpmb250Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZv
bnRDb3VudCgpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9sb2NrKTsKKwogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQg
OiBjYWNoZWRGb250cygpLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYo
KSkKQEAgLTUyMiw2ICs1MDAsOCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0Ns
aWVudHM7CiAKIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQp
CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgaWYgKCFnQ2xp
ZW50cykKICAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250U2VsZWN0b3IqPjsKIApA
QCAtNTMxLDYgKzUxMSw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9y
JiBjbGllbnQpCiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJiBj
bGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgQVNT
RVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsK
IApAQCAtNTQxLDExICs1MjMsMTUgQEAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGdHZW5lcmF0aW9u
ID0gMDsKIAogdW5zaWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247
CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKSB7CiAgICAgICAgIEFTU0VS
VChmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CkBA
IC01ODUsNyArNTcxLDcgQEAgdm9pZCBGb250Q2FjaGU6OnByZXdhcm0oY29uc3QgUHJld2FybUlu
Zm9ybWF0aW9uJikKIHsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYpCitSZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJp
bmcmKQogewogICAgIHJldHVybiBudWxscHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4MmQ4ZmNiNTc4
YzMxMjNkNTdmZjJlLi40YWUwYzdkNjU0ZjMyZWFhMTVlM2Q3ZWRhZWY1MTkxNzgwNmY4MmU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzMs
MTIgKzMzLDEzIEBACiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CkBAIC03OSw3ICs4MCw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkgewogICAgICAg
ICA6IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQogICAgICAgICAsIG1f
Zm9udFNlbGVjdGlvblJlcXVlc3QoZGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKSkK
ICAgICAgICAgLCBtX2ZsYWdzKG1ha2VGbGFnc0tleShkZXNjcmlwdGlvbikpCi0gICAgICAgICwg
bV9sb2NhbGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkpCisgICAgICAgICwgbV9sb2Nh
bGUoZGVzY3JpcHRpb24uc3BlY2lmaWVkTG9jYWxlKCkuc3RyaW5nKCkpCiAgICAgICAgICwgbV9m
ZWF0dXJlU2V0dGluZ3MoZGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCkpCiAgICAgICAgICwg
bV92YXJpYXRpb25TZXR0aW5ncyhkZXNjcmlwdGlvbi52YXJpYXRpb25TZXR0aW5ncygpKQogICAg
IHsgfQpAQCAtMTU3LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplIHsg
MCB9OwogICAgIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IG1fZm9udFNlbGVjdGlvblJlcXVlc3Q7CiAg
ICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMj4gbV9mbGFncyB7eyAwLCAwIH19OwotICAgIEF0b21T
dHJpbmcgbV9sb2NhbGU7CisgICAgU3RyaW5nIG1fbG9jYWxlOwogICAgIEZvbnRGZWF0dXJlU2V0
dGluZ3MgbV9mZWF0dXJlU2V0dGluZ3M7CiAgICAgRm9udFZhcmlhdGlvblNldHRpbmdzIG1fdmFy
aWF0aW9uU2V0dGluZ3M7CiB9OwpAQCAtMTc4LDcgKzE3OSw3IEBAIHN0cnVjdCBGb250RGVzY3Jp
cHRpb25LZXlIYXNoIHsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkgewogICAgIEZvbnRE
ZXNjcmlwdGlvbktleSBmb250RGVzY3JpcHRpb25LZXk7IC8vIFNoYXJlZCB3aXRoIHRoZSBsb3dl
ciBsZXZlbCBGb250Q2FjaGUgKGNhY2hpbmcgRm9udCBvYmplY3RzKQotICAgIFZlY3RvcjxBdG9t
U3RyaW5nLCAzPiBmYW1pbGllczsKKyAgICBWZWN0b3I8U3RyaW5nLCAzPiBmYW1pbGllczsKICAg
ICB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJz
aW9uOwogfTsKQEAgLTIyNCwxMiArMjI1LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gZXhpc3RzIHNvIENTU0ZvbnRTZWxlY3RvciBjYW4gaGF2ZSBhIHVuaWZpZWQgbm90aW9u
IG9mIHByZWluc3RhbGxlZCBmb250cyBhbmQgQGZvbnQtZmFjZS4KICAgICAvLyBJdCBjb21lcyBp
bnRvIHBsYXkgd2hlbiB5b3UgY3JlYXRlIGFuIEBmb250LWZhY2Ugd2hpY2ggc2hhcmVzIGEgZmFt
aWx5IG5hbWUgYXMgYSBwcmVpbnN0YWxsZWQgZm9udC4KLSAgICBWZWN0b3I8Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CisgICAgVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWls
eShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFs
c2UpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gbGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBSZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSk7CisgICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKIAogICAgIHZvaWQg
YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KEZvbnRTZWxl
Y3RvciYpOwpAQCAtMjQ3LDcgKzI0OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyV2lkdGhD
YWNoZXMoKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBSZWZQdHI8Rm9udD4gZm9udEZyb21E
ZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgTE9HRk9O
VCYsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKKyAgICBSZWZQdHI8Rm9udD4gZm9u
dEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
TE9HRk9OVCYsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwogI2VuZGlmCiAKICNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCkBAIC0yODMsMTUgKzI4NCwxNyBAQCBwcml2YXRlOgogICAg
IFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogCiAgICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCi0gICAgRm9u
dFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJu
YXRlTmFtZSA9IGZhbHNlKTsKKyAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsg
fSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAKICAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRmb3JtLgotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwogICAgIAotICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
KTsKIAotICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKKyAgICBSZWN1cnNpdmVMb2NrIG1fbG9jazsK
KworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOwogICAgIAogICAg
IGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2Ug
fTsKIApAQCAtMzA5LDcgKzMxMiw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhRm9y
VGVzdGluZyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5KQogewotICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZv
bnREZXNjcmlwdGlvbiwgZmFtaWx5LCBudWxscHRyLCB7IH0pOworICAgIHJldHVybiBjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5LnN0cmluZygpLCBudWxscHRy
LCB7IH0pOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNj
cmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFhMDJjMzE5MjQ4MDQzZmE3
NDY0YWRjLi43ZDc2ZjJhZmZiODY2YWI4NGM5OWM4YWZiM2MxYWM0YjAzZGNiZGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDggKzEwMSwxMCBAQCBib29sIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhjb25zdCBGb250Q2FzY2Fk
ZURlcwogCiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykKIAotYm9vbCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseTEsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTIpCitib29sIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiBmYW1pbHkxLCBjb25zdCBT
dHJpbmcmIGZhbWlseTIpCiB7CisgICAgaWYgKGZhbWlseTEuaXNOdWxsKCkgfHwgZmFtaWx5Mi5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IGlmIChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0g
ZmFtaWx5MjsKQEAgLTExMCwxMiArMTEyLDggQEAgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnMKICAg
ICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVhbChmYW1pbHkxLCBmYW1pbHky
KTsKIH0KIAotdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2go
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQordW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6ZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcuJykpCi0gICAgICAgIHJldHVybiBm
YW1pbHkuZXhpc3RpbmdIYXNoKCk7Ci0jZW5kaWYKICAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoOjpoYXNoKGZhbWlseSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAppbmRleCAwYTdk
ZjI1MjhkYWM2MmE4YzVhODkwYmQyZGZhNDMwYTIxNGRkN2Y2Li4zNzljYWQ3ZmQ1OGVkMWY3ZDJm
MDE1OGE2ZDMxYTg5MWJjMDYzYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCkBAIC01Nyw4ICs1Nyw4
IEBAIHB1YmxpYzoKICAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CiAgICAgY29uc3QgUmVmQ291bnRlZEFycmF5
PEF0b21TdHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KIAot
ICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYsIGNv
bnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29u
c3QgQXRvbVN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5h
bWVIYXNoKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFt
ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHVuc2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkg
Y29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuY3BwCmluZGV4IDJkZGQ2YmRmMTk0Mzg0MTdhZGVhNzExMjQ3ZDIxNzZkNTc2
MzUyMzQuLmExMjQyYjI4NmQzYzczNzg2MDNkOTk2OTg2ZGE0OTlmNDdlODY0MmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCkBAIC0xMjksNiArMTI5LDcgQEAgdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQ
aXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIAogYm9vbCBG
b250Q2FzY2FkZUZvbnRzOjppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvciAoYXV0byYgZm9udFJhbmdlcyA6
IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc0xv
YWRpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTcxLDE2ICsxNzIsMjEgQEAg
c3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwKICAgICByZXR1cm4geyB9OwogfQogCi1jb25zdCBGb250
UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCitjb25z
dCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgs
IGJvb2wgbG9ja0hlbGQpCiB7CiAgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRl
eF07CiAKKyAgICAvLyBDaGVjayBhZ2FpbiB3aXRoIGxvY2sgaGVsZC4gVGhpcyBhbGxvd3MgdXMg
dG8gaGF2ZSBhIGxvY2stbGVzcyBmYXN0IHBhdGggaW4gdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAg
ICAvLyB0aGlzIGZhbGxiYWNrIHJhbmdlIGhhcyBhbHJlYWR5IGJlZW4gcmVhbGl6ZWQgd2l0aG91
dCBpbnRyb2R1Y2luZyBhIHJhY2UgY29uZGl0aW9uLgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2tJZihtX2xvY2ssICFsb2NrSGVsZCk7CisgICAgaWYgKCFsb2NrSGVsZCAmJiBpbmRleCA8IG1f
cmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXNbaW5kZXhdOworCiAgICAgQVNTRVJUKGluZGV4ID09IG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlcy5zaXplKCkpOwogICAgIEFTU0VSVChGb250Q2FjaGU6OnNpbmdsZXRvbigp
LmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwogCi0gICAgbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOwotICAgIGF1dG8mIGZvbnRSYW5nZXMgPSBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOworICAgIGF1dG8gZm9udFJhbmdlcyA9IEZvbnRS
YW5nZXMoKTsKIAogICAgIGlmICghaW5kZXgpIHsKICAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxp
emVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwg
bV9mb250U2VsZWN0b3IuZ2V0KCkpOwpAQCAtMTg4LDIzICsxOTQsMjggQEAgY29uc3QgRm9udFJh
bmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9u
dENhc2NhZGVEZXMKICAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBtX2ZvbnRTZWxlY3Rvci0+Zm9u
dFJhbmdlc0ZvckZhbWlseShkZXNjcmlwdGlvbiwgc3RhbmRhcmRGYW1pbHkpOwogICAgICAgICBp
ZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFu
Z2VzKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkubGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlw
dGlvbikpOwotICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAgICB9Ci0KLSAgICBpZiAobV9s
YXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291
bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRp
b24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBk
ZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdl
cyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwogCi0gICAgaWYgKGZvbnRSYW5nZXMuaXNO
dWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVk
RmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsKKyAg
ICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24u
ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CiAKLSAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9y
RmFsbGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9u
LmVmZmVjdGl2ZUZhbWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFj
a0luZGV4ID09IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgICAgICsrbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4OwotICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRTZWxlY3Rvci0+ZmFs
bGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgpKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFs
aXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOwor
ICAgICAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggIT0gbV9mb250U2VsZWN0
b3ItPmZhbGxiYWNrRm9udENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICArK21fbGFzdFJlYWxp
emVkRmFsbGJhY2tJbmRleDsKKyAgICAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdl
cyhtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rv
ckZhbGxiYWNrSW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAg
IHJldHVybiBmb250UmFuZ2VzOworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQo
V1RGTW92ZShmb250UmFuZ2VzKSk7CisgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdl
cy5sYXN0KCk7Cit9CisKK2NvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIGluZGV4LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1
cHBlckJvdW5kKQpAQCAtMzIzLDEwICszMzQsMTAgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3QK
ICAgICByZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGNvbnN0IEZvbnQqIGZpbmRCZXN0RmFsbGJh
Y2tGb250KEZvbnRDYXNjYWRlRm9udHMmIGZvbnRDYXNjYWRlRm9udHMsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK2NvbnN0IEZv
bnQqIEZvbnRDYXNjYWRlRm9udHM6OmZpbmRCZXN0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKIHsKICAgICBm
b3IgKHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyA7ICsrZmFsbGJhY2tJbmRleCkgewotICAg
ICAgICBhdXRvJiBmb250UmFuZ2VzID0gZm9udENhc2NhZGVGb250cy5yZWFsaXplRmFsbGJhY2tS
YW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CisgICAgICAgIGF1dG8mIGZvbnRS
YW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRl
eCwgdHJ1ZSk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGF1dG8qIGN1cnJlbnRGb250ID0gZm9udFJhbmdlcy5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkZv
cmJpZCkuZm9udDsKQEAgLTM0MiwxMCArMzUzLDEwIEBAIHN0YXRpYyBjb25zdCBGb250KiBmaW5k
QmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBjb25z
CiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFj
ayhVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIGJvb2wgc3lzdGVtRmFsbGJhY2tTaG91bGRCZUlu
dmlzaWJsZSkKIHsKLSAgICBjb25zdCBGb250KiBmb250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQo
KnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFyYWN0ZXIpOworICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBm
aW5kQmVzdEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKIAogICAgIGlmICgh
Zm9udCkKLSAgICAgICAgZm9udCA9ICZyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgZm9udCA9ICZyZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCwgdHJ1ZSkuZm9udEZvckZpcnN0UmFuZ2UoKTsKIAog
ICAgIGF1dG8gc3lzdGVtRmFsbGJhY2tGb250ID0gZm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9y
Q2hhcmFjdGVyKGNoYXJhY3RlciwgZGVzY3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQgPyBJ
c0ZvclBsYXRmb3JtRm9udDo6WWVzIDogSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vKTsKICAgICBpZiAo
IXN5c3RlbUZhbGxiYWNrRm9udCkKQEAgLTQwMiw3ICs0MTMsNyBAQCBHbHlwaERhdGEgRm9udENh
c2NhZGVGb250czo6Z2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3Qg
Rm9udENhcwogICAgIEdseXBoRGF0YSBsb2FkaW5nUmVzdWx0OwogICAgIG9wcG9ydHVuaXN0aWNh
bGx5U3RhcnRGb250RGF0YVVSTExvYWRpbmcoZGVzY3JpcHRpb24sIG1fZm9udFNlbGVjdG9yLmdl
dCgpKTsKICAgICBmb3IgKDsgOyArK2ZhbGxiYWNrSW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9u
dFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0lu
ZGV4KTsKKyAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4LCB0cnVlKTsKICAgICAgICAgaWYgKGZvbnRSYW5n
ZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDg4LDcgKzQ5OSw2IEBAIHN0
YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBw
YWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlw
aERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJpYW50KTsKIAogICAgIGlm
ICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCkBAIC00OTYsMTEgKzUwNiwxMiBAQCBHbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZQogCiAgICAgY29uc3QgdW5zaWduZWQgcGFnZU51bWJlciA9IEdseXBo
UGFnZTo6cGFnZU51bWJlckZvckNvZGVQb2ludChjKTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKICAgICBhdXRvJiBjYWNoZUVudHJ5ID0gcGFnZU51bWJlciA/IG1fY2Fj
aGVkUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIEdseXBoUGFnZUNhY2hlRW50cnkoKSkuaXRlcmF0b3It
PnZhbHVlIDogbV9jYWNoZWRQYWdlWmVybzsKIAogICAgIC8vIEluaXRpYWxpemUgY2FjaGUgd2l0
aCBhIGZ1bGwgcGFnZSBvZiBnbHlwaCBtYXBwaW5ncyBmcm9tIGEgc2luZ2xlIGZvbnQuCiAgICAg
aWYgKGNhY2hlRW50cnkuaXNOdWxsKCkpCi0gICAgICAgIGNhY2hlRW50cnkuc2V0U2luZ2xlRm9u
dFBhZ2UoZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXMocGFnZU51bWJlciwgcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApKSk7CisgICAgICAgIGNhY2hlRW50cnkuc2V0U2luZ2xl
Rm9udFBhZ2UoZ2x5cGhQYWdlRnJvbUZvbnRSYW5nZXMocGFnZU51bWJlciwgcmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAsIHRydWUpKSk7CiAKICAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhID0gY2FjaGVFbnRyeS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CiAgICAgaWYgKCFn
bHlwaERhdGEuZ2x5cGgpIHsKQEAgLTUxNiw2ICs1MjcsNyBAQCBHbHlwaERhdGEgRm9udENhc2Nh
ZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2Nh
ZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFsbGJhY2tzKCkKIHsK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYgKG1fc3lzdGVtRmFs
bGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIE11dGFibGUg
Z2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAppbmRleCA0NTAx
OTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi42NWYyZDhiMDc0MWE2NDdiZGI3
NTJhMWU3ZDczOGIzMmE1OGUzYmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQzLDcgKzQ0LDcgQEAgY2xhc3Mg
SW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFzcyBGb250Q2FzY2Fk
ZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4geworY2xhc3MgRm9u
dENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250Q2FzY2FkZUZv
bnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVGb250cyk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVG
b250cyk7CiBwdWJsaWM6CkBAIC03OCw5ICs3OSwxMiBAQCBwcml2YXRlOgogICAgIEZvbnRDYXNj
YWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxi
YWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJl
SW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNp
Z25lZCBmYWxsYmFja0luZGV4LCBib29sIGxvY2tIZWxkKTsKKwogICAgIFZlY3RvcjxGb250UmFu
Z2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwogCkBAIC0xMTQsNiArMTE4LDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVu
a25vd25QaXRjaCB9OwogICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07Cisg
ICAgbXV0YWJsZSBMb2NrIG1fbG9jazsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9u
dHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKQEAgLTEyNSwxNSArMTMwLDE4IEBAIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6Omlz
Rml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwCiAKIGlubGlu
ZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGlmIChtX2NhY2hlZFByaW1hcnlGb250KQorICAgICAgICByZXR1cm4gKm1fY2Fj
aGVkUHJpbWFyeUZvbnQ7CisKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAg
ICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7Ci0gICAgICAgIGF1dG8mIHByaW1hcnlSYW5n
ZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CisgICAgICAgIGF1
dG8mIHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCwgdHJ1ZSk7CiAgICAgICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmds
eXBoRGF0YUZvckNoYXJhY3RlcignICcsIEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBvbGljeTo6
QWxsb3cpLmZvbnQ7CiAgICAgICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkKICAgICAgICAg
ICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5n
ZSgpOwogICAgICAgICBlbHNlIGlmIChtX2NhY2hlZFByaW1hcnlGb250LT5pc0ludGVyc3RpdGlh
bCgpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMTsgOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICAgICAgYXV0byYgbG9jYWxSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChkZXNjcmlwdGlvbiwgaW5kZXgpOworICAgICAgICAgICAgICAgIGF1dG8mIGxvY2FsUmFu
Z2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4LCB0cnVlKTsK
ICAgICAgICAgICAgICAgICBpZiAobG9jYWxSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGF1dG8qIGZvbnQgPSBsb2NhbFJhbmdlcy5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6
OkZvcmJpZCkuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFhNjM5ODBiNjEwMDZkODVjMmY1
MC4uMWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJjMGU4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0ID0gMDsKIH07CiAKLWNs
YXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4geworY2xh
c3MgRm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZvbnRTZWxlY3Rv
cj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpID0gZGVmYXVsdDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAppbmRleCBjZDBk
Y2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44Y2Y5Y2RhY2ZiN2FiNGUwZjgx
MTE2OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAjaW5jbHVkZSAiR2x5cGguaCIK
ICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IEds
eXBoRGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUgc2V0IG9mIEds
eXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyByYW5nZSBvZiBjaGFyYWN0ZXJz
IGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4ZWQKIC8vIHN0
YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNoICJzaXplIiBudW1iZXIgb2Yg
Z2x5cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7
CitjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R2x5cGhQYWdl
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+IGNyZWF0ZShjb25zdCBGb250
JiBmb250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRleCBmYTc3YjM5OTc3ZGI5
NzhhMDU5NzFiNmMyNWM0MWYzNzJkZTUyNGIxLi5lNmY1N2NjOTMxZTdlOTc1NTRlYjU1YzQ5NTY0
MjM0ZTE4MGFmOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBAIC02MTksNyArNjE5LDcg
QEAgUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYgb3Jp
Z2luYWxGb250LCBjb25zdCBGb250RGVzY3IKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVh
dGVDb3B5V2l0aEF0dHJpYnV0ZXMob3JpZ2luYWxGb250LCBDVEZvbnRHZXRTaXplKG9yaWdpbmFs
Rm9udCksIG51bGxwdHIsIGRlc2NyaXB0b3IuZ2V0KCkpKTsKIH0KIAotUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxh
ckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBm
YW1pbHkpCiB7CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJvcHJpYXRlIGZvbnQgdXNp
bmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yga2V5d29yZHMgaW4KICAgICAvLyB0
aGUgcmVxdWVzdGVkIG5hbWVzLiBGb3IgZXhhbXBsZSwgd2UnbGwgbWF0Y2ggYW55IG5hbWUgdGhh
dCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCkBAIC02MjgsMjcgKzYyOCwyMSBAQCBS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBjb25zdCBBdAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAv
LyBTdWJzdGl0dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZvciB3ZWxsLWtub3duIG1v
bm9zcGFjZSBmb250cy4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5LCAibW9uYWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAi
bWVubG8iKSkgewotICAgICAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBjb3Vy
aWVyKTsKLSAgICB9CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1l
bmxvIikpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAiY291cmll
ciJfcyk7CiAKICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEgZm9yIEx1Y2lkYSBHcmFuZGUuCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgImx1Y2lkYSBncmFu
ZGUiKSkgewotICAgICAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IHZlcmRhbmEoInZlcmRhbmEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7Ci0gICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCB2ZXJkYW5h
KTsKLSAgICB9CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwg
Imx1Y2lkYSBncmFuZGUiKSkKKyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRp
b24sICJ2ZXJkYW5hIl9zKTsKICNlbmRpZgogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gYXJhYmljKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJBcmFiaWMiKSk7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJQYXNodG8iKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gdXJkdShNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiVXJkdSIpKTsKICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdv
cmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9Owot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZ2Vl
emFQbGFpbigiR2VlemFQcm8iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6
YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CiAgICAgZm9yIChTdHJpbmcqIG1hdGNoV29yZCA6IG1hdGNoV29yZHMpIHsKICAgICAgICAgaWYg
KGZhbWlseS5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKCptYXRjaFdvcmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVz
Y3JpcHRpb24ud2VpZ2h0KCkpID8gZ2VlemFCb2xkIDogZ2VlemFQbGFpbik7CisgICAgICAgICAg
ICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkgPyAiR2VlemFQcm8tQm9sZCJfcyA6ICJHZWV6YVBybyJfcyk7CiAg
ICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTA4OSwxMCArMTA4MywxMCBAQCBzdGF0
aWMgY29uc3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250KiBmaW5kQ2xvc2VzdEZvbnQoY29u
c3QgRm9udERhdGFiYXNlOjpJbgogICAgIHJldHVybiAmZmFtaWx5Rm9udHMuaW5zdGFsbGVkRm9u
dHNbaW5kZXhdOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENh
Y2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRG
b250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1l
LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAg
ICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNl
LmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJpbmcoKSk7CisgICAgY29uc3QgYXV0
byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lKTsK
ICAgICBpZiAoZm9udHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xMTA4
LDEwICsxMTAyLDEwIEBAIHN0cnVjdCBGb250TG9va3VwIHsKICAgICBib29sIGNyZWF0ZWRGcm9t
UG9zdFNjcmlwdE5hbWUgeyBmYWxzZSB9OwogfTsKIAotc3RhdGljIEZvbnRMb29rdXAgcGxhdGZv
cm1Gb250TG9va3VwV2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxl
Y3Rpb25SZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRz
IGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250
TG9va3VwV2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVl
c3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpCiB7CiAgICAgY29uc3QgYXV0byYgYWxsb3dsaXN0ID0gZm9udEFsbG93
bGlzdCgpOwotICAgIGlmICghaXNTeXN0ZW1Gb250KGZhbWlseS5zdHJpbmcoKSkgJiYgYWxsb3ds
aXN0LnNpemUoKSAmJiAhYWxsb3dsaXN0LmNvbnRhaW5zKGZhbWlseSkpCisgICAgaWYgKCFpc1N5
c3RlbUZvbnQoZmFtaWx5KSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYmICFhbGxvd2xpc3QuY29udGFp
bnMoZmFtaWx5KSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9OwogCiAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIi5hcHBsZXN5c3RlbXVpZm9udHNlcmlm
IikKQEAgLTExMjMsNyArMTExNyw3IEBAIHN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExv
b2t1cFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsCiAgICAgfQog
CiAgICAgYXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dp
bmdVc2VySW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dp
bmdVc2VySW5zdGFsbGVkRm9udHMoKTsKLSAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZv
bnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseS5zdHJpbmcoKSk7CisgICAgY29u
c3QgYXV0byYgZmFtaWx5Rm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShm
YW1pbHkpOwogICAgIGlmIChmYW1pbHlGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhl
IENTUyBzcGVjIHN0YXRlcyB0aGF0IGZvbnQtZmFtaWx5IG9ubHkgYWNjZXB0cyBhIG5hbWUgb2Yg
YW4gYWN0dWFsIGZvbnQgZmFtaWx5LiBIb3dldmVyLCBpbiBXZWJLaXQsIHdlIGNsYWltIHRvIGFs
c28KICAgICAgICAgLy8gc3VwcG9ydCBzdXBwbHlpbmcgYSBQb3N0U2NyaXB0IG5hbWUgaW5zdGVh
ZC4gSG93ZXZlciwgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdoZW4gdGhlIG90aGVyIHByb3BlcnRp
ZXMgKGZvbnQtd2VpZ2h0LApAQCAtMTE3Nyw3ICsxMTcxLDcgQEAgc3RhdGljIHZvaWQgaW52YWxp
ZGF0ZUZvbnRDYWNoZSgpCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5pbnZhbGlkYXRlKCk7
CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxD
YXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFt
aWx5U3BlY2lhbENhc2UoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBh
bGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4g
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQoKSBpbiBGb250RGVzY3Jp
cHRpb25Db2NvYS5jcHAKICAgICBPcHRpb25hbDxTeXN0ZW1Gb250S2luZD4gc3lzdGVtRGVzaWdu
OwpAQCAtMTIwNiw3ICsxMjAwLDcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRX
aXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIGlmIChm
YW1pbHkuc3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0U3R5bGUiKSkgewogICAgICAgICBjb25zdCBh
dXRvJiByZXF1ZXN0ID0gZm9udERlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCk7CiAg
ICAgICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IChpc0ZvbnRXZWlnaHRCb2xkKHJl
cXVlc3Qud2VpZ2h0KSB8fCBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnNob3VsZE1vY2tCb2xkU3lz
dGVtRm9udEZvckFjY2Vzc2liaWxpdHkoKSA/IGtDVEZvbnRUcmFpdEJvbGQgOiAwKSB8IChpc0l0
YWxpYyhyZXF1ZXN0LnNsb3BlKSA/IGtDVEZvbnRUcmFpdEl0YWxpYyA6IDApOwotICAgICAgICBh
dXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0
eWxlKGZhbWlseS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNv
Y29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICAg
ICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRl
eHRTdHlsZShmYW1pbHkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhlbWVDb2NvYTo6
c2luZ2xldG9uKCkuY29udGVudFNpemVDYXRlZ29yeSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0
ZWRMb2NhbGUoKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CiAgICAgICAgIGlm
ICh0cmFpdHMpCiAgICAgICAgICAgICBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ3JlYXRlQ29weVdpdGhTeW1ib2xpY1RyYWl0cyhkZXNjcmlwdG9yLmdldCgpLCB0cmFpdHMs
IHRyYWl0cykpOwogICAgICAgICByZXR1cm4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKGRl
c2NyaXB0b3IuZ2V0KCksIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKQEAgLTEyNDAs
NyArMTIzNCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNw
ZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUp
CitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBG
b250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lm
aWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9hdCBzaXplKQogewogICAg
IGlmIChmYW1pbHkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEyODMs
NyArMTI3Nyw3IEBAIHN0YXRpYyB2b2lkIGF1dG9BY3RpdmF0ZUZvbnQoY29uc3QgU3RyaW5nJiBu
YW1lLCBDR0Zsb2F0IHNpemUpCiB9CiAjZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRy
PEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHks
IGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCiB7CiAgICAgZmxv
YXQgc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOwogCkBAIC0xMjk2
LDcgKzEyOTAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hl
OjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogCiAgICAgICAgIC8vIEF1dG8g
YWN0aXZhdGUgdGhlIGZvbnQgYmVmb3JlIGxvb2tpbmcgZm9yIGl0IGEgc2Vjb25kIHRpbWUuCiAg
ICAgICAgIC8vIElnbm9yZSB0aGUgcmVzdWx0IGJlY2F1c2Ugd2Ugd2FudCB0byB1c2Ugb3VyIG93
biBhbGdvcml0aG0gdG8gYWN0dWFsbHkgZmluZCB0aGUgZm9udC4KLSAgICAgICAgYXV0b0FjdGl2
YXRlRm9udChmYW1pbHkuc3RyaW5nKCksIHNpemUpOworICAgICAgICBhdXRvQWN0aXZhdGVGb250
KGZhbWlseSwgc2l6ZSk7CiAKICAgICAgICAgZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZhbWlseSwg
Zm9udERlc2NyaXB0aW9uLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywg
c2l6ZSk7CiAgICAgfQpAQCAtMTQyOCw3ICsxNDIyLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVz
Y3IKICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAot
Y29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lKQogewogICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoZWl0aVN0cmluZ1tdID0geyAweDllZDEs
IDB4NGY1MyB9OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzb25ndGlTdHJpbmdbXSA9IHsgMHg1
YjhiLCAweDRmNTMgfTsKQEAgLTE0MzYsMTAgKzE0MzAsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYg
Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWwKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhbllhSGVpU3RyaW5nW10gPSB7IDB4
NWZhZSwgMHg4ZjZmLCAweDk2YzUsIDB4OWVkMSB9OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3
ZWlydWFuWmhlbmdIZWl0aVN0cmluZ1tdID0geyAweDVmYWUsIDB4OGVkZiwgMHg2YjYzLCAweDll
ZDEsIDB4OWFkNCB9OwogCi0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBzb25ndGlTQygiU29uZ3RpIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gc29uZ3RpVEMoIlNvbmd0aSBUQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGhlaXRpU0NSZXBsYWNlbWVudCgiUGluZ0ZhbmcgU0MiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBoZWl0aVRDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFRDIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVND
SUlMaXRlcmFsIHNvbmd0aVNDID0gIlNvbmd0aSBTQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEFTQ0lJTGl0ZXJhbCBzb25ndGlUQyA9ICJTb25ndGkgVEMiX3M7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlTQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFNDIl9zOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGhlaXRpVENSZXBsYWNlbWVudCA9ICJQ
aW5nRmFuZyBUQyJfczsKIAogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAg
IGNhc2UgMjoKQEAgLTE0NzQsNyArMTQ2OCw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRz
KENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCkBAIC0xNTQ3LDcgKzE1NDEsNyBAQCBSZWY8Rm9u
dD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0
byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSds
bCBwaWNrCiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91
dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0gICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWls
eShmb250RGVzY3JpcHRpb24sIEF0b21TdHJpbmcoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpKSkKKyAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgIlRpbWVzIl9zKSkKICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CiAKICAg
ICAvLyBMYXN0UmVzb3J0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29y
ZVRleHQuaAppbmRleCA5YWJhODlmMjEzNzA3MmQ0M2E4Zjg5OGFkZGQxOGRhZDYyNDkwMzk1Li5l
ODdiOTYxN2VkZjkwMjRiNDBkMDdjODExODBmYmQwMDRjZjEzZjdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmgKQEAgLTYyLDcgKzYyLDcgQEAgdHlwZWRlZiBIYXNoTWFwPEZvbnRUYWcsIFZhcmlhdGlv
bkRlZmF1bHRzLCBGb3VyQ2hhcmFjdGVyVGFnSGFzaCwgRm91ckNoYXJhY3RlclQKIFJldGFpblB0
cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmLCBjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBi
b29sIGFwcGx5V2VpZ2h0V2lkdGhTbG9wZVZhcmlhdGlvbnMgPSB0cnVlKTsKIGVudW0gY2xhc3Mg
U2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzIDogYm9vbCB7IE5vLCBZZXMgfTsKIFN5bnRoZXNp
c1BhaXIgY29tcHV0ZU5lY2Vzc2FyeVN5bnRoZXNpcyhDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA9IFNob3VsZENvbXB1dGVQaHlz
aWNhbFRyYWl0czo6Tm8sIGJvb2wgaXNQbGF0Zm9ybUZvbnQgPSBmYWxzZSk7Ci1SZXRhaW5QdHI8
Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eSwgRm9udFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsK
K1JldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQg
c2l6ZSk7CiBGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnREZXNj
cmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYpOwogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFs
bGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7CiBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVk
Rm9udHMoQ1RGb250RGVzY3JpcHRvclJlZiwgQ0dGbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggZjAyN2VlZDMxNzE0
NDRiYzM2YTQzNDQ3NjNiNzNlMTJkYjJhMDI2Ny4uZmZiMDQxMDcxMGJmMjAxNzY3MmZjZGMwNjgx
MjVkYWE4ZGNiNTllMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMzE5LDI1
ICszMTksMjQgQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBXZSB3YW50IHRv
IHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50
aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWln
aHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCi0gICAgc3RhdGljIEF0b21T
dHJpbmcgdGltZXNTdHIoInNlcmlmIik7Ci0gICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKSkKKyAgICBpZiAoUmVmUHRyPEZv
bnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKICAg
ICAgICAgcmV0dXJuICpmb250OwogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSByZWFjaGVkIGR1ZSB0
byBpbXByb3Blcmx5LWluc3RhbGxlZCBvciBtaXNjb25maWd1cmVkIGZvbnRjb25maWcuCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxG
b250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBh
YmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykK
IHsKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJp
bmdGcm9tRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3N0YXRpYyBTdHJpbmcgZ2V0
RmFtaWx5TmFtZVN0cmluZ0Zyb21GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7CiAgICAg
Ly8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9z
cGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KICAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAo
bGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgogICAgIGlmIChm
YW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQotICAgICAg
ICByZXR1cm4gZmFtaWx5LnN0cmluZygpOworICAgICAgICByZXR1cm4gZmFtaWx5OwogCiAgICAg
aWYgKGZhbWlseSA9PSBzdGFuZGFyZEZhbWlseSB8fCBmYW1pbHkgPT0gc2VyaWZGYW1pbHkpCiAg
ICAgICAgIHJldHVybiAic2VyaWYiOwpAQCAtNTAwLDcgKzQ5OSw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0NvbW1vbmx5VXNlZEdlbmVyaWNGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1l
U3RyaW5nKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlO
YW1lU3RyaW5nLCAiY3Vyc2l2ZSIpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZp
ZWRDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENh
Y2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5n
cyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykK
IHsKICAgICAvLyBUaGUgQ1NTIGZvbnQgbWF0Y2hpbmcgYWxnb3JpdGhtIChodHRwOi8vd3d3Lncz
Lm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSkKICAgICAvLyBzYXlz
IHRoYXQgd2UgbXVzdCBmaW5kIGFuIGV4YWN0IG1hdGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQg
KGl0YWxpYyBvciBvYmxpcXVlIGNhbiBiZSB1c2VkKQpAQCAtNTk5LDkgKzU5OCw5IEBAIHN0ZDo6
dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKIH0KIAotY29uc3Qg
QXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3Qg
QXRvbVN0cmluZyYpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIG51bGxBdG9t
KCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwCmluZGV4IDJiNGI1NTcyYTRkODA4YjgzYjRiMGY0YWE2NGY5NmM5NjM4
MmY2MTMuLjAzMTY2ZWQ4MDJmYjk0MzY5YzE5ZGNjNWY4NzUxMTZkZDkxNzQxNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCkBAIC0zNjIsOSArMzYyLDkgQEAgYm9vbCBGb250Q2FjaGU6OmlzU3lzdGVtRm9udEZvcmJp
ZGRlbkZvckVkaXRpbmcoY29uc3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJl
ZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBB
dG9tU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZv
bnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1l
KQogewotICAgIEF0b21TdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4o
Zm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOworICAgIFN0cmluZyBmYW1pbHlOYW1lKGZv
bnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CiAg
ICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24s
IGZhbWlseU5hbWUpOwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgb3V0Rm9udEZhbWlseU5h
bWUgPSBmYW1pbHlOYW1lOwpAQCAtMzczLDcgKzM3Myw3IEBAIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9uCiAKIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CiAKICAgICBpZiAoIWZh
bGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gKmZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnROYW1lKTsKQEAgLTM4NCwxMiArMzg0
LDEyIEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAgLy8gU2VhcmNoIGFsbCB0eXBpY2Fs
IFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KICAgICAvLyBTb3J0ZWQgYnkg
bW9zdCB0byBsZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvVW5pY29kZV90eXBlZmFjZXMKICAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5ldyBSb21h
biBhbHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2hhbmdl
IHByZWZzLgotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gZmFsbGJhY2tGb250c1tdID0gewotICAgICAgICBBdG9tU3RyaW5nKCJUaW1lcyBOZXcg
Um9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21T
dHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJUYWhvbWEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmco
IkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZmFsbGJhY2tGb250c1tdID0geworICAgICAgICBT
dHJpbmcoIlRpbWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAor
ICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiVGFob21hIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIkFyaWFsIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKICAgICB9OwogICAgIFJlZlB0cjxGb250PiBzaW1wbGVG
b250OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmYWxsYmFj
a0ZvbnRzKTsgKytpKSB7CkBAIC01MTIsNyArNTEyLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBt
YXRjaEltcHJvdmluZ0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1QgVEVY
VE0KICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJ
Rm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBk
ZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3RhdGljIEdE
SU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9ORyBk
ZXNpcmVkV2VpZ2h0LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNp
emVJdGFsaWMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzAsMTIgQEAg
c3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHksIExPTkcgZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0Rh
dGEgewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
TmFtZSkKKyAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFt
ZSkKICAgICAgICAgOiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQogCi0g
ICAgY29uc3QgQXRvbVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgbV9m
YW1pbHlOYW1lOwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2NhcGFi
aWxpdGllczsKIH07CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRy
YWl0c0luRmFtaWx5RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1F
VAogICAgIHJldHVybiAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4g
Rm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJp
bGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ2LDcgQEAgVmVj
dG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lm
aWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGlu
Z3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wgaXNM
dWNpZGFHcmFuZGUgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNp
ZGEgZ3JhbmRlIik7CiAKQEAgLTY5MiwxMSArNjkyLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6
OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
KQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBO
ZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRTYW5z
U2VyaWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24g
V2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVu
dCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9tYW4g
YXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcwNSw3
ICs3MDIsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQg
b24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAgICAg
ICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcg
Um9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1
cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0Lgog
ICAgIC8vIFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJuYXRp
dmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTEsMTAg
QEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVy
IHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAgICAg
ICByZXR1cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJNaWNyb3Nv
ZnQgU2FucyBTZXJpZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxs
QXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2MTU0
YmMwNGJlYTUwM2M2MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFiZmJh
MDc2YmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5j
cHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2Ft
ZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250
ZXh0PiB7CitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZpZWxk
cyA6IDE2OwogICAgIHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0JpZGlDb250ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQz
OWJkMzRkMS4uNWE4ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIyLDE1
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVt
IEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAog
Ly8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBCaWRp
Q29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRpQ29u
dGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNp
Z25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBC
aWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQg
PSBudWxscHRyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423625</attachid>
            <date>2021-03-18 11:42:37 -0700</date>
            <delta_ts>2021-03-18 11:59:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210318184235.patch</filename>
            <type>text/plain</type>
            <size>65284</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uY2M1OThiYmM2
MmU2MzM1NDM4NWIwODYxN2NkM2M3ODY1OTEwYWE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmlu
ZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5n
cyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsKQEAgLTE0MSwzOSArMTMyLDMzIEBAIHN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxGb250UGxhCiAKIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cz4gRm9u
dFBsYXRmb3JtRGF0YUNhY2hlOwogCitzdGF0aWMgTG9jayBnUGxhdGZvcm1EYXRhQ2FjaGVMb2Nr
OworCiBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IGNh
Y2hlOwogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRp
b25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRp
bWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLQotICAgIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgaWYgKCFw
bGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlLmlzTnVsbCgpKQorICAgIGlmIChhdXRvIHBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFt
ZSkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlOwogCiAgICAgc3dp
dGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImFyaWFsIikpCi0gICAgICAg
ICAgICByZXR1cm4gaGVsdmV0aWNhOworICAgICAgICAgICAgcmV0dXJuICJIZWx2ZXRpY2EiX3M7
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
dGltZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAg
cmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNzoK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllck5ldzsKKyAgICAgICAgICAgIHJl
dHVybiAiQ291cmllciBOZXciX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgOToKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJoZWx2ZXRp
Y2EiKSkKLSAgICAgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICAgICAgICAgIHJldHVybiAiQXJp
YWwiX3M7CiAgICAgICAgIGJyZWFrOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8vIE9uIFdpbmRv
d3MsIENvdXJpZXIgTmV3IGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IGlzIGFsd2F5cyBwcmVzZW50
IGFuZApAQCAtMTgzLDMzICsxNjgsMjggQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjph
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgLy8g
b25seSBiZSB0cmllZCBpZiBDb3VyaWVyIE5ldyBpcyBub3QgZm91bmQuCiAgICAgY2FzZSAxMToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIG5ldyIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXI7CisgICAgICAgICAgICBy
ZXR1cm4gIkNvdXJpZXIiX3M7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSAxNToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0
aW1lcyBuZXcgcm9tYW4iKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lczsKKyAgICAgICAgICAg
IHJldHVybiAiVGltZXMiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2VkRmFtaWx5TmFt
ZSwKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LSAgICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAg
Ly8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwg
ZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZs
b3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJl
LgotICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yaWVudGF0b2lu
LCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVsw
XSAhPSAnQCcpID8KLSAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJpbmcocGFzc2Vk
RmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CisgICAgLy8gSUUgZGlzcmVnYXJkcyAi
QCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRpb24sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZp
b3IuCisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZS5zdWJz
dHJpbmcocGFzc2VkRmFtaWx5TmFtZVswXSA9PSAnQCcgPyAxIDogMCk7CiAjZWxzZQotICAgIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAogICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjI4LDkgKzIwOCw4IEBAIEZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5h
bWUpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2Ug
aGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAog
ICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3
LCBldGMuICBUcnkgbG9va2luZyB1cCB0aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgot
ICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZh
bWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1E
YXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxp
dGllcywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQ
bGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShm
b250RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFj
ZUNhcGFiaWxpdGllcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkg
aW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZl
CiAgICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNh
bGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgogICAgICAgICAgICAgICAgIGl0ID0g
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZmluZChrZXkpOwpAQCAtMzEyLDggKzI5MSwxMCBAQCBj
b25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IHVuc2ln
bmVkIGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3Qg
dW5zaWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0Fs
dGVybmF0ZU5hbWUpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAg
ICAgaWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogCkBAIC0zMjUsMTAgKzMwNiw4IEBAIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvCiAKIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAgICAK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwpAQCAtMzQwLDYgKzMxOSw4
IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAg
ICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmds
ZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIHVuc2lnbmVkIGluYWN0aXZlRm9u
dERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIApAQCAtMzU3LDE1ICsz
MzgsMTMgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkK
IAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNv
dW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIExPRyhG
b250cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdlQ291bnQp
OwogCiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsK
ICAgICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLQogICAg
IHdoaWxlIChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250
c1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVl
cygpKSB7CkBAIC00MjEsNiArNDAwLDcgQEAgc3RhdGljIGJvb2wga2V5c01hdGNoKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIKIAogdm9p
ZCBGb250Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKIHsKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNsZWFyKCk7
CiB9CiAKQEAgLTQzNywxMiArNDE3LDE4IEBAIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mCiAgICAg
dW5zaWduZWQgZmFtaWx5Q291bnQgPSBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOwogICAgIGtl
eS5mYW1pbGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZhbWlseUNvdW50KTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFtaWx5Q291bnQ7ICsraSkKLSAgICAgICAga2V5LmZhbWls
aWVzLnVuY2hlY2tlZEFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAgICAgIGtl
eS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkuc3RyaW5n
KCkpOwogICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rv
ci0+dW5pcXVlSWQoKSA6IDA7CiAgICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250U2Vs
ZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CiAgICAgcmV0dXJuIGtleTsKIH0K
IAorc3RhdGljIHZvaWQgaXNvbGF0ZUZvbnRDYXNjYWRlQ2FjaGVLZXkoRm9udENhc2NhZGVDYWNo
ZUtleSYga2V5KQoreworICAgIGZvciAoYXV0byYgZmFtaWx5IDoga2V5LmZhbWlsaWVzKQorICAg
ICAgICBmYW1pbHkgPSBmYW1pbHkuaXNvbGF0ZWRDb3B5KCk7Cit9CisKIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYg
a2V5KQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgaGFzaCB0aGUga2V5IGFuZCB0aGUgZmFtaWx5
IG5hbWUgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBtYWtpbmcgYSBoYXNoIG91dCBvZiBvdGhlciBo
YXNoZXMuCkBAIC00NzksNiArNDY1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNo
ZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGtleXNNYXRjaChhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5rZXksIGtleSkpCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5mb250cy5nZXQoKTsKIAorICAgIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KGtleSk7
CiAgICAgYXV0byYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIG5l
d0VudHJ5ID0gbWFrZVVuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KFdURk1vdmUoa2V5KSwg
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogICAgIFJl
ZjxGb250Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CkBAIC00
OTcsNiArNDg0LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNoZTo6cmV0cmlldmVP
ckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKIAogdm9pZCBGb250Q2FjaGU6
OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZvbnRzKHJldHJpZXZlT3JBZGRD
YWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgV1RGTW92ZShmb250U2Vs
ZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0OTUsOCBAQCBzaXplX3QgRm9udENhY2hlOjpmb250
Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiB7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2Nr
KTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIHVu
c2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZh
bHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKQEAgLTUyMiw2ICs1MDks
OCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7CiAKIHZvaWQgRm9u
dENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhnUGxhdGZvcm1EYXRhQ2FjaGVMb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpCiAgICAgICAgIGdDbGllbnRzID0gbmV3IEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj47CiAKQEAg
LTUzMSw2ICs1MjAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYg
Y2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xp
ZW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+Y29udGFp
bnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRp
b24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZh
bGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNo
ZUxvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRm
b3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4
MCw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYp
CiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYy
ZS4uM2RlNmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBA
QAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
Y3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzks
NyArODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUo
ZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwg
bV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRl
c2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRp
bmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9u
U2V0dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1
Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBG
b250U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJy
YXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9j
YWxlOworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVh
dHVyZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRp
bmdzOwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFz
aCB7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25L
ZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9u
dENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4g
ZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQg
Zm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBA
IC0yMjQsMTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0
cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0
YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdo
ZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFz
IGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3Ry
aW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBu
dWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+
IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0
cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAg
LTI0Nyw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAK
ICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3Ry
aW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBT
dHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBF
X1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENh
c2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
aW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBh
YmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBB
dG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNh
cGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxp
dGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAg
IFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBt
X3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBt
X3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAg
ICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcg
QEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHks
IG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMw
MzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgK
QEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChj
b25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgp
IGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQp
IGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsK
KyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2Vz
SW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdl
KCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBi
b29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25z
dCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBz
aXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBG
b250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRz
LT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250
UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2Zv
bnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwor
ICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRp
b24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9y
Q2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIo
bV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3Qg
Rm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9u
dERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRj
aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEw
MmMzMTkyNDgwNDNmYTc0NjRhZGMuLjdkNzZmMmFmZmI4NjZhYjg0Yzk5YzhhZmIzYzFhYzRiMDNk
Y2JkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNv
bnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQog
Ci1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZh
bWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwo
KSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1
cm4gZmFtaWx5MSA9PSBmYW1pbHkyOwpAQCAtMTEwLDEyICsxMTIsOCBAQCBib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5MSwgY29ucwogICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZh
bWlseTEsIGZhbWlseTIpOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpm
YW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5leGlzdGluZ0hhc2goKTsKLSNlbmRpZgogICAgIHJldHVybiBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNh
ZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgK
QEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9m
YW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBB
dG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1p
bHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBm
b2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZl
RmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3
MTEyNDdkMjE3NmQ1NzYzNTIzNC4uZDc5MjY0MDc2MTZmMGVkYzgxODUyODZkYWFjMzQ1MjUxZTBi
MzM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAKQEAgLTExOSw2ICsxMTksNyBAQCBGb250Q2FzY2FkZUZvbnRzOjp+
Rm9udENhc2NhZGVGb250cygpID0gZGVmYXVsdDsKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpk
ZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCAhbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzLnNpemUoKSk7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBw
cmltYXJ5UmFuZ2VzLnNpemUoKTsKICAgICBpZiAobnVtUmFuZ2VzID09IDEpCkBAIC0xMjksNiAr
MTMwLDcgQEAgdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIAogYm9vbCBGb250Q2FzY2FkZUZvbnRz
Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvciAoYXV0byYgZm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxs
YmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc0xvYWRpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDExICsxNzgsMTEgQEAgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXMKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKIAorICAg
IEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24o
KS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBGb250
UmFuZ2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSByZWFs
aXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgs
IG1fZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTkwLDQ0IEBAIGNvbnN0IEZvbnRS
YW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZv
bnRDYXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZv
bnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAgICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJh
bmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2
ZUZhbWlseUNvdW50KCkpCisgICAgICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxs
YmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxl
Y3Rvci5nZXQoKSk7CisKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250
U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxi
YWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOworICAgICAgICAg
ICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggIT0gbV9mb250U2VsZWN0b3ItPmZhbGxi
YWNrRm9udENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleDsKKyAgICAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRT
ZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNr
SW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3Vu
dCgpKQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlv
biwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChXVEZNb3ZlKGZvbnRSYW5nZXMpKTsK
KyAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKK30KIAotICAgIGlm
IChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VS
VChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFt
aWx5Q291bnQoKSk7Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzLnNpemUoKSA8PSBpbmRleCk7CisgICAgYXV0byYgcmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KTsKKyAgICByZXR1cm4gcmFuZ2Vz
LmlzTnVsbCgpOworfQogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5k
ZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBt
X2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
b250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKLSAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQorY29uc3Qg
Rm9udCogRm9udENhc2NhZGVGb250czo6Zm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgsIFVDaGFyMzIgY2hhcmFj
dGVyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlcy5zaXplKCkgPD0gaW5kZXgpOworICAgIGF1dG8mIHJhbmdlcyA9IHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCk7CisgICAgcmV0dXJuIHJhbmdl
cy5mb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdl
czsKK2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2tJZihtX2xvY2ssICFtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsK
KyAgICBhdXRvJiByYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCk7CisgICAgcmV0dXJuIHJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91
bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzQ2LDEwIEBAIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250KiBm
aW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCitjb25zdCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5kQmVzdEZhbGxiYWNrRm9udChj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgOyArK2ZhbGxiYWNr
SW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZvbnRDYXNjYWRlRm9udHMucmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAg
ICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9udCA9IGZvbnRSYW5nZXMuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9s
aWN5OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM2NSwxMCBAQCBzdGF0aWMgY29uc3QgRm9u
dCogZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250
cywgY29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVt
RmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hv
dWxkQmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9udCA9IGZpbmRCZXN0RmFsbGJh
Y2tGb250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKKyAgICBjb25zdCBGb250KiBm
b250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CiAKICAg
ICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSAmZm9udEZv
ckZpcnN0UmFuZ2UoZGVzY3JpcHRpb24pOwogCiAgICAgYXV0byBzeXN0ZW1GYWxsYmFja0ZvbnQg
PSBmb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBkZXNjcmlw
dGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCA/IElzRm9yUGxhdGZvcm1Gb250OjpZZXMgOiBJc0Zv
clBsYXRmb3JtRm9udDo6Tm8pOwogICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250KQpAQCAtNDg4
LDkgKzUxMSw5IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJh
bmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250Q2Fz
Y2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAodmFy
aWFudCAhPSBOb3JtYWxWYXJpYW50KQogICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFu
dChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAKQEAgLTUxNiw2ICs1MzksNyBAQCBHbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFs
bGJhY2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYg
KG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi5mNWRlYmRl
MjM2MTExNzBjNjVlYzMyYjU5OTdlZTk1MmEwZWUxNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQzLDcgKzQ0
LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFz
cyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4g
eworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxG
b250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVG
b250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
Rm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENh
Y2hlOyB9CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCk7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJh
Y2tSYW5nZXNJbmRleCwgVUNoYXIzMik7CisgICAgY29uc3QgRm9udCYgZm9udEZvckZpcnN0UmFu
Z2UoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAgdm9pZCBwcnVuZVN5c3Rl
bUZhbGxiYWNrcygpOwogCkBAIC03OCw5ICs4MSwxMiBAQCBwcml2YXRlOgogICAgIEZvbnRDYXNj
YWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxi
YWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJl
SW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNp
Z25lZCBmYWxsYmFja0luZGV4KTsKKwogICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IHsgMCB9OwogCkBAIC0xMTQsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBz
aG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9Owog
ICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBMb2Nr
IG1fbG9jazsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRj
aChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTEyNSw3ICsx
MzIsMTAgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQmIEZv
bnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1f
Y2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsK
KworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAoIW1fY2FjaGVk
UHJpbWFyeUZvbnQpIHsKICAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNv
dXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFh
NjM5ODBiNjEwMDZkODVjMmY1MC4uMWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJj
MGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVj
dG9yLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0ID0gMDsKIH07CiAKLWNsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZv
bnRTZWxlY3Rvcj4geworY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3Rv
cigpID0gZGVmYXVsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2UuaAppbmRleCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44
Y2Y5Y2RhY2ZiN2FiNGUwZjgxMTE2OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAj
aW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcg
KzU3LDcgQEAgc3RydWN0IEdseXBoRGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZp
eGVkLXNpemUgc2V0IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyBy
YW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMg
YXJlIGluZGV4ZWQKIC8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNo
ICJzaXplIiBudW1iZXIgb2YgZ2x5cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNv
dW50ZWQ8R2x5cGhQYWdlPiB7CitjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+
IGNyZWF0ZShjb25zdCBGb250JiBmb250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5j
cHAKaW5kZXggYTA4ODJmN2MyY2Y4YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZGUxNDcx
NmZiMWQ2ZmE1YThhZjU0NTE1NjgwZThmZjZmODFhMDE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEyOSw4ICsxMjksOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9u
dEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAg
ICAgICAmJiAoIXByZWZlckNvbG9yZWRGb250IHx8IGJhc2VGb250LT5wbGF0Zm9ybURhdGEoKS5p
c0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgcmV0dXJuIGJhc2VGb250OwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFs
bGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZmFsbGJh
Y2tGb250ID0gZm9udEZvckNoYXJhY3RlcihpLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZh
bGxiYWNrRm9udCB8fCBmYWxsYmFja0ZvbnQgPT0gYmFzZUZvbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3
MWI2YzI1YzQxZjM3MmRlNTI0YjEuLmEwNzg1Y2RiYTdiNTQzNzRmOWI5YmUxMzQ1Zjc4Y2Q5MDZj
OTNmZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRh
aW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZv
bnQsIGNvbnN0IEZvbnREZXNjcgogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlX
aXRoQXR0cmlidXRlcyhvcmlnaW5hbEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwg
bnVsbHB0ciwgZGVzY3JpcHRvci5nZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHkpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkK
IHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1h
dGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1
ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRh
aW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KQEAgLTYyOCwyNyArNjI4LDE5IEBAIFJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IEF0CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0
aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNl
IGZvbnRzLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJt
b25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIp
KSB7Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllcigiY291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwot
ICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9u
YWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkK
KyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsK
IAogICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7
Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAg
IH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRh
IGdyYW5kZSIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZl
cmRhbmEiX3MpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBh
cmFiaWMoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0
byIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJVcmR1IikpOwotICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10g
PSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWlu
KCJHZWV6YVBybyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgi
R2VlemFQcm8tQm9sZCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBm
b3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewotICAgICAgICBpZiAoZmFtaWx5
LmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEFTQ0lJTGl0ZXJhbCBtYXRjaFdvcmRzW10gPSB7ICJBcmFiaWMiX3MsICJQYXNodG8iX3Ms
ICJVcmR1Il9zIH07CisgICAgYXV0byBmYW1pbHlNYXRjaGVyID0gU3RyaW5nVmlldyhmYW1pbHkp
OworICAgIGZvciAoYXV0byogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgeworICAgICAgICBpZiAo
ZmFtaWx5TWF0Y2hlci5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKCptYXRjaFdvcmQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJv
bGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gIkdlZXphUHJvLUJvbGQiX3MgOiAiR2VlemFQcm8i
X3MpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEwODksMTAgKzEwODEsMTAg
QEAgc3RhdGljIGNvbnN0IEZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udCogZmluZENsb3Nlc3RG
b250KGNvbnN0IEZvbnREYXRhYmFzZTo6SW4KICAgICByZXR1cm4gJmZhbWlseUZvbnRzLmluc3Rh
bGxlZEZvbnRzW2luZGV4XTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+
IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNo
ZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFt
aWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
CiB7CiAgICAgYXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxs
b3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxs
b3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsKLSAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnRE
YXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUuc3RyaW5nKCkpOworICAgIGNv
bnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5
TmFtZSk7CiAgICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApA
QCAtMTEwOCwxMCArMTEwMCwxMCBAQCBzdHJ1Y3QgRm9udExvb2t1cCB7CiAgICAgYm9vbCBjcmVh
dGVkRnJvbVBvc3RTY3JpcHROYW1lIHsgZmFsc2UgfTsKIH07CiAKLXN0YXRpYyBGb250TG9va3Vw
IHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBG
b250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBGb250TG9va3VwIHBsYXRm
b3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rp
b25SZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGNvbnN0IGF1dG8mIGFsbG93bGlzdCA9IGZv
bnRBbGxvd2xpc3QoKTsKLSAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkuc3RyaW5nKCkpICYm
IGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQorICAgIGlm
ICghaXNTeXN0ZW1Gb250KGZhbWlseSkgJiYgYWxsb3dsaXN0LnNpemUoKSAmJiAhYWxsb3dsaXN0
LmNvbnRhaW5zKGZhbWlseSkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsKIAogICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICIuYXBwbGVzeXN0ZW11aWZv
bnRzZXJpZiIpCkBAIC0xMTIzLDcgKzExMTUsNyBAQCBzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9y
bUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbAog
ICAgIH0KIAogICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRz
ID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRv
bkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRp
c2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZmFtaWx5Rm9u
dHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkuc3RyaW5nKCkpOwor
ICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JG
YW1pbHkoZmFtaWx5KTsKICAgICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IC8vIFRoZSBDU1Mgc3BlYyBzdGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5IGFjY2VwdHMgYSBu
YW1lIG9mIGFuIGFjdHVhbCBmb250IGZhbWlseS4gSG93ZXZlciwgaW4gV2ViS2l0LCB3ZSBjbGFp
bSB0byBhbHNvCiAgICAgICAgIC8vIHN1cHBvcnQgc3VwcGx5aW5nIGEgUG9zdFNjcmlwdCBuYW1l
IGluc3RlYWQuIEhvd2V2ZXIsIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVuIHRoZSBvdGhlciBw
cm9wZXJ0aWVzIChmb250LXdlaWdodCwKQEAgLTExNzcsNyArMTE2OSw3IEBAIHN0YXRpYyB2b2lk
IGludmFsaWRhdGVGb250Q2FjaGUoKQogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuaW52YWxp
ZGF0ZSgpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlT
cGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBh
bGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250
V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgLy8gRklYTUU6IFNlZSBjb21t
ZW50IGluIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0KCkgaW4gRm9u
dERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgT3B0aW9uYWw8U3lzdGVtRm9udEtpbmQ+IHN5c3Rl
bURlc2lnbjsKQEAgLTEyMDYsNyArMTE5OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVm
PiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwKICAg
ICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIlVJQ1RGb250VGV4dFN0eWxlIikpIHsKICAgICAgICAg
Y29uc3QgYXV0byYgcmVxdWVzdCA9IGZvbnREZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVz
dCgpOwogICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSAoaXNGb250V2VpZ2h0
Qm9sZChyZXF1ZXN0LndlaWdodCkgfHwgRm9udENhY2hlOjpzaW5nbGV0b24oKS5zaG91bGRNb2Nr
Qm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPyBrQ1RGb250VHJhaXRCb2xkIDogMCkg
fCAoaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkgPyBrQ1RGb250VHJhaXRJdGFsaWMgOiAwKTsKLSAg
ICAgICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0
aFRleHRTdHlsZShmYW1pbHkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVy
VGhlbWVDb2NvYTo6c2luZ2xldG9uKCkuY29udGVudFNpemVDYXRlZ29yeSgpLCBmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRMb2NhbGUoKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7
CisgICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0
ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1l
Q29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9u
LmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAg
ICAgICBpZiAodHJhaXRzKQogICAgICAgICAgICAgZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoU3ltYm9saWNUcmFpdHMoZGVzY3JpcHRvci5nZXQoKSwg
dHJhaXRzLCB0cmFpdHMpKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRG
b250cyhkZXNjcmlwdG9yLmdldCgpLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CkBA
IC0xMjQwLDcgKzEyMzIsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhG
YW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9h
dCBzaXplKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkK
IHsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0xMjgzLDcgKzEyNzUsNyBAQCBzdGF0aWMgdm9pZCBhdXRvQWN0aXZhdGVGb250KGNvbnN0IFN0
cmluZyYgbmFtZSwgQ0dGbG9hdCBzaXplKQogfQogI2VuZGlmCiAKLXN0ZDo6dW5pcXVlX3B0cjxG
b250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVj
dGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKK3N0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogewog
ICAgIGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKIApA
QCAtMTI5Niw3ICsxMjg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKIAogICAgICAgICAv
LyBBdXRvIGFjdGl2YXRlIHRoZSBmb250IGJlZm9yZSBsb29raW5nIGZvciBpdCBhIHNlY29uZCB0
aW1lLgogICAgICAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBiZWNhdXNlIHdlIHdhbnQgdG8gdXNl
IG91ciBvd24gYWxnb3JpdGhtIHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZvbnQuCi0gICAgICAgIGF1
dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LnN0cmluZygpLCBzaXplKTsKKyAgICAgICAgYXV0b0FjdGl2
YXRlRm9udChmYW1pbHksIHNpemUpOwogCiAgICAgICAgIGZvbnQgPSBmb250V2l0aEZhbWlseShm
YW1pbHksIGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmls
aXRpZXMsIHNpemUpOwogICAgIH0KQEAgLTE0MjgsNyArMTQyMCw3IEBAIFJlZlB0cjxGb250PiBG
b250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7
CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVy
YWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsg
MHg5ZWQxLCAweDRmNTMgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10g
PSB7IDB4NWI4YiwgMHg0ZjUzIH07CkBAIC0xNDM2LDEwICsxNDI4LDEwIEBAIGNvbnN0IEF0b21T
dHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlsCiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1td
ID0geyAweDVmYWUsIDB4OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3Qg
VUNoYXIgd2VpcnVhblpoZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2
MywgMHg5ZWQxLCAweDlhZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBU
QyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEFTQ0lJTGl0ZXJhbCBzb25ndGlTQyA9ICJTb25ndGkgU0MiX3M7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpVEMgPSAiU29uZ3RpIFRDIl9zOworICAgIHN0YXRp
YyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGhlaXRpU0NSZXBsYWNlbWVudCA9ICJQaW5nRmFuZyBT
QyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVRDUmVwbGFjZW1l
bnQgPSAiUGluZ0ZhbmcgVEMiX3M7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkp
IHsKICAgICBjYXNlIDI6CkBAIC0xNDc0LDcgKzE0NjYsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBG
b250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxs
ZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQpAQCAtMTU0Nyw3ICsxNTM5LDcgQEAg
UmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBi
ZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBu
b3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0
IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBBdG9tU3RyaW5nKCJUaW1lcyIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZh
bWlseShmb250RGVzY3JpcHRpb24sICJUaW1lcyJfcykpCiAgICAgICAgIHJldHVybiAqcmVzdWx0
OwogCiAgICAgLy8gTGFzdFJlc29ydCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmgKaW5kZXggOWFiYTg5ZjIxMzcwNzJkNDNhOGY4OThhZGRkMThkYWQ2MjQ5
MDM5NS4uZTg3Yjk2MTdlZGY5MDI0YjQwZDA3YzgxMTgwZmJkMDA0Y2YxM2Y3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oCkBAIC02Miw3ICs2Miw3IEBAIHR5cGVkZWYgSGFzaE1hcDxGb250VGFnLCBW
YXJpYXRpb25EZWZhdWx0cywgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUCiBS
ZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcywgYm9vbCBhcHBseVdlaWdodFdpZHRoU2xvcGVWYXJpYXRpb25zID0gdHJ1ZSk7CiBlbnVt
IGNsYXNzIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA6IGJvb2wgeyBObywgWWVzIH07CiBT
eW50aGVzaXNQYWlyIGNvbXB1dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVmLCBjb25zdCBG
b250RGVzY3JpcHRpb24mLCBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgPSBTaG91bGRDb21w
dXRlUGh5c2ljYWxUcmFpdHM6Ok5vLCBib29sIGlzUGxhdGZvcm1Gb250ID0gZmFsc2UpOwotUmV0
YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQg
c2l6ZSk7CitSZXRhaW5QdHI8Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUs
IGZsb2F0IHNpemUpOwogRm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXNGb3JG
b250RGVzY3JpcHRvcihDVEZvbnREZXNjcmlwdG9yUmVmKTsKIHZvaWQgYWRkQXR0cmlidXRlc0Zv
ckluc3RhbGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpOwogUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvcklu
c3RhbGxlZEZvbnRzKENURm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQgc2l6ZSwgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA2
ZmYwMGJmYmQ1NGEyYjhhMThlZWMwNTg0OTA3OTM1NGMwMjEyZGIwLi5jZDU5NGM1NWZkYzg3ODJl
YjNlYzJiYzhiNDYzYTVmZmE3NDdjM2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0
LmNwcApAQCAtMzE2LDggKzMxNiw4IEBAIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9y
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlCiAKICAgICBi
b29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNl
Q2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBcmVO
dWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZmFsbGJhY2tGb250ID0gZm9udEZv
ckNoYXJhY3RlcihpLCBiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgaWYgKCFmb250KQogICAgICAg
ICAgICAgY29udGludWU7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcAppbmRleCBmMDI3ZWVkMzE3MTQ0NGJjMzZhNDM0NDc2M2I3M2UxMmRiMmEw
MjY3Li5hZTA4M2Q4OTAxOTlkMDIzNWZlMTBkNTA4NzA0ZWMyYWM5M2M2Y2ZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVl
VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUv
Rm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0zMTksMjUgKzMxOSwyNCBAQCBSZWY8Rm9udD4gRm9u
dENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aQogewogICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBo
ZXJlLCBvdGhlcndpc2UgdGhlIGxvZ2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwogICAgIC8vIG1h
dGNoZXMgZm9yIG5vbi1mYWxsYmFjayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFsbGJh
Y2tGb250QWxsb3dlZC4KLSAgICBzdGF0aWMgQXRvbVN0cmluZyB0aW1lc1N0cigic2VyaWYiKTsK
LSAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgdGltZXNTdHIpKQotICAgICAgICByZXR1cm4gKmZvbnQ7CisgICAgaWYgKFJlZlB0cjxGb250
PiBmb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sICJzZXJpZiJfcykpCisgICAg
ICAgIHJldHVybiBmb250LnJlbGVhc2VOb25OdWxsKCk7CiAKICAgICAvLyBUaGlzIGNvdWxkIGJl
IHJlYWNoZWQgZHVlIHRvIGltcHJvcGVybHktaW5zdGFsbGVkIG9yIG1pc2NvbmZpZ3VyZWQgZm9u
dGNvbmZpZy4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1WZWN0b3I8
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZv
bnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9u
dFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0
RmFtaWx5TmFtZVN0cmluZ0Zyb21GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQorc3Rh
dGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBTdHJpbmcmIGZh
bWlseSkKIHsKICAgICAvLyBJZiB3ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4g
Ii13ZWJraXQtbW9ub3NwYWNlIiksIGNvbnZlcnQgdGhlIG5hbWUgaW50bwogICAgIC8vIHRoZSBm
YWxsYmFjayBuYW1lIChsaWtlICJtb25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFu
ZHMuCiAgICAgaWYgKGZhbWlseS5sZW5ndGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJr
aXQtIikpCi0gICAgICAgIHJldHVybiBmYW1pbHkuc3RyaW5nKCk7CisgICAgICAgIHJldHVybiBm
YW1pbHk7CiAKICAgICBpZiAoZmFtaWx5ID09IHN0YW5kYXJkRmFtaWx5IHx8IGZhbWlseSA9PSBz
ZXJpZkZhbWlseSkKICAgICAgICAgcmV0dXJuICJzZXJpZiI7CkBAIC01MDAsNyArNDk5LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGlzQ29tbW9ubHlVc2VkR2VuZXJpY0ZhbWlseShjb25zdCBTdHJp
bmcmIGZhbWlseU5hbWVTdHJpbmcpCiAgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGZhbWlseU5hbWVTdHJpbmcsICJjdXJzaXZlIik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzKQogewogICAgIC8vIFRoZSBDU1MgZm9udCBtYXRjaGluZyBhbGdvcml0aG0g
KGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGht
KQogICAgIC8vIHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQgYW4gZXhhY3QgbWF0Y2ggZm9yIGZvbnQg
ZmFtaWx5LCBzbGFudCAoaXRhbGljIG9yIG9ibGlxdWUgY2FuIGJlIHVzZWQpCkBAIC01OTksOSAr
NTk4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcGxhdGZvcm1EYXRh
OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJikKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENh
Y2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJikKIHsKLSAgICBy
ZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAjaWYgRU5B
QkxFKFZBUklBVElPTl9GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4
dC5tbQppbmRleCA0NTExMDdiYmI0NjViZGUzOTU0NDlkYzA3OGQ4MDVhOGUxNjRmOGE0Li5jOGMx
ODEwNDgzNGJiYzNkYWM1YWUzNmM2MzBlNGM1Mzc0OGM3NTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRl
eHQubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBDb21wbGV4
VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjcCwKICAgICAgICAgaXNTeXN0ZW1GYWxsYmFjayA9IHRydWU7CiAKICAgICAgICAg
VTE2X0dFVChjcCwgMCwgMCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgZm9udCA9
IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rl
cik7CisgICAgICAgIGZvbnQgPSBtX2ZvbnQuZm9udEZvckNoYXJhY3RlcigwLCBiYXNlQ2hhcmFj
dGVyKTsKICAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAgZm9udCA9ICZtX2ZvbnQuZmFs
bGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgICAgICAgICAgZm9udCA9
ICZtX2ZvbnQuZm9udEZvckZpcnN0UmFuZ2UoKTsKICAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9
IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCwgZm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC5lbmFibGVLZXJuaW5nKCks
IGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIG1fZm9udC5mb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZExvY2FsZSgpKS5nZXQoKSkpOwogICAgICAgICAvLyBXZSBkb24ndCBrbm93
IHdoaWNoIGZvbnQgc2hvdWxkIGJlIHVzZWQgdG8gcmVuZGVyIHRoaXMgZ3JhcGhlbWUgY2x1c3Rl
ciwgc28gZW5hYmxlIENvcmVUZXh0J3MgZmFsbGJhY2sgbWVjaGFuaXNtIGJ5IHVzaW5nIHRoZSBD
VEZvbnQgd2hpY2ggZG9lc24ndCBoYXZlIENvcmVUZXh0J3MgZmFsbGJhY2sgZGlzYWJsZWQuCiAg
ICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGNvbnN0X2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4oc3RyaW5nQXR0cmlidXRlcy5nZXQoKSksIGtDVEZvbnRBdHRyaWJ1dGVOYW1lLCBmb250
LT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOwpAQCAtMTg3LDggKzE4Nyw4IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1
YWxpdHlPYmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1
bkNURm9udCk7CiAgICAgICAgICAgICBpZiAoIVdURjo6c2FmZUNGRXF1YWwocnVuRm9udEVxdWFs
aXR5T2JqZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNo
ZWNrKCkuZ2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBp
ZiBydW5Gb250IG1hdGNoZXMgYW55IG9mIHRoZSBmb250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4K
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFu
Z2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0g
bV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhbV9mb250LmZhbGxiYWNr
UmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBt
X2ZvbnQuZm9udEZvckNoYXJhY3RlcihpLCBiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFydW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2Jq
ZWN0LmdldCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2
Yzk2MzgyZjYxMy4uMDMxNjZlZDgwMmZiOTQzNjljMTlkY2M1Zjg3NTExNmRkOTE3NDE0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKQEAgLTM2Miw5ICszNjIsOSBAQCBib29sIEZvbnRDYWNoZTo6aXNTeXN0ZW1Gb250
Rm9yYmlkZGVuRm9yRWRpdGluZyhjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZv
bnQsIEF0b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIFN0cmluZyYgb3V0Rm9udEZhbWls
eU5hbWUpCiB7Ci0gICAgQXRvbVN0cmluZyBmYW1pbHlOYW1lKGZvbnQubGZGYWNlTmFtZSwgd2Nz
bmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CisgICAgU3RyaW5nIGZhbWlseU5h
bWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUp
KTsKICAgICBSZWZQdHI8Rm9udD4gZm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFt
aWx5TmFtZSA9IGZhbWlseU5hbWU7CkBAIC0zNzMsNyArMzczLDcgQEAgUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb24KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKIAogICAgIGlm
ICghZmFsbGJhY2tGb250TmFtZS5nZXQoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAqZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udE5hbWUpOwpAQCAtMzg0LDEy
ICszODQsMTIgQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKICAgICAvLyBTZWFyY2ggYWxsIHR5
cGljYWwgV2luZG93cy1pbnN0YWxsZWQgZnVsbCBVbmljb2RlIGZvbnRzLgogICAgIC8vIFNvcnRl
ZCBieSBtb3N0IHRvIGxlYXN0IGdseXBocyBhY2NvcmRpbmcgdG8gaHR0cDovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9Vbmljb2RlX3R5cGVmYWNlcwogICAgIC8vIFN0YXJ0IHdpdGggVGltZXMgTmV3
IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIHVzZXIgZG9lc24ndCBj
aGFuZ2UgcHJlZnMuCi0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBmYWxsYmFja0ZvbnRzW10gPSB7Ci0gICAgICAgIEF0b21TdHJpbmcoIlRpbWVz
IE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAg
QXRvbVN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIlRhaG9tYSIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiTHVjaWRhIFNhbnMgVW5p
Y29kZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0
cmluZygiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBmYWxsYmFja0ZvbnRzW10gPSB7CisgICAg
ICAgIFN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksCisgICAgICAgIFN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJUYWhvbWEiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiQXJpYWwiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQogICAgIH07CiAgICAgUmVmUHRyPEZvbnQ+IHNp
bXBsZUZvbnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZh
bGxiYWNrRm9udHMpOyArK2kpIHsKQEAgLTUxMiw3ICs1MTIsNyBAQCBzdGF0aWMgaW50IENBTExC
QUNLIG1hdGNoSW1wcm92aW5nRW51bVByb2MoQ09OU1QgTE9HRk9OVCogY2FuZGlkYXRlLCBDT05T
VCBURVhUTQogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVh
dGVHRElGb250KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0LCBi
b29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCitzdGF0
aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBM
T05HIGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJvb2wgc3lu
dGhlc2l6ZUl0YWxpYykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC01NzAsMTIgKzU3MCwx
MiBAQCBzdGF0aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZwogfQogCiBzdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQ
cm9jRGF0YSB7Ci0gICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lKQorICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgU3RyaW5nJiBmYW1p
bHlOYW1lKQogICAgICAgICA6IG1fZmFtaWx5TmFtZShmYW1pbHlOYW1lKQogICAgIHsKICAgICB9
CiAKLSAgICBjb25zdCBBdG9tU3RyaW5nJiBtX2ZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5n
JiBtX2ZhbWlseU5hbWU7CiAgICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IG1f
Y2FwYWJpbGl0aWVzOwogfTsKIApAQCAtNjI2LDcgKzYyNiw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJB
Q0sgdHJhaXRzSW5GYW1pbHlFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBsb2dGb250LCBDT05TVCBU
RVhUTUVUCiAgICAgcmV0dXJuIDE7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3Rv
cjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKQogewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAgLTY0Niw3ICs2NDYsNyBA
QCBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6
dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyosIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4g
Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyosIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgYm9v
bCBpc0x1Y2lkYUdyYW5kZSA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwg
Imx1Y2lkYSBncmFuZGUiKTsKIApAQCAtNjkyLDExICs2OTIsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRD
YWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRp
bWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29m
dFNhbnNTZXJpZigiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0KICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAv
LyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBj
b250ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IFRpbWVzIE5ldyBS
b21hbiBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNlcmlmLApAQCAt
NzA1LDcgKzcwMiw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVl
ZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgODoKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzZXJpZiIpKQotICAg
ICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVz
IE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9u
J3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBv
cnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRl
cm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcx
MSwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24g
b3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAg
ICAgICAgIHJldHVybiBtaWNyb3NvZnRTYW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gIk1p
Y3Jvc29mdCBTYW5zIFNlcmlmIl9zOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJu
IG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAppbmRleCBjOWYwZjgxM2JjYjYz
NjYxNTRiYzA0YmVhNTAzYzYyNGZhZWEwMWI1Li41NWYxYjFhZjdmYTFkOWM5MjZhMDE3NjA5MjU0
MWJmYmEwNzZiZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVj
dCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlk
aUNvbnRleHQ+IHsKK3N0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CiAgICAgdWludDMyX3QgYml0
ZmllbGRzIDogMTY7CiAgICAgdm9pZCogcGFyZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuaAppbmRleCBkNGM0ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5
NjcwZDM5YmQzNGQxLi41YThkOTA5ZWVhOTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2EyNjAzZDcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCkBAIC0yMiwxNSAr
MjIsMTUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGVudW0gQmlkaUVtYmVkZGluZ1NvdXJjZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9tVW5pY29kZSB9
OwogCiAvLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZXhwbGljaXQgZW1iZWRkaW5ncy4KLWNsYXNz
IEJpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK2NsYXNzIEJp
ZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CiBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRl
KHVuc2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlID0gZmFs
c2UsIEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlkaUNvbnRleHQqIHBh
cmVudCA9IG51bGxwdHIpOwogCg==
</data>
<flag name="commit-queue"
          id="443060"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423627</attachid>
            <date>2021-03-18 11:49:03 -0700</date>
            <delta_ts>2021-03-18 12:05:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210318184901.patch</filename>
            <type>text/plain</type>
            <size>65282</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uY2M1OThiYmM2
MmU2MzM1NDM4NWIwODYxN2NkM2M3ODY1OTEwYWE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmlu
ZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5n
cyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsKQEAgLTE0MSwzOSArMTMyLDMzIEBAIHN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxGb250UGxhCiAKIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cz4gRm9u
dFBsYXRmb3JtRGF0YUNhY2hlOwogCitzdGF0aWMgTG9jayBnUGxhdGZvcm1EYXRhQ2FjaGVMb2Nr
OworCiBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IGNh
Y2hlOwogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRp
b25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRp
bWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLQotICAgIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgaWYgKCFw
bGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlLmlzTnVsbCgpKQorICAgIGlmIChhdXRvIHBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFt
ZSkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlOwogCiAgICAgc3dp
dGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImFyaWFsIikpCi0gICAgICAg
ICAgICByZXR1cm4gaGVsdmV0aWNhOworICAgICAgICAgICAgcmV0dXJuICJIZWx2ZXRpY2EiX3M7
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
dGltZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAg
cmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNzoK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllck5ldzsKKyAgICAgICAgICAgIHJl
dHVybiAiQ291cmllciBOZXciX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgOToKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJoZWx2ZXRp
Y2EiKSkKLSAgICAgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICAgICAgICAgIHJldHVybiAiQXJp
YWwiX3M7CiAgICAgICAgIGJyZWFrOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8vIE9uIFdpbmRv
d3MsIENvdXJpZXIgTmV3IGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IGlzIGFsd2F5cyBwcmVzZW50
IGFuZApAQCAtMTgzLDMzICsxNjgsMjggQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjph
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgLy8g
b25seSBiZSB0cmllZCBpZiBDb3VyaWVyIE5ldyBpcyBub3QgZm91bmQuCiAgICAgY2FzZSAxMToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIG5ldyIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXI7CisgICAgICAgICAgICBy
ZXR1cm4gIkNvdXJpZXIiX3M7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSAxNToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0
aW1lcyBuZXcgcm9tYW4iKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lczsKKyAgICAgICAgICAg
IHJldHVybiAiVGltZXMiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2VkRmFtaWx5TmFt
ZSwKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LSAgICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAg
Ly8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwg
ZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZs
b3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJl
LgotICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yaWVudGF0b2lu
LCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVsw
XSAhPSAnQCcpID8KLSAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJpbmcocGFzc2Vk
RmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CisgICAgLy8gSUUgZGlzcmVnYXJkcyAi
QCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRpb24sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZp
b3IuCisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZS5zdWJz
dHJpbmcocGFzc2VkRmFtaWx5TmFtZVswXSA9PSAnQCcgPyAxIDogMCk7CiAjZWxzZQotICAgIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAogICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjI4LDkgKzIwOCw4IEBAIEZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5h
bWUpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2Ug
aGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAog
ICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3
LCBldGMuICBUcnkgbG9va2luZyB1cCB0aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgot
ICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZh
bWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1E
YXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxp
dGllcywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQ
bGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShm
b250RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFj
ZUNhcGFiaWxpdGllcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkg
aW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZl
CiAgICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNh
bGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgogICAgICAgICAgICAgICAgIGl0ID0g
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZmluZChrZXkpOwpAQCAtMzEyLDggKzI5MSwxMCBAQCBj
b25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IHVuc2ln
bmVkIGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3Qg
dW5zaWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0Fs
dGVybmF0ZU5hbWUpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAg
ICAgaWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogCkBAIC0zMjUsMTAgKzMwNiw4IEBAIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvCiAKIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAgICAK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwpAQCAtMzQwLDYgKzMxOSw4
IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAg
ICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmds
ZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIHVuc2lnbmVkIGluYWN0aXZlRm9u
dERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIApAQCAtMzU3LDE1ICsz
MzgsMTMgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkK
IAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNv
dW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIExPRyhG
b250cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdlQ291bnQp
OwogCiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsK
ICAgICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLQogICAg
IHdoaWxlIChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250
c1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVl
cygpKSB7CkBAIC00MjEsNiArNDAwLDcgQEAgc3RhdGljIGJvb2wga2V5c01hdGNoKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIKIAogdm9p
ZCBGb250Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKIHsKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNsZWFyKCk7
CiB9CiAKQEAgLTQzNywxMiArNDE3LDE4IEBAIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mCiAgICAg
dW5zaWduZWQgZmFtaWx5Q291bnQgPSBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOwogICAgIGtl
eS5mYW1pbGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZhbWlseUNvdW50KTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFtaWx5Q291bnQ7ICsraSkKLSAgICAgICAga2V5LmZhbWls
aWVzLnVuY2hlY2tlZEFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAgICAgIGtl
eS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkuc3RyaW5n
KCkpOwogICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rv
ci0+dW5pcXVlSWQoKSA6IDA7CiAgICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250U2Vs
ZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CiAgICAgcmV0dXJuIGtleTsKIH0K
IAorc3RhdGljIHZvaWQgaXNvbGF0ZUZvbnRDYXNjYWRlQ2FjaGVLZXkoRm9udENhc2NhZGVDYWNo
ZUtleSYga2V5KQoreworICAgIGZvciAoYXV0byYgZmFtaWx5IDoga2V5LmZhbWlsaWVzKQorICAg
ICAgICBmYW1pbHkgPSBmYW1pbHkuaXNvbGF0ZWRDb3B5KCk7Cit9CisKIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYg
a2V5KQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgaGFzaCB0aGUga2V5IGFuZCB0aGUgZmFtaWx5
IG5hbWUgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBtYWtpbmcgYSBoYXNoIG91dCBvZiBvdGhlciBo
YXNoZXMuCkBAIC00NzksNiArNDY1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNo
ZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGtleXNNYXRjaChhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5rZXksIGtleSkpCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5mb250cy5nZXQoKTsKIAorICAgIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KGtleSk7
CiAgICAgYXV0byYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIG5l
d0VudHJ5ID0gbWFrZVVuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KFdURk1vdmUoa2V5KSwg
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogICAgIFJl
ZjxGb250Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CkBAIC00
OTcsNiArNDg0LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNoZTo6cmV0cmlldmVP
ckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKIAogdm9pZCBGb250Q2FjaGU6
OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZvbnRzKHJldHJpZXZlT3JBZGRD
YWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgV1RGTW92ZShmb250U2Vs
ZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0OTUsOCBAQCBzaXplX3QgRm9udENhY2hlOjpmb250
Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiB7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2Nr
KTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIHVu
c2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZh
bHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKQEAgLTUyMiw2ICs1MDks
OCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7CiAKIHZvaWQgRm9u
dENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhnUGxhdGZvcm1EYXRhQ2FjaGVMb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpCiAgICAgICAgIGdDbGllbnRzID0gbmV3IEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj47CiAKQEAg
LTUzMSw2ICs1MjAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYg
Y2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xp
ZW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+Y29udGFp
bnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRp
b24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZh
bGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNo
ZUxvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRm
b3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4
MCw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYp
CiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYy
ZS4uM2RlNmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBA
QAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
Y3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzks
NyArODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUo
ZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwg
bV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRl
c2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRp
bmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9u
U2V0dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1
Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBG
b250U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJy
YXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9j
YWxlOworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVh
dHVyZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRp
bmdzOwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFz
aCB7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25L
ZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9u
dENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4g
ZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQg
Zm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBA
IC0yMjQsMTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0
cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0
YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdo
ZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFz
IGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3Ry
aW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBu
dWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+
IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0
cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAg
LTI0Nyw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAK
ICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3Ry
aW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBT
dHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBF
X1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENh
c2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
aW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBh
YmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBB
dG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNh
cGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxp
dGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAg
IFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBt
X3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBt
X3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAg
ICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcg
QEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHks
IG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMw
MzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgK
QEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChj
b25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgp
IGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQp
IGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsK
KyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2Vz
SW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdl
KCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBi
b29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25z
dCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBz
aXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBG
b250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRz
LT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250
UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2Zv
bnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwor
ICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRp
b24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9y
Q2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIo
bV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3Qg
Rm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9u
dERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRj
aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEw
MmMzMTkyNDgwNDNmYTc0NjRhZGMuLjdkNzZmMmFmZmI4NjZhYjg0Yzk5YzhhZmIzYzFhYzRiMDNk
Y2JkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNv
bnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQog
Ci1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZh
bWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwo
KSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1
cm4gZmFtaWx5MSA9PSBmYW1pbHkyOwpAQCAtMTEwLDEyICsxMTIsOCBAQCBib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5MSwgY29ucwogICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZh
bWlseTEsIGZhbWlseTIpOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpm
YW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5leGlzdGluZ0hhc2goKTsKLSNlbmRpZgogICAgIHJldHVybiBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNh
ZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgK
QEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9m
YW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBB
dG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1p
bHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBm
b2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZl
RmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3
MTEyNDdkMjE3NmQ1NzYzNTIzNC4uZDc5MjY0MDc2MTZmMGVkYzgxODUyODZkYWFjMzQ1MjUxZTBi
MzM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAKQEAgLTExOSw2ICsxMTksNyBAQCBGb250Q2FzY2FkZUZvbnRzOjp+
Rm9udENhc2NhZGVGb250cygpID0gZGVmYXVsdDsKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpk
ZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCAhbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzLnNpemUoKSk7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBw
cmltYXJ5UmFuZ2VzLnNpemUoKTsKICAgICBpZiAobnVtUmFuZ2VzID09IDEpCkBAIC0xMjksNiAr
MTMwLDcgQEAgdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIAogYm9vbCBGb250Q2FzY2FkZUZvbnRz
Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvciAoYXV0byYgZm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxs
YmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc0xvYWRpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDExICsxNzgsMTEgQEAgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXMKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKIAorICAg
IEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24o
KS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBGb250
UmFuZ2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSByZWFs
aXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgs
IG1fZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTkwLDQ0IEBAIGNvbnN0IEZvbnRS
YW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZv
bnRDYXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZv
bnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAgICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJh
bmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2
ZUZhbWlseUNvdW50KCkpCisgICAgICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxs
YmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxl
Y3Rvci5nZXQoKSk7CisKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250
U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxi
YWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOworICAgICAgICAg
ICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggIT0gbV9mb250U2VsZWN0b3ItPmZhbGxi
YWNrRm9udENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleDsKKyAgICAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRT
ZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNr
SW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3Vu
dCgpKQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlv
biwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChXVEZNb3ZlKGZvbnRSYW5nZXMpKTsK
KyAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKK30KIAotICAgIGlm
IChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VS
VChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFt
aWx5Q291bnQoKSk7Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzLnNpemUoKSA8PSBpbmRleCk7CisgICAgYXV0byYgcmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KTsKKyAgICByZXR1cm4gcmFuZ2Vz
LmlzTnVsbCgpOworfQogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5k
ZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBt
X2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
b250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKLSAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQorY29uc3Qg
Rm9udCogRm9udENhc2NhZGVGb250czo6Zm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgsIFVDaGFyMzIgY2hhcmFj
dGVyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlcy5zaXplKCkgPD0gaW5kZXgpOworICAgIGF1dG8mIHJhbmdlcyA9IHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCk7CisgICAgcmV0dXJuIHJhbmdl
cy5mb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdl
czsKK2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2tJZihtX2xvY2ssICFtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsK
KyAgICBhdXRvJiByYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCk7CisgICAgcmV0dXJuIHJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91
bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzQ2LDEwIEBAIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250KiBm
aW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCitjb25zdCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5kQmVzdEZhbGxiYWNrRm9udChj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgOyArK2ZhbGxiYWNr
SW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZvbnRDYXNjYWRlRm9udHMucmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAg
ICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9udCA9IGZvbnRSYW5nZXMuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9s
aWN5OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM2NSwxMCBAQCBzdGF0aWMgY29uc3QgRm9u
dCogZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250
cywgY29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVt
RmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hv
dWxkQmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9udCA9IGZpbmRCZXN0RmFsbGJh
Y2tGb250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKKyAgICBjb25zdCBGb250KiBm
b250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CiAKICAg
ICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSAmZm9udEZv
ckZpcnN0UmFuZ2UoZGVzY3JpcHRpb24pOwogCiAgICAgYXV0byBzeXN0ZW1GYWxsYmFja0ZvbnQg
PSBmb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBkZXNjcmlw
dGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCA/IElzRm9yUGxhdGZvcm1Gb250OjpZZXMgOiBJc0Zv
clBsYXRmb3JtRm9udDo6Tm8pOwogICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250KQpAQCAtNDg4
LDkgKzUxMSw5IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJh
bmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250Q2Fz
Y2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAodmFy
aWFudCAhPSBOb3JtYWxWYXJpYW50KQogICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFu
dChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAKQEAgLTUxNiw2ICs1MzksNyBAQCBHbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFs
bGJhY2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYg
KG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi5mNWRlYmRl
MjM2MTExNzBjNjVlYzMyYjU5OTdlZTk1MmEwZWUxNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQzLDcgKzQ0
LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFz
cyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4g
eworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxG
b250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVG
b250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
Rm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENh
Y2hlOyB9CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCk7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJh
Y2tSYW5nZXNJbmRleCwgVUNoYXIzMik7CisgICAgY29uc3QgRm9udCYgZm9udEZvckZpcnN0UmFu
Z2UoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAgdm9pZCBwcnVuZVN5c3Rl
bUZhbGxiYWNrcygpOwogCkBAIC03OCw5ICs4MSwxMiBAQCBwcml2YXRlOgogICAgIEZvbnRDYXNj
YWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxi
YWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJl
SW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNp
Z25lZCBmYWxsYmFja0luZGV4KTsKKwogICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IHsgMCB9OwogCkBAIC0xMTQsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBz
aG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9Owog
ICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBMb2Nr
IG1fbG9jazsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRj
aChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTEyNSw3ICsx
MzIsMTAgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQmIEZv
bnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1f
Y2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsK
KworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAoIW1fY2FjaGVk
UHJpbWFyeUZvbnQpIHsKICAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNv
dXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFh
NjM5ODBiNjEwMDZkODVjMmY1MC4uMWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJj
MGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVj
dG9yLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0ID0gMDsKIH07CiAKLWNsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZv
bnRTZWxlY3Rvcj4geworY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3Rv
cigpID0gZGVmYXVsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2UuaAppbmRleCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44
Y2Y5Y2RhY2ZiN2FiNGUwZjgxMTE2OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAj
aW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcg
KzU3LDcgQEAgc3RydWN0IEdseXBoRGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZp
eGVkLXNpemUgc2V0IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyBy
YW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMg
YXJlIGluZGV4ZWQKIC8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNo
ICJzaXplIiBudW1iZXIgb2YgZ2x5cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNv
dW50ZWQ8R2x5cGhQYWdlPiB7CitjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+
IGNyZWF0ZShjb25zdCBGb250JiBmb250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5j
cHAKaW5kZXggYTA4ODJmN2MyY2Y4YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZGUxNDcx
NmZiMWQ2ZmE1YThhZjU0NTE1NjgwZThmZjZmODFhMDE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEyOSw4ICsxMjksOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9u
dEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAg
ICAgICAmJiAoIXByZWZlckNvbG9yZWRGb250IHx8IGJhc2VGb250LT5wbGF0Zm9ybURhdGEoKS5p
c0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgcmV0dXJuIGJhc2VGb250OwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFs
bGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZmFsbGJh
Y2tGb250ID0gZm9udEZvckNoYXJhY3RlcihpLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZh
bGxiYWNrRm9udCB8fCBmYWxsYmFja0ZvbnQgPT0gYmFzZUZvbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3
MWI2YzI1YzQxZjM3MmRlNTI0YjEuLmJiYzM5MzZlNTE3ZTk4Yjk5NjYxZTc5YmE4Y2U0NzYxNzQx
YTUxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRh
aW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZv
bnQsIGNvbnN0IEZvbnREZXNjcgogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlX
aXRoQXR0cmlidXRlcyhvcmlnaW5hbEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwg
bnVsbHB0ciwgZGVzY3JpcHRvci5nZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHkpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkK
IHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1h
dGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1
ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRh
aW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KQEAgLTYyOCwyNyArNjI4LDE5IEBAIFJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IEF0CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0
aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNl
IGZvbnRzLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJt
b25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIp
KSB7Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllcigiY291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwot
ICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9u
YWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkK
KyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsK
IAogICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7
Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAg
IH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRh
IGdyYW5kZSIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZl
cmRhbmEiX3MpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBh
cmFiaWMoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0
byIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJVcmR1IikpOwotICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10g
PSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWlu
KCJHZWV6YVBybyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgi
R2VlemFQcm8tQm9sZCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBm
b3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewotICAgICAgICBpZiAoZmFtaWx5
LmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEFTQ0lJTGl0ZXJhbCBtYXRjaFdvcmRzW10gPSB7ICJBcmFiaWMiX3MsICJQYXNodG8iX3Ms
ICJVcmR1Il9zIH07CisgICAgYXV0byBmYW1pbHlNYXRjaGVyID0gU3RyaW5nVmlldyhmYW1pbHkp
OworICAgIGZvciAoYXV0byBtYXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7CisgICAgICAgIGlmIChm
YW1pbHlNYXRjaGVyLmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UobWF0Y2hXb3JkKSkKKyAgICAg
ICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9z
KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBA
IHN0YXRpYyBjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9u
dChjb25zdCBGb250RGF0YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxs
ZWRGb250c1tpbmRleF07CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBG
b250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6
OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWls
eU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQog
ewogICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFs
bG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93
aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93
aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0
YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25z
dCBhdXRvJiBmb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5h
bWUpOwogICAgIGlmIChmb250cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAg
LTExMDgsMTAgKzExMDAsMTAgQEAgc3RydWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRl
ZEZyb21Qb3N0U2NyaXB0TmFtZSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBw
bGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9y
bUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9u
UmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250
QWxsb3dsaXN0KCk7Ci0gICAgaWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBh
bGxvd2xpc3Quc2l6ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAo
IWlzU3lzdGVtRm9udChmYW1pbHkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5j
b250YWlucyhmYW1pbHkpKQogICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250
c2VyaWYiKQpAQCAtMTEyMyw3ICsxMTE1LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1G
b250TG9va3VwV2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAg
ICB9CiAKICAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25B
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNh
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRz
ID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAg
ICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFt
aWx5KGZhbWlseSk7CiAgICAgaWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFt
ZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0g
dG8gYWxzbwogICAgICAgICAvLyBzdXBwb3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBp
bnN0ZWFkLiBIb3dldmVyLCB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJv
cGVydGllcyAoZm9udC13ZWlnaHQsCkBAIC0xMTc3LDcgKzExNjksNyBAQCBzdGF0aWMgdm9pZCBp
bnZhbGlkYXRlRm9udENhY2hlKCkKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRh
dGUoKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3Bl
Y2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdp
dGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZv
bnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVu
dCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnRE
ZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1E
ZXNpZ247CkBAIC0xMjA2LDcgKzExOTgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAg
aWYgKGZhbWlseS5zdGFydHNXaXRoKCJVSUNURm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNv
bnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3Qo
KTsKICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJv
bGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0Jv
bGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwg
KGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAg
ICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhU
ZXh0U3R5bGUoZmFtaWx5LnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRo
ZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoVGV4dFN0eWxlKGZhbWlseS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNv
Y29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAg
ICAgaWYgKHRyYWl0cykKICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRy
YWl0cywgdHJhaXRzKSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9u
dHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAt
MTI0MCw3ICsxMjMyLDcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFt
aWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQg
c2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7
CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MTI4Myw3ICsxMjc1LDcgQEAgc3RhdGljIHZvaWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJp
bmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkKIH0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHks
IGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1
ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAg
ICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAg
LTEyOTYsNyArMTI4OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8g
QXV0byBhY3RpdmF0ZSB0aGUgZm9udCBiZWZvcmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGlt
ZS4KICAgICAgICAgLy8gSWdub3JlIHRoZSByZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBv
dXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxseSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRv
QWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmcoKSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0
ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAogICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFt
aWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0
aWVzLCBzaXplKTsKICAgICB9CkBAIC0xNDI4LDcgKzE0MjAsNyBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwog
fQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4
OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0g
eyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzNiwxMCArMTQyOCwxMCBAQCBjb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9
IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMs
IDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25z
dGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0Mi
X3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50
ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7
CiAgICAgY2FzZSAyOgpAQCAtMTQ3NCw3ICsxNDY2LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVk
Rm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKQEAgLTE1NDcsNyArMTUzOSw3IEBAIFJl
ZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0
dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93
IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3
aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9y
RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsK
IAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4OWYyMTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAz
OTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQwN2M4MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuaApAQCAtNjIsNyArNjIsNyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFy
aWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0
YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBj
bGFzcyBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3lu
dGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0
ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNp
emUpOworUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBm
bG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9u
dERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJ
bnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0
YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZm
MDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uY2Q1OTRjNTVmZGM4NzgyZWIz
ZWMyYmM4YjQ2M2E1ZmZhNzQ3YzNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKQEAgLTMxNiw4ICszMTYsOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogCiAgICAgYm9v
bCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChpKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZhbGxiYWNrRm9udCA9IGZvbnRGb3JD
aGFyYWN0ZXIoaSwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZm9udCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKaW5kZXggZjAyN2VlZDMxNzE0NDRiYzM2YTQzNDQ3NjNiNzNlMTJkYjJhMDI2
Ny4uYWUwODNkODkwMTk5ZDAyMzVmZTEwZDUwODcwNGVjMmFjOTNjNmNmYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMzE5LDI1ICszMTksMjQgQEAgUmVmPEZvbnQ+IEZvbnRD
YWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGkKIHsKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQgaGVy
ZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAgICAvLyBtYXRj
aGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNr
Rm9udEFsbG93ZWQuCi0gICAgc3RhdGljIEF0b21TdHJpbmcgdGltZXNTdHIoInNlcmlmIik7Ci0g
ICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24s
IHRpbWVzU3RyKSkKLSAgICAgICAgcmV0dXJuICpmb250OworICAgIGlmIChSZWZQdHI8Rm9udD4g
Zm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAic2VyaWYiX3MpKQorICAgICAg
ICByZXR1cm4gZm9udC5yZWxlYXNlTm9uTnVsbCgpOwogCiAgICAgLy8gVGhpcyBjb3VsZCBiZSBy
ZWFjaGVkIGR1ZSB0byBpbXByb3Blcmx5LWluc3RhbGxlZCBvciBtaXNjb25maWd1cmVkIGZvbnRj
b25maWcuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotVmVjdG9yPEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFi
aWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKIHsKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEZh
bWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3N0YXRp
YyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1p
bHkpCiB7CiAgICAgLy8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcuICIt
d2Via2l0LW1vbm9zcGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KICAgICAvLyB0aGUgZmFs
bGJhY2sgbmFtZSAobGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3RhbmRz
LgogICAgIGlmIChmYW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFydHNXaXRoKCItd2Via2l0
LSIpKQotICAgICAgICByZXR1cm4gZmFtaWx5LnN0cmluZygpOworICAgICAgICByZXR1cm4gZmFt
aWx5OwogCiAgICAgaWYgKGZhbWlseSA9PSBzdGFuZGFyZEZhbWlseSB8fCBmYW1pbHkgPT0gc2Vy
aWZGYW1pbHkpCiAgICAgICAgIHJldHVybiAic2VyaWYiOwpAQCAtNTAwLDcgKzQ5OSw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1vbmx5VXNlZEdlbmVyaWNGYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lU3RyaW5nKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHlOYW1lU3RyaW5nLCAiY3Vyc2l2ZSIpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcykKIHsKICAgICAvLyBUaGUgQ1NTIGZvbnQgbWF0Y2hpbmcgYWxnb3JpdGhtICho
dHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSkK
ICAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBmaW5kIGFuIGV4YWN0IG1hdGNoIGZvciBmb250IGZh
bWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxpcXVlIGNhbiBiZSB1c2VkKQpAQCAtNTk5LDkgKzU5
OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsK
IH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUoY29uc3QgQXRvbVN0cmluZyYpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0
dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogI2lmIEVOQUJM
RShWQVJJQVRJT05fRk9OVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQu
bW0KaW5kZXggNDUxMTA3YmJiNDY1YmRlMzk1NDQ5ZGMwNzhkODA1YThlMTY0ZjhhNC4uYzhjMTgx
MDQ4MzRiYmMzZGFjNWFlMzZjNjMwZTRjNTM3NDhjNzU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpAQCAtMTI1LDkgKzEyNSw5IEBAIHZvaWQgQ29tcGxleFRl
eHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBV
Q2hhciogY3AsCiAgICAgICAgIGlzU3lzdGVtRmFsbGJhY2sgPSB0cnVlOwogCiAgICAgICAgIFUx
Nl9HRVQoY3AsIDAsIDAsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGZvbnQgPSBt
X2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIp
OworICAgICAgICBmb250ID0gbV9mb250LmZvbnRGb3JDaGFyYWN0ZXIoMCwgYmFzZUNoYXJhY3Rl
cik7CiAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgIGZvbnQgPSAmbV9mb250LmZhbGxi
YWNrUmFuZ2VzQXQoMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgIGZvbnQgPSAm
bV9mb250LmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQs
IDAsIGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQuZW5hYmxlS2VybmluZygpLCBm
b250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9u
KCkuY29tcHV0ZWRMb2NhbGUoKSkuZ2V0KCkpKTsKICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3
aGljaCBmb250IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciB0aGlzIGdyYXBoZW1lIGNsdXN0ZXIs
IHNvIGVuYWJsZSBDb3JlVGV4dCdzIGZhbGxiYWNrIG1lY2hhbmlzbSBieSB1c2luZyB0aGUgQ1RG
b250IHdoaWNoIGRvZXNuJ3QgaGF2ZSBDb3JlVGV4dCdzIGZhbGxiYWNrIGRpc2FibGVkLgogICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShjb25zdF9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlS
ZWY+KHN0cmluZ0F0dHJpYnV0ZXMuZ2V0KCkpLCBrQ1RGb250QXR0cmlidXRlTmFtZSwgZm9udC0+
cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKQEAgLTE4Nyw4ICsxODcsOCBAQCB2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNwLAogICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFs
aXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhydW5D
VEZvbnQpOwogICAgICAgICAgICAgaWYgKCFXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0
eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVj
aygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRyeWluZyB0byBzZWUgaWYg
cnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMgaW4gdGhlIGZhbGxiYWNrIGxpc3QuCi0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdl
c0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG1f
Zm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jh
bmdlc0FyZU51bGwoaSk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9m
b250LmZvbnRGb3JDaGFyYWN0ZXIoaSwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghcnVuRm9udCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoV1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250LT5wbGF0Zm9ybURh
dGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVj
dC5nZXQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDJiNGI1NTcyYTRkODA4YjgzYjRiMGY0YWE2NGY5NmM5
NjM4MmY2MTMuLjAzMTY2ZWQ4MDJmYjk0MzY5YzE5ZGNjNWY4NzUxMTZkZDkxNzQxNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwCkBAIC0zNjIsOSArMzYyLDkgQEAgYm9vbCBGb250Q2FjaGU6OmlzU3lzdGVtRm9udEZv
cmJpZGRlbkZvckVkaXRpbmcoY29uc3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250
LCBBdG9tU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBTdHJpbmcmIG91dEZvbnRGYW1pbHlO
YW1lKQogewotICAgIEF0b21TdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25s
ZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOworICAgIFN0cmluZyBmYW1pbHlOYW1l
KGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7
CiAgICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIGZhbWlseU5hbWUpOwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgb3V0Rm9udEZhbWls
eU5hbWUgPSBmYW1pbHlOYW1lOwpAQCAtMzczLDcgKzM3Myw3IEBAIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9uCiAKIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7Ci0gICAgc3RhdGljIE1haW5U
aHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CiAKICAgICBpZiAo
IWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gKmZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnROYW1lKTsKQEAgLTM4NCwxMiAr
Mzg0LDEyIEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAgLy8gU2VhcmNoIGFsbCB0eXBp
Y2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KICAgICAvLyBTb3J0ZWQg
YnkgbW9zdCB0byBsZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvVW5pY29kZV90eXBlZmFjZXMKICAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5ldyBS
b21hbiBhbHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2hh
bmdlIHByZWZzLgotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gZmFsbGJhY2tGb250c1tdID0gewotICAgICAgICBBdG9tU3RyaW5nKCJUaW1lcyBO
ZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0
b21TdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJUYWhvbWEiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNv
ZGUiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJp
bmcoIkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZmFsbGJhY2tGb250c1tdID0geworICAgICAg
ICBTdHJpbmcoIlRpbWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiVGFob21hIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIkFyaWFsIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKICAgICB9OwogICAgIFJlZlB0cjxGb250PiBzaW1w
bGVGb250OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChmYWxs
YmFja0ZvbnRzKTsgKytpKSB7CkBAIC01MTIsNyArNTEyLDcgQEAgc3RhdGljIGludCBDQUxMQkFD
SyBtYXRjaEltcHJvdmluZ0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1Qg
VEVYVE0KICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRl
R0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9v
bCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3RhdGlj
IEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9O
RyBkZXNpcmVkV2VpZ2h0LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRo
ZXNpemVJdGFsaWMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzAsMTIg
QEAgc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJv
Y0RhdGEgewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSkKKyAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZSkKICAgICAgICAgOiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQog
Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYg
bV9mYW1pbHlOYW1lOwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2Nh
cGFiaWxpdGllczsKIH07CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCBzdGF0aWMgaW50IENBTExCQUNL
IHRyYWl0c0luRmFtaWx5RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVY
VE1FVAogICAgIHJldHVybiAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
cz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ2LDcgQEAg
VmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllc0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wg
aXNMdWNpZGFHcmFuZGUgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJs
dWNpZGEgZ3JhbmRlIik7CiAKQEAgLTY5MiwxMSArNjkyLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2Fj
aGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5U
aHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1l
cyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRT
YW5zU2VyaWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8g
T24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29u
dGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9t
YW4gYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcw
NSw3ICs3MDIsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJu
YXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQg
aXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBO
ZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0
IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0
LgogICAgIC8vIFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJu
YXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTEs
MTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90
aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAg
ICAgICByZXR1cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJNaWNy
b3NvZnQgU2FucyBTZXJpZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBu
dWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2
MTU0YmMwNGJlYTUwM2M2MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFi
ZmJhMDc2YmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRp
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3Qg
U2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlD
b250ZXh0PiB7CitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZp
ZWxkcyA6IDE2OwogICAgIHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlDb250ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3
MGQzOWJkMzRkMS4uNWE4ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIy
LDE1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBl
bnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsK
IAogLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBC
aWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRp
Q29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1
bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNl
LCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJl
bnQgPSBudWxscHRyKTsKIAo=
</data>
<flag name="commit-queue"
          id="443062"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423629</attachid>
            <date>2021-03-18 11:53:47 -0700</date>
            <delta_ts>2021-03-18 12:18:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210318185346.patch</filename>
            <type>text/plain</type>
            <size>65274</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uY2M1OThiYmM2
MmU2MzM1NDM4NWIwODYxN2NkM2M3ODY1OTEwYWE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmlu
ZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5n
cyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsKQEAgLTE0MSwzOSArMTMyLDMzIEBAIHN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxGb250UGxhCiAKIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cz4gRm9u
dFBsYXRmb3JtRGF0YUNhY2hlOwogCitzdGF0aWMgTG9jayBnUGxhdGZvcm1EYXRhQ2FjaGVMb2Nr
OworCiBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IGNh
Y2hlOwogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRp
b25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRp
bWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLQotICAgIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgaWYgKCFw
bGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlLmlzTnVsbCgpKQorICAgIGlmIChhdXRvIHBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFt
ZSkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlOwogCiAgICAgc3dp
dGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImFyaWFsIikpCi0gICAgICAg
ICAgICByZXR1cm4gaGVsdmV0aWNhOworICAgICAgICAgICAgcmV0dXJuICJIZWx2ZXRpY2EiX3M7
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
dGltZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAg
cmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNzoK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllck5ldzsKKyAgICAgICAgICAgIHJl
dHVybiAiQ291cmllciBOZXciX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgOToKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJoZWx2ZXRp
Y2EiKSkKLSAgICAgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICAgICAgICAgIHJldHVybiAiQXJp
YWwiX3M7CiAgICAgICAgIGJyZWFrOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8vIE9uIFdpbmRv
d3MsIENvdXJpZXIgTmV3IGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IGlzIGFsd2F5cyBwcmVzZW50
IGFuZApAQCAtMTgzLDMzICsxNjgsMjggQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjph
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgLy8g
b25seSBiZSB0cmllZCBpZiBDb3VyaWVyIE5ldyBpcyBub3QgZm91bmQuCiAgICAgY2FzZSAxMToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIG5ldyIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXI7CisgICAgICAgICAgICBy
ZXR1cm4gIkNvdXJpZXIiX3M7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSAxNToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0
aW1lcyBuZXcgcm9tYW4iKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lczsKKyAgICAgICAgICAg
IHJldHVybiAiVGltZXMiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2VkRmFtaWx5TmFt
ZSwKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LSAgICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAg
Ly8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwg
ZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZs
b3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJl
LgotICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yaWVudGF0b2lu
LCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVsw
XSAhPSAnQCcpID8KLSAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJpbmcocGFzc2Vk
RmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CisgICAgLy8gSUUgZGlzcmVnYXJkcyAi
QCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRpb24sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZp
b3IuCisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZS5zdWJz
dHJpbmcocGFzc2VkRmFtaWx5TmFtZVswXSA9PSAnQCcgPyAxIDogMCk7CiAjZWxzZQotICAgIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAogICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjI4LDkgKzIwOCw4IEBAIEZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5h
bWUpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2Ug
aGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAog
ICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3
LCBldGMuICBUcnkgbG9va2luZyB1cCB0aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgot
ICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZh
bWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1E
YXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxp
dGllcywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQ
bGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShm
b250RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFj
ZUNhcGFiaWxpdGllcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkg
aW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZl
CiAgICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNh
bGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgogICAgICAgICAgICAgICAgIGl0ID0g
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZmluZChrZXkpOwpAQCAtMzEyLDggKzI5MSwxMCBAQCBj
b25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IHVuc2ln
bmVkIGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3Qg
dW5zaWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0Fs
dGVybmF0ZU5hbWUpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAg
ICAgaWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogCkBAIC0zMjUsMTAgKzMwNiw4IEBAIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvCiAKIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAgICAK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwpAQCAtMzQwLDYgKzMxOSw4
IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAg
ICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmds
ZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIHVuc2lnbmVkIGluYWN0aXZlRm9u
dERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIApAQCAtMzU3LDE1ICsz
MzgsMTMgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkK
IAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNv
dW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIExPRyhG
b250cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdlQ291bnQp
OwogCiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsK
ICAgICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLQogICAg
IHdoaWxlIChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250
c1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVl
cygpKSB7CkBAIC00MjEsNiArNDAwLDcgQEAgc3RhdGljIGJvb2wga2V5c01hdGNoKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIKIAogdm9p
ZCBGb250Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKIHsKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNsZWFyKCk7
CiB9CiAKQEAgLTQzNywxMiArNDE3LDE4IEBAIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mCiAgICAg
dW5zaWduZWQgZmFtaWx5Q291bnQgPSBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOwogICAgIGtl
eS5mYW1pbGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZhbWlseUNvdW50KTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFtaWx5Q291bnQ7ICsraSkKLSAgICAgICAga2V5LmZhbWls
aWVzLnVuY2hlY2tlZEFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAgICAgIGtl
eS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkuc3RyaW5n
KCkpOwogICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rv
ci0+dW5pcXVlSWQoKSA6IDA7CiAgICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250U2Vs
ZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CiAgICAgcmV0dXJuIGtleTsKIH0K
IAorc3RhdGljIHZvaWQgaXNvbGF0ZUZvbnRDYXNjYWRlQ2FjaGVLZXkoRm9udENhc2NhZGVDYWNo
ZUtleSYga2V5KQoreworICAgIGZvciAoYXV0byYgZmFtaWx5IDoga2V5LmZhbWlsaWVzKQorICAg
ICAgICBmYW1pbHkgPSBmYW1pbHkuaXNvbGF0ZWRDb3B5KCk7Cit9CisKIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYg
a2V5KQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgaGFzaCB0aGUga2V5IGFuZCB0aGUgZmFtaWx5
IG5hbWUgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBtYWtpbmcgYSBoYXNoIG91dCBvZiBvdGhlciBo
YXNoZXMuCkBAIC00NzksNiArNDY1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNo
ZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGtleXNNYXRjaChhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5rZXksIGtleSkpCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5mb250cy5nZXQoKTsKIAorICAgIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KGtleSk7
CiAgICAgYXV0byYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIG5l
d0VudHJ5ID0gbWFrZVVuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KFdURk1vdmUoa2V5KSwg
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogICAgIFJl
ZjxGb250Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CkBAIC00
OTcsNiArNDg0LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNoZTo6cmV0cmlldmVP
ckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKIAogdm9pZCBGb250Q2FjaGU6
OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZvbnRzKHJldHJpZXZlT3JBZGRD
YWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgV1RGTW92ZShmb250U2Vs
ZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0OTUsOCBAQCBzaXplX3QgRm9udENhY2hlOjpmb250
Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiB7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2Nr
KTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIHVu
c2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZh
bHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKQEAgLTUyMiw2ICs1MDks
OCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7CiAKIHZvaWQgRm9u
dENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhnUGxhdGZvcm1EYXRhQ2FjaGVMb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpCiAgICAgICAgIGdDbGllbnRzID0gbmV3IEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj47CiAKQEAg
LTUzMSw2ICs1MjAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYg
Y2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xp
ZW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+Y29udGFp
bnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRp
b24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZh
bGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNo
ZUxvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRm
b3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4
MCw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYp
CiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYy
ZS4uM2RlNmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBA
QAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
Y3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzks
NyArODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUo
ZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwg
bV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRl
c2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRp
bmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9u
U2V0dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1
Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBG
b250U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJy
YXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9j
YWxlOworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVh
dHVyZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRp
bmdzOwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFz
aCB7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25L
ZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9u
dENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4g
ZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQg
Zm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBA
IC0yMjQsMTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0
cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0
YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdo
ZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFz
IGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3Ry
aW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBu
dWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+
IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0
cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAg
LTI0Nyw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAK
ICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3Ry
aW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBT
dHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBF
X1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENh
c2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
aW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBh
YmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBB
dG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNh
cGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxp
dGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAg
IFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBt
X3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBt
X3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAg
ICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcg
QEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHks
IG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMw
MzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgK
QEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChj
b25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgp
IGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQp
IGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsK
KyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2Vz
SW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdl
KCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBi
b29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25z
dCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBz
aXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBG
b250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRz
LT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250
UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2Zv
bnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwor
ICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRp
b24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9y
Q2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIo
bV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3Qg
Rm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9u
dERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRj
aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEw
MmMzMTkyNDgwNDNmYTc0NjRhZGMuLjdkNzZmMmFmZmI4NjZhYjg0Yzk5YzhhZmIzYzFhYzRiMDNk
Y2JkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNv
bnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQog
Ci1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZh
bWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwo
KSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1
cm4gZmFtaWx5MSA9PSBmYW1pbHkyOwpAQCAtMTEwLDEyICsxMTIsOCBAQCBib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5MSwgY29ucwogICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZh
bWlseTEsIGZhbWlseTIpOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpm
YW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5leGlzdGluZ0hhc2goKTsKLSNlbmRpZgogICAgIHJldHVybiBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNh
ZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgK
QEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9m
YW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBB
dG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1p
bHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBm
b2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZl
RmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3
MTEyNDdkMjE3NmQ1NzYzNTIzNC4uZDc5MjY0MDc2MTZmMGVkYzgxODUyODZkYWFjMzQ1MjUxZTBi
MzM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAKQEAgLTExOSw2ICsxMTksNyBAQCBGb250Q2FzY2FkZUZvbnRzOjp+
Rm9udENhc2NhZGVGb250cygpID0gZGVmYXVsdDsKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpk
ZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCAhbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzLnNpemUoKSk7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBw
cmltYXJ5UmFuZ2VzLnNpemUoKTsKICAgICBpZiAobnVtUmFuZ2VzID09IDEpCkBAIC0xMjksNiAr
MTMwLDcgQEAgdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIAogYm9vbCBGb250Q2FzY2FkZUZvbnRz
Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvciAoYXV0byYgZm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxs
YmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc0xvYWRpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDExICsxNzgsMTEgQEAgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXMKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKIAorICAg
IEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24o
KS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBGb250
UmFuZ2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSByZWFs
aXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgs
IG1fZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTkwLDQ0IEBAIGNvbnN0IEZvbnRS
YW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZv
bnRDYXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZv
bnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAgICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJh
bmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2
ZUZhbWlseUNvdW50KCkpCisgICAgICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxs
YmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxl
Y3Rvci5nZXQoKSk7CisKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250
U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxi
YWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOworICAgICAgICAg
ICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggIT0gbV9mb250U2VsZWN0b3ItPmZhbGxi
YWNrRm9udENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleDsKKyAgICAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRT
ZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNr
SW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3Vu
dCgpKQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlv
biwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChXVEZNb3ZlKGZvbnRSYW5nZXMpKTsK
KyAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKK30KIAotICAgIGlm
IChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VS
VChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFt
aWx5Q291bnQoKSk7Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzLnNpemUoKSA8PSBpbmRleCk7CisgICAgYXV0byYgcmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KTsKKyAgICByZXR1cm4gcmFuZ2Vz
LmlzTnVsbCgpOworfQogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5k
ZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBt
X2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
b250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKLSAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQorY29uc3Qg
Rm9udCogRm9udENhc2NhZGVGb250czo6Zm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgsIFVDaGFyMzIgY2hhcmFj
dGVyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlcy5zaXplKCkgPD0gaW5kZXgpOworICAgIGF1dG8mIHJhbmdlcyA9IHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCk7CisgICAgcmV0dXJuIHJhbmdl
cy5mb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdl
czsKK2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2tJZihtX2xvY2ssICFtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsK
KyAgICBhdXRvJiByYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCk7CisgICAgcmV0dXJuIHJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91
bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzQ2LDEwIEBAIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250KiBm
aW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCitjb25zdCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5kQmVzdEZhbGxiYWNrRm9udChj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgOyArK2ZhbGxiYWNr
SW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZvbnRDYXNjYWRlRm9udHMucmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAg
ICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9udCA9IGZvbnRSYW5nZXMuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9s
aWN5OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM2NSwxMCBAQCBzdGF0aWMgY29uc3QgRm9u
dCogZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250
cywgY29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVt
RmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hv
dWxkQmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9udCA9IGZpbmRCZXN0RmFsbGJh
Y2tGb250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKKyAgICBjb25zdCBGb250KiBm
b250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CiAKICAg
ICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSAmZm9udEZv
ckZpcnN0UmFuZ2UoZGVzY3JpcHRpb24pOwogCiAgICAgYXV0byBzeXN0ZW1GYWxsYmFja0ZvbnQg
PSBmb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBkZXNjcmlw
dGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCA/IElzRm9yUGxhdGZvcm1Gb250OjpZZXMgOiBJc0Zv
clBsYXRmb3JtRm9udDo6Tm8pOwogICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250KQpAQCAtNDg4
LDkgKzUxMSw5IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJh
bmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250Q2Fz
Y2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAodmFy
aWFudCAhPSBOb3JtYWxWYXJpYW50KQogICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFu
dChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAKQEAgLTUxNiw2ICs1MzksNyBAQCBHbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFs
bGJhY2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYg
KG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi5mNWRlYmRl
MjM2MTExNzBjNjVlYzMyYjU5OTdlZTk1MmEwZWUxNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQzLDcgKzQ0
LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFz
cyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4g
eworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxG
b250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVG
b250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
Rm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENh
Y2hlOyB9CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCk7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJh
Y2tSYW5nZXNJbmRleCwgVUNoYXIzMik7CisgICAgY29uc3QgRm9udCYgZm9udEZvckZpcnN0UmFu
Z2UoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAgdm9pZCBwcnVuZVN5c3Rl
bUZhbGxiYWNrcygpOwogCkBAIC03OCw5ICs4MSwxMiBAQCBwcml2YXRlOgogICAgIEZvbnRDYXNj
YWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxi
YWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJl
SW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNp
Z25lZCBmYWxsYmFja0luZGV4KTsKKwogICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IHsgMCB9OwogCkBAIC0xMTQsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBz
aG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9Owog
ICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBMb2Nr
IG1fbG9jazsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRj
aChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTEyNSw3ICsx
MzIsMTAgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQmIEZv
bnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1f
Y2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsK
KworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAoIW1fY2FjaGVk
UHJpbWFyeUZvbnQpIHsKICAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNv
dXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFh
NjM5ODBiNjEwMDZkODVjMmY1MC4uMWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJj
MGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVj
dG9yLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0ID0gMDsKIH07CiAKLWNsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZv
bnRTZWxlY3Rvcj4geworY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3Rv
cigpID0gZGVmYXVsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2UuaAppbmRleCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44
Y2Y5Y2RhY2ZiN2FiNGUwZjgxMTE2OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAj
aW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcg
KzU3LDcgQEAgc3RydWN0IEdseXBoRGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZp
eGVkLXNpemUgc2V0IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyBy
YW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMg
YXJlIGluZGV4ZWQKIC8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNo
ICJzaXplIiBudW1iZXIgb2YgZ2x5cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNv
dW50ZWQ8R2x5cGhQYWdlPiB7CitjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+
IGNyZWF0ZShjb25zdCBGb250JiBmb250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5j
cHAKaW5kZXggYTA4ODJmN2MyY2Y4YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZGUxNDcx
NmZiMWQ2ZmE1YThhZjU0NTE1NjgwZThmZjZmODFhMDE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEyOSw4ICsxMjksOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9u
dEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAg
ICAgICAmJiAoIXByZWZlckNvbG9yZWRGb250IHx8IGJhc2VGb250LT5wbGF0Zm9ybURhdGEoKS5p
c0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgcmV0dXJuIGJhc2VGb250OwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFs
bGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZmFsbGJh
Y2tGb250ID0gZm9udEZvckNoYXJhY3RlcihpLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZh
bGxiYWNrRm9udCB8fCBmYWxsYmFja0ZvbnQgPT0gYmFzZUZvbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3
MWI2YzI1YzQxZjM3MmRlNTI0YjEuLmJiYzM5MzZlNTE3ZTk4Yjk5NjYxZTc5YmE4Y2U0NzYxNzQx
YTUxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRh
aW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZv
bnQsIGNvbnN0IEZvbnREZXNjcgogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlX
aXRoQXR0cmlidXRlcyhvcmlnaW5hbEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwg
bnVsbHB0ciwgZGVzY3JpcHRvci5nZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHkpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkK
IHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1h
dGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1
ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRh
aW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KQEAgLTYyOCwyNyArNjI4LDE5IEBAIFJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IEF0CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0
aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNl
IGZvbnRzLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJt
b25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIp
KSB7Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllcigiY291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwot
ICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9u
YWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkK
KyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsK
IAogICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7
Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAg
IH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRh
IGdyYW5kZSIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZl
cmRhbmEiX3MpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBh
cmFiaWMoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0
byIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJVcmR1IikpOwotICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10g
PSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWlu
KCJHZWV6YVBybyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgi
R2VlemFQcm8tQm9sZCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBm
b3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewotICAgICAgICBpZiAoZmFtaWx5
LmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEFTQ0lJTGl0ZXJhbCBtYXRjaFdvcmRzW10gPSB7ICJBcmFiaWMiX3MsICJQYXNodG8iX3Ms
ICJVcmR1Il9zIH07CisgICAgYXV0byBmYW1pbHlNYXRjaGVyID0gU3RyaW5nVmlldyhmYW1pbHkp
OworICAgIGZvciAoYXV0byBtYXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7CisgICAgICAgIGlmIChm
YW1pbHlNYXRjaGVyLmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UobWF0Y2hXb3JkKSkKKyAgICAg
ICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xk
KGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9z
KTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBA
IHN0YXRpYyBjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9u
dChjb25zdCBGb250RGF0YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxs
ZWRGb250c1tpbmRleF07CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBG
b250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6
OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWls
eU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQog
ewogICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFs
bG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93
aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93
aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0
YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25z
dCBhdXRvJiBmb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5h
bWUpOwogICAgIGlmIChmb250cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAg
LTExMDgsMTAgKzExMDAsMTAgQEAgc3RydWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRl
ZEZyb21Qb3N0U2NyaXB0TmFtZSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBw
bGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9y
bUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9u
UmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxv
d1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250
QWxsb3dsaXN0KCk7Ci0gICAgaWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBh
bGxvd2xpc3Quc2l6ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAo
IWlzU3lzdGVtRm9udChmYW1pbHkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5j
b250YWlucyhmYW1pbHkpKQogICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250
c2VyaWYiKQpAQCAtMTEyMyw3ICsxMTE1LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1G
b250TG9va3VwV2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAg
ICB9CiAKICAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9
PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25B
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNh
bGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRz
ID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAg
ICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFt
aWx5KGZhbWlseSk7CiAgICAgaWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAv
LyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFt
ZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0g
dG8gYWxzbwogICAgICAgICAvLyBzdXBwb3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBp
bnN0ZWFkLiBIb3dldmVyLCB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJv
cGVydGllcyAoZm9udC13ZWlnaHQsCkBAIC0xMTc3LDcgKzExNjksNyBAQCBzdGF0aWMgdm9pZCBp
bnZhbGlkYXRlRm9udENhY2hlKCkKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRh
dGUoKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3Bl
Y2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdp
dGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZv
bnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVu
dCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnRE
ZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1E
ZXNpZ247CkBAIC0xMjA2LDcgKzExOTgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAg
aWYgKGZhbWlseS5zdGFydHNXaXRoKCJVSUNURm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNv
bnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3Qo
KTsKICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJv
bGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0Jv
bGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwg
KGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAg
ICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhU
ZXh0U3R5bGUoZmFtaWx5LnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRo
ZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoVGV4dFN0eWxlKGZhbWlseS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNv
Y29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAg
ICAgaWYgKHRyYWl0cykKICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRy
YWl0cywgdHJhaXRzKSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9u
dHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAt
MTI0MCw3ICsxMjMyLDcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFt
aWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQg
c2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7
CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MTI4Myw3ICsxMjc1LDcgQEAgc3RhdGljIHZvaWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJp
bmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkKIH0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHks
IGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1
ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAg
ICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAg
LTEyOTYsNyArMTI4OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8g
QXV0byBhY3RpdmF0ZSB0aGUgZm9udCBiZWZvcmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGlt
ZS4KICAgICAgICAgLy8gSWdub3JlIHRoZSByZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBv
dXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxseSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRv
QWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmcoKSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0
ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAogICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFt
aWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0
aWVzLCBzaXplKTsKICAgICB9CkBAIC0xNDI4LDcgKzE0MjAsNyBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwog
fQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4
OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0g
eyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzNiwxMCArMTQyOCwxMCBAQCBjb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9
IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMs
IDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25z
dGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0Mi
X3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50
ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7
CiAgICAgY2FzZSAyOgpAQCAtMTQ3NCw3ICsxNDY2LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVk
Rm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKQEAgLTE1NDcsNyArMTUzOSw3IEBAIFJl
ZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0
dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93
IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3
aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9y
RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsK
IAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4OWYyMTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAz
OTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQwN2M4MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuaApAQCAtNjIsNyArNjIsNyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFy
aWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0
YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBj
bGFzcyBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3lu
dGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0
ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNp
emUpOworUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBm
bG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9u
dERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJ
bnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0
YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZm
MDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uMmJiNzEwMTU5MGVlYjE0ZGUx
NGY5NTFjNmIzYTBhM2NhODQyYzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKQEAgLTMxNiw4ICszMTYsOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogCiAgICAgYm9v
bCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChpKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmb250Rm9yQ2hhcmFjdGVy
KGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUu
Y3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLmFlMDgz
ZDg5MDE5OWQwMjM1ZmUxMGQ1MDg3MDRlYzJhYzkzYzZjZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKQEAgLTMxOSwyNSArMzE5LDI0IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
CiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVy
d2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Ig
bm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxv
d2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChS
ZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0
cikpCi0gICAgICAgIHJldHVybiAqZm9udDsKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBm
b250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKKyAgICAgICAgcmV0dXJu
IGZvbnQucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBk
dWUgdG8gaW1wcm9wZXJseS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0
aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJ
bkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0
b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1l
U3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5n
IGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewog
ICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1t
b25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5h
bWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBp
ZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAog
ICAgIGlmIChmYW1pbHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5
KQogICAgICAgICByZXR1cm4gInNlcmlmIjsKQEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNDb21tb25seVVzZWRHZW5lcmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5
TmFtZVN0cmluZykKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFt
aWx5TmFtZVN0cmluZywgImN1cnNpdmUiKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3Bl
Y2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMpCiB7CiAgICAgLy8gVGhlIENTUyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3
dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8g
c2F5cyB0aGF0IHdlIG11c3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNs
YW50IChpdGFsaWMgb3Igb2JsaXF1ZSBjYW4gYmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNv
bnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxs
QXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4
IDQ1MTEwN2JiYjQ2NWJkZTM5NTQ0OWRjMDc4ZDgwNWE4ZTE2NGY4YTQuLmM4YzE4MTA0ODM0YmJj
M2RhYzVhZTM2YzYzMGU0YzUzNzQ4Yzc1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0KQEAgLTEyNSw5ICsxMjUsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNw
LAogICAgICAgICBpc1N5c3RlbUZhbGxiYWNrID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNw
LCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBmb250ID0gbV9mb250LmZh
bGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAg
ICAgZm9udCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKDAsIGJhc2VDaGFyYWN0ZXIpOwogICAg
ICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdl
c0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgICAgICBmb250ID0gJm1fZm9udC5m
b250Rm9yRmlyc3RSYW5nZSgpOwogICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250
LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LmVuYWJsZUtlcm5pbmcoKSwgZm9udC0+cGxh
dGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1
dGVkTG9jYWxlKCkpLmdldCgpKSk7CiAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggZm9u
dCBzaG91bGQgYmUgdXNlZCB0byByZW5kZXIgdGhpcyBncmFwaGVtZSBjbHVzdGVyLCBzbyBlbmFi
bGUgQ29yZVRleHQncyBmYWxsYmFjayBtZWNoYW5pc20gYnkgdXNpbmcgdGhlIENURm9udCB3aGlj
aCBkb2Vzbid0IGhhdmUgQ29yZVRleHQncyBmYWxsYmFjayBkaXNhYmxlZC4KICAgICAgICAgQ0ZE
aWN0aW9uYXJ5U2V0VmFsdWUoY29uc3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJp
bmdBdHRyaWJ1dGVzLmdldCgpKSwga0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSk7CkBAIC0xODcsOCArMTg3LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
cCwKICAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVj
dCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsK
ICAgICAgICAgICAgIGlmICghV1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3Qu
Z2V0KCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQo
KSkpIHsKICAgICAgICAgICAgICAgICAvLyBCZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZvbnQg
bWF0Y2hlcyBhbnkgb2YgdGhlIGZvbnRzIGluIHRoZSBmYWxsYmFjayBsaXN0LgotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5p
c051bGwoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFs
bGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBcmVO
dWxsKGkpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mb250
Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
IXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKFdURjo6c2FmZUNGRXF1YWwocnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2Jq
ZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpLCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
Y2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEz
Li4wMzE2NmVkODAyZmI5NDM2OWMxOWRjYzVmODc1MTE2ZGQ5MTc0MTRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApA
QCAtMzYyLDkgKzM2Miw5IEBAIGJvb2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5G
b3JFZGl0aW5nKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0
cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsK
LSAgICBBdG9tU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQu
bGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250Lmxm
RmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJl
ZlB0cjxGb250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHlOYW1lKTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0g
ZmFtaWx5TmFtZTsKQEAgLTM3Myw3ICszNzMsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpm
b250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbgog
CiBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOwogCiAgICAgaWYgKCFmYWxsYmFj
a0ZvbnROYW1lLmdldCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5
KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CkBAIC0zODQsMTIgKzM4NCwxMiBA
QCBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aQogICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5k
b3dzLWluc3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCiAgICAgLy8gU29ydGVkIGJ5IG1vc3Qg
dG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L1VuaWNvZGVfdHlwZWZhY2VzCiAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxz
byBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVm
cy4KLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGZhbGxiYWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFu
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5n
KCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwKLSAgICAgICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlh
bCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgU3RyaW5n
KCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAg
ICAgU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAorICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAorICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpCiAgICAgfTsKICAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250
cyk7ICsraSkgewpAQCAtNTEyLDcgKzUxMiw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgbWF0Y2hJ
bXByb3ZpbmdFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBjYW5kaWRhdGUsIENPTlNUIFRFWFRNCiAg
ICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJl
ZEl0YWxpYywgaW50IHNpemUsIGJvb2wgc3ludGhlc2l6ZUl0YWxpYykKK3N0YXRpYyBHRElPYmpl
Y3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJl
ZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRh
bGljKQogewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAgLTU3MCwxMiArNTcwLDEyIEBAIHN0YXRp
YyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LCBMT05HIGRlc2lyZWRXZWlnCiB9CiAKIHN0cnVjdCBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHsK
LSAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUp
CisgICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiAg
ICAgICAgIDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCiAgICAgewogICAgIH0KIAotICAgIGNv
bnN0IEF0b21TdHJpbmcmIG1fZmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcmIG1fZmFtaWx5
TmFtZTsKICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRp
ZXM7CiB9OwogCkBAIC02MjYsNyArNjI2LDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJ
bkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVQKICAg
ICByZXR1cm4gMTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRD
YWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
c0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNjQ2LDcgKzY0Niw3IEBAIFZlY3RvcjxG
b250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBh
YmlsaXRpZXNJbkZhbWlsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwg
Rm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKIHsKICAgICBib29sIGlzTHVjaWRh
R3JhbmRlID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdy
YW5kZSIpOwogCkBAIC02OTIsMTEgKzY5Miw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0
Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09w
dGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJv
bWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbWljcm9zb2Z0U2Fuc1Nlcmlm
KCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLQogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIC8vIE9uIFdpbmRv
d3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhw
ZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgVGltZXMgTmV3IFJvbWFuIGFzIGFu
IGFsdGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2VyaWYsCkBAIC03MDUsNyArNzAy
LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90
aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSA4OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNlcmlmIikpCi0gICAgICAgICAgICBy
ZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAiVGltZXMgTmV3IFJvbWFu
Il9zOwogICAgICAgICBicmVhazsKICAgICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0
IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAv
LyBUaHVzIHdlIGFsbG93IE1pY3Jvc29mdCBTYW5zIFNlcmlmIGFzIGFuIGFsdGVybmF0aXZlIGZv
ciB0aGUgYml0bWFwIGZvbnQgTVMgU2FucyBTZXJpZiwKQEAgLTcxNCwxMCArNzExLDEwIEBAIGNv
bnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0
Zm9ybXMgdG9vLgogICAgIGNhc2UgMTM6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2FucyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0
dXJuIG1pY3Jvc29mdFNhbnNTZXJpZjsKKyAgICAgICAgICAgIHJldHVybiAiTWljcm9zb2Z0IFNh
bnMgU2VyaWYiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b20o
KTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRi
ZWE1MDNjNjI0ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJk
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBA
IC0yNiw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXpl
QXNCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4g
eworc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAx
NjsKICAgICB2b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpQ29udGV4dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0
ZDEuLjVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCaWRp
RW1iZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVz
ZWQgdG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRl
eHQgOiBwdWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4dD4geworY2xhc3MgQmlkaUNvbnRleHQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQg
Y2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVt
YmVkZGluZ1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVs
bHB0cik7CiAK
</data>
<flag name="commit-queue"
          id="443063"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423631</attachid>
            <date>2021-03-18 12:15:59 -0700</date>
            <delta_ts>2021-03-19 02:20:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210318191557.patch</filename>
            <type>text/plain</type>
            <size>65285</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uY2M1OThiYmM2
MmU2MzM1NDM4NWIwODYxN2NkM2M3ODY1OTEwYWE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsOSArNjQsOSBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKLSAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCisgICAgICAgICwg
bV9mYW1pbHkoZmFtaWx5Lmlzb2xhdGVkQ29weSgpKQogICAgICAgICAsIG1fZm9udEZhY2VGZWF0
dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVyZVNl
dHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZUNhcGFiaWxpdGllcyhmb250RmFjZUNhcGFi
aWxpdGllcykKICAgICB7IH0KQEAgLTEwMCw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBGb250RGVzY3JpcHRpb25LZXkgbV9mb250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmlu
ZyBtX2ZhbWlseTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5n
cyBtX2ZvbnRGYWNlRmVhdHVyZXM7CiAgICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxp
dGllcyBtX2ZvbnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsKQEAgLTE0MSwzOSArMTMyLDMzIEBAIHN0
cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNs
YXNzSGFzaFRyYWl0czxGb250UGxhCiAKIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cz4gRm9u
dFBsYXRmb3JtRGF0YUNhY2hlOwogCitzdGF0aWMgTG9jayBnUGxhdGZvcm1EYXRhQ2FjaGVMb2Nr
OworCiBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IGNh
Y2hlOwogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRp
b25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRp
bWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLQotICAgIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgaWYgKCFw
bGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlLmlzTnVsbCgpKQorICAgIGlmIChhdXRvIHBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFt
ZSkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlOwogCiAgICAgc3dp
dGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImFyaWFsIikpCi0gICAgICAg
ICAgICByZXR1cm4gaGVsdmV0aWNhOworICAgICAgICAgICAgcmV0dXJuICJIZWx2ZXRpY2EiX3M7
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
dGltZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAg
cmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNzoK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllck5ldzsKKyAgICAgICAgICAgIHJl
dHVybiAiQ291cmllciBOZXciX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgOToKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJoZWx2ZXRp
Y2EiKSkKLSAgICAgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICAgICAgICAgIHJldHVybiAiQXJp
YWwiX3M7CiAgICAgICAgIGJyZWFrOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8vIE9uIFdpbmRv
d3MsIENvdXJpZXIgTmV3IGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IGlzIGFsd2F5cyBwcmVzZW50
IGFuZApAQCAtMTgzLDMzICsxNjgsMjggQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjph
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgLy8g
b25seSBiZSB0cmllZCBpZiBDb3VyaWVyIE5ldyBpcyBub3QgZm91bmQuCiAgICAgY2FzZSAxMToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIG5ldyIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXI7CisgICAgICAgICAgICBy
ZXR1cm4gIkNvdXJpZXIiX3M7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSAxNToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0
aW1lcyBuZXcgcm9tYW4iKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lczsKKyAgICAgICAgICAg
IHJldHVybiAiVGltZXMiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2VkRmFtaWx5TmFt
ZSwKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LSAgICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAg
Ly8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwg
ZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZs
b3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJl
LgotICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yaWVudGF0b2lu
LCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVsw
XSAhPSAnQCcpID8KLSAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJpbmcocGFzc2Vk
RmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CisgICAgLy8gSUUgZGlzcmVnYXJkcyAi
QCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRpb24sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZp
b3IuCisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZS5zdWJz
dHJpbmcocGFzc2VkRmFtaWx5TmFtZVswXSA9PSAnQCcgPyAxIDogMCk7CiAjZWxzZQotICAgIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAogICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjI4LDkgKzIwOCw4IEBAIEZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVybmF0ZU5h
bWUpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250LiAgV2Ug
aGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5hbWVzLAog
ICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJpZXIgTmV3
LCBldGMuICBUcnkgbG9va2luZyB1cCB0aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBuYW1lLgot
ICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZh
bWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxhdGZvcm1E
YXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2Ny
aXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxp
dGllcywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJu
YXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGZvbnRQ
bGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShm
b250RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFj
ZUNhcGFiaWxpdGllcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRoZSBrZXkg
aW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1heSBoYXZl
CiAgICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJzaXZlIGNh
bGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgogICAgICAgICAgICAgICAgIGl0ID0g
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZmluZChrZXkpOwpAQCAtMzEyLDggKzI5MSwxMCBAQCBj
b25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0IHVuc2ln
bmVkIGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwogY29uc3Qg
dW5zaWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gMzA7
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNw
ZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0Fs
dGVybmF0ZU5hbWUpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAg
ICAgaWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOwogCkBAIC0zMjUsMTAgKzMwNiw4IEBAIFJlZlB0cjxGb250PiBGb250
Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvCiAKIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLSAgICAK
KyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKICAgICAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwpAQCAtMzQwLDYgKzMxOSw4
IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2
ZUZvbnREYXRhSWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAg
ICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmds
ZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIHVuc2lnbmVkIGluYWN0aXZlRm9u
dERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3Vy
ZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIApAQCAtMzU3LDE1ICsz
MzgsMTMgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkK
IAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNv
dW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIExPRyhG
b250cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdlQ291bnQp
OwogCiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsK
ICAgICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKLQogICAg
IHdoaWxlIChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250
c1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZhbHVl
cygpKSB7CkBAIC00MjEsNiArNDAwLDcgQEAgc3RhdGljIGJvb2wga2V5c01hdGNoKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIKIAogdm9p
ZCBGb250Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKIHsKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNsZWFyKCk7
CiB9CiAKQEAgLTQzNywxMiArNDE3LDE4IEBAIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mCiAgICAg
dW5zaWduZWQgZmFtaWx5Q291bnQgPSBkZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOwogICAgIGtl
eS5mYW1pbGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZhbWlseUNvdW50KTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZmFtaWx5Q291bnQ7ICsraSkKLSAgICAgICAga2V5LmZhbWls
aWVzLnVuY2hlY2tlZEFwcGVuZChkZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisgICAgICAgIGtl
eS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkuc3RyaW5n
KCkpOwogICAgIGtleS5mb250U2VsZWN0b3JJZCA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rv
ci0+dW5pcXVlSWQoKSA6IDA7CiAgICAga2V5LmZvbnRTZWxlY3RvclZlcnNpb24gPSBmb250U2Vs
ZWN0b3IgPyBmb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDA7CiAgICAgcmV0dXJuIGtleTsKIH0K
IAorc3RhdGljIHZvaWQgaXNvbGF0ZUZvbnRDYXNjYWRlQ2FjaGVLZXkoRm9udENhc2NhZGVDYWNo
ZUtleSYga2V5KQoreworICAgIGZvciAoYXV0byYgZmFtaWx5IDoga2V5LmZhbWlsaWVzKQorICAg
ICAgICBmYW1pbHkgPSBmYW1pbHkuaXNvbGF0ZWRDb3B5KCk7Cit9CisKIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYg
a2V5KQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgaGFzaCB0aGUga2V5IGFuZCB0aGUgZmFtaWx5
IG5hbWUgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBtYWtpbmcgYSBoYXNoIG91dCBvZiBvdGhlciBo
YXNoZXMuCkBAIC00NzksNiArNDY1LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNo
ZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKICAgICBp
ZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5ICYmIGtleXNNYXRjaChhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlLT5rZXksIGtleSkpCiAgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5mb250cy5nZXQoKTsKIAorICAgIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KGtleSk7
CiAgICAgYXV0byYgbmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgIG5l
d0VudHJ5ID0gbWFrZVVuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KFdURk1vdmUoa2V5KSwg
Rm9udENhc2NhZGVGb250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogICAgIFJl
ZjxGb250Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CkBAIC00
OTcsNiArNDg0LDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNoZTo6cmV0cmlldmVP
ckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKIAogdm9pZCBGb250Q2FjaGU6
OnVwZGF0ZUZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvbnRDYXNjYWRlLnVwZGF0ZUZvbnRzKHJldHJpZXZlT3JBZGRD
YWNoZWRGb250cyhmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgV1RGTW92ZShmb250U2Vs
ZWN0b3IpKSk7CiB9CiAKQEAgLTUwNyw5ICs0OTUsOCBAQCBzaXplX3QgRm9udENhY2hlOjpmb250
Q291bnQoKQogCiBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiB7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2Nr
KTsKLSNlbmRpZgorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIHVu
c2lnbmVkIGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygpLnZh
bHVlcygpKSB7CiAgICAgICAgIGlmIChmb250LT5oYXNPbmVSZWYoKSkKQEAgLTUyMiw2ICs1MDks
OCBAQCBzdGF0aWMgSGFzaFNldDxGb250U2VsZWN0b3IqPiogZ0NsaWVudHM7CiAKIHZvaWQgRm9u
dENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhnUGxhdGZvcm1EYXRhQ2FjaGVMb2NrKTsKKwogICAgIGlmICghZ0NsaWVu
dHMpCiAgICAgICAgIGdDbGllbnRzID0gbmV3IEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj47CiAKQEAg
LTUzMSw2ICs1MjAsOCBAQCB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYg
Y2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xp
ZW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VSVChnQ2xpZW50cy0+Y29udGFp
bnMoJmNsaWVudCkpOwogCkBAIC01NDEsMTEgKzUzMiwxNSBAQCBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgZ0dlbmVyYXRpb24gPSAwOwogCiB1bnNpZ25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRp
b24oKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9j
ayk7CisKICAgICByZXR1cm4gZ0dlbmVyYXRpb247CiB9CiAKIHZvaWQgRm9udENhY2hlOjppbnZh
bGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNo
ZUxvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRm
b3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4
MCw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYp
CiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYy
ZS4uM2RlNmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBA
QAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
Y3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzks
NyArODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUo
ZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rp
b25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwg
bV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRl
c2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRp
bmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9u
U2V0dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1
Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBG
b250U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJy
YXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9j
YWxlOworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVh
dHVyZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRp
bmdzOwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFz
aCB7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25L
ZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9u
dENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4g
ZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQg
Zm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBA
IC0yMjQsMTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0
cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0
YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdo
ZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFz
IGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5n
JiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3Ry
aW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBu
dWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+
IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0
cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChG
b250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAg
LTI0Nyw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAK
ICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3Ry
aW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBT
dHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBF
X1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENh
c2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBm
YWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
aW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVu
aXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0
dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBh
YmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBB
dG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNh
cGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxp
dGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAg
IFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBt
X3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBt
X3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAg
ICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcg
QEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHks
IG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExB
VEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMw
MzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgK
QEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChj
b25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgp
IGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQp
IGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsK
KyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2Vz
SW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdl
KCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBi
b29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25z
dCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBz
aXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBG
b250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRz
LT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250
UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2Zv
bnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOwor
ICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRp
b24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9y
Q2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIo
bV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3Qg
Rm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9u
dERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRj
aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEw
MmMzMTkyNDgwNDNmYTc0NjRhZGMuLjdkNzZmMmFmZmI4NjZhYjg0Yzk5YzhhZmIzYzFhYzRiMDNk
Y2JkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNv
bnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQog
Ci1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZh
bWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwo
KSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1
cm4gZmFtaWx5MSA9PSBmYW1pbHkyOwpAQCAtMTEwLDEyICsxMTIsOCBAQCBib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5MSwgY29ucwogICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZh
bWlseTEsIGZhbWlseTIpOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpm
YW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5leGlzdGluZ0hhc2goKTsKLSNlbmRpZgogICAgIHJldHVybiBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlv
bi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNh
ZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgK
QEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0
KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9m
YW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBB
dG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1p
bHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFt
ZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBm
b2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZl
RmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3
MTEyNDdkMjE3NmQ1NzYzNTIzNC4uZDc5MjY0MDc2MTZmMGVkYzgxODUyODZkYWFjMzQ1MjUxZTBi
MzM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAKQEAgLTExOSw2ICsxMTksNyBAQCBGb250Q2FzY2FkZUZvbnRzOjp+
Rm9udENhc2NhZGVGb250cygpID0gZGVmYXVsdDsKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpk
ZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCAhbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzLnNpemUoKSk7CiAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBw
cmltYXJ5UmFuZ2VzLnNpemUoKTsKICAgICBpZiAobnVtUmFuZ2VzID09IDEpCkBAIC0xMjksNiAr
MTMwLDcgQEAgdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIAogYm9vbCBGb250Q2FzY2FkZUZvbnRz
Ojppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGZvciAoYXV0byYgZm9udFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxs
YmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc0xvYWRpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDExICsxNzgsMTEgQEAgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXMKICAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzW2luZGV4XTsKIAorICAg
IEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOwogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24o
KS5nZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxsYmFj
a1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBGb250
UmFuZ2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSByZWFs
aXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgs
IG1fZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTkwLDQ0IEBAIGNvbnN0IEZvbnRS
YW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZv
bnRDYXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZv
bnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAgICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJh
bmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2
ZUZhbWlseUNvdW50KCkpCisgICAgICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxs
YmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxl
Y3Rvci5nZXQoKSk7CisKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250
U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxi
YWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOworICAgICAgICAg
ICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggIT0gbV9mb250U2VsZWN0b3ItPmZhbGxi
YWNrRm9udENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleDsKKyAgICAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRT
ZWxlY3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNr
SW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3Vu
dCgpKQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlv
biwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7Cisg
ICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChXVEZNb3ZlKGZvbnRSYW5nZXMpKTsK
KyAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKK30KIAotICAgIGlm
IChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VS
VChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFt
aWx5Q291bnQoKSk7Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzLnNpemUoKSA8PSBpbmRleCk7CisgICAgYXV0byYgcmFuZ2VzID0gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KTsKKyAgICByZXR1cm4gcmFuZ2Vz
LmlzTnVsbCgpOworfQogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5k
ZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9PSBt
X2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
b250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsKLSAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0
KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQorY29uc3Qg
Rm9udCogRm9udENhc2NhZGVGb250czo6Zm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgsIFVDaGFyMzIgY2hhcmFj
dGVyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlcy5zaXplKCkgPD0gaW5kZXgpOworICAgIGF1dG8mIHJhbmdlcyA9IHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCk7CisgICAgcmV0dXJuIHJhbmdl
cy5mb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdl
czsKK2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2tJZihtX2xvY2ssICFtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsK
KyAgICBhdXRvJiByYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCk7CisgICAgcmV0dXJuIHJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91
bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzQ2LDEwIEBAIHN0YXRpYyBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oVUNo
YXIzMiBjaGFyYWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyBjb25zdCBGb250KiBm
aW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCitjb25zdCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5kQmVzdEZhbGxiYWNrRm9udChj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgVUNoYXIzMiBjaGFyYWN0
ZXIpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMDsgOyArK2ZhbGxiYWNr
SW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZvbnRDYXNjYWRlRm9udHMucmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOworICAgICAg
ICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9udCA9IGZvbnRSYW5nZXMuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9s
aWN5OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM2NSwxMCBAQCBzdGF0aWMgY29uc3QgRm9u
dCogZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250
cywgY29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yU3lzdGVt
RmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hv
dWxkQmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9udCA9IGZpbmRCZXN0RmFsbGJh
Y2tGb250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKKyAgICBjb25zdCBGb250KiBm
b250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CiAKICAg
ICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVz
Y3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgIGZvbnQgPSAmZm9udEZv
ckZpcnN0UmFuZ2UoZGVzY3JpcHRpb24pOwogCiAgICAgYXV0byBzeXN0ZW1GYWxsYmFja0ZvbnQg
PSBmb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBkZXNjcmlw
dGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCA/IElzRm9yUGxhdGZvcm1Gb250OjpZZXMgOiBJc0Zv
clBsYXRmb3JtRm9udDo6Tm8pOwogICAgIGlmICghc3lzdGVtRmFsbGJhY2tGb250KQpAQCAtNDg4
LDkgKzUxMSw5IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJh
bmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250Q2Fz
Y2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJp
YW50KTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAodmFy
aWFudCAhPSBOb3JtYWxWYXJpYW50KQogICAgICAgICByZXR1cm4gZ2x5cGhEYXRhRm9yVmFyaWFu
dChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAKQEAgLTUxNiw2ICs1MzksNyBAQCBHbHlwaERh
dGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29u
c3QgRm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFs
bGJhY2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYg
KG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1OGY1YmFkMzhkLi5mNWRlYmRl
MjM2MTExNzBjNjVlYzMyYjU5OTdlZTk1MmEwZWUxNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiV2lkdGhDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTQzLDcgKzQ0
LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBoUGFnZTsKIAogREVDTEFS
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7Ci1jbGFz
cyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udENhc2NhZGVGb250cz4g
eworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxG
b250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9udENhc2NhZGVG
b250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIo
Rm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC03MCw3ICs3MSw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENh
Y2hlOyB9CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCk7CisgICAgY29uc3QgRm9udCogZm9udEZv
ckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJh
Y2tSYW5nZXNJbmRleCwgVUNoYXIzMik7CisgICAgY29uc3QgRm9udCYgZm9udEZvckZpcnN0UmFu
Z2UoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAgdm9pZCBwcnVuZVN5c3Rl
bUZhbGxiYWNrcygpOwogCkBAIC03OCw5ICs4MSwxMiBAQCBwcml2YXRlOgogICAgIEZvbnRDYXNj
YWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxi
YWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJl
SW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJl
YWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNp
Z25lZCBmYWxsYmFja0luZGV4KTsKKwogICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IHsgMCB9OwogCkBAIC0xMTQsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBz
aG9ydCBtX2dlbmVyYXRpb247CiAgICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9Owog
ICAgIGJvb2wgbV9pc0ZvclBsYXRmb3JtRm9udCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBMb2Nr
IG1fbG9jazsKIH07CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRj
aChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTEyNSw3ICsx
MzIsMTAgQEAgaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQmIEZv
bnRDYXNjYWRlRm9udHM6OnByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1f
Y2FjaGVkUHJpbWFyeUZvbnQpCisgICAgICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsK
KworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAoIW1fY2FjaGVk
UHJpbWFyeUZvbnQpIHsKICAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxs
YmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNv
dXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFh
NjM5ODBiNjEwMDZkODVjMmY1MC4uMWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJj
MGU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVj
dG9yLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0ID0gMDsKIH07CiAKLWNsYXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZv
bnRTZWxlY3Rvcj4geworY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3Rv
cigpID0gZGVmYXVsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhQYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2UuaAppbmRleCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44
Y2Y5Y2RhY2ZiN2FiNGUwZjgxMTE2OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAj
aW5jbHVkZSAiR2x5cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcg
KzU3LDcgQEAgc3RydWN0IEdseXBoRGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZp
eGVkLXNpemUgc2V0IG9mIEdseXBoRGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyBy
YW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMg
YXJlIGluZGV4ZWQKIC8vIHN0YXJ0aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNo
ICJzaXplIiBudW1iZXIgb2YgZ2x5cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNv
dW50ZWQ8R2x5cGhQYWdlPiB7CitjbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+
IGNyZWF0ZShjb25zdCBGb250JiBmb250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5j
cHAKaW5kZXggYTA4ODJmN2MyY2Y4YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZGUxNDcx
NmZiMWQ2ZmE1YThhZjU0NTE1NjgwZThmZjZmODFhMDE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKQEAgLTEyOSw4ICsxMjksOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9u
dEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAg
ICAgICAmJiAoIXByZWZlckNvbG9yZWRGb250IHx8IGJhc2VGb250LT5wbGF0Zm9ybURhdGEoKS5p
c0NvbG9yQml0bWFwRm9udCgpKSkKICAgICAgICAgcmV0dXJuIGJhc2VGb250OwogCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFs
bGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZmFsbGJh
Y2tGb250ID0gZm9udEZvckNoYXJhY3RlcihpLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZh
bGxiYWNrRm9udCB8fCBmYWxsYmFja0ZvbnQgPT0gYmFzZUZvbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3
MWI2YzI1YzQxZjM3MmRlNTI0YjEuLmEzOTMwNzhiMDE5NTM5NTgxYjJiNjJiNzc4NzJiOTg0MTA4
ODNlMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRh
aW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZv
bnQsIGNvbnN0IEZvbnREZXNjcgogICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlX
aXRoQXR0cmlidXRlcyhvcmlnaW5hbEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwg
bnVsbHB0ciwgZGVzY3JpcHRvci5nZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHkpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkK
IHsKICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1h
dGNoIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1
ZXN0ZWQgbmFtZXMuIEZvciBleGFtcGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRh
aW5zICJBcmFiaWMiIHRvIEdlZXphIFByby4KQEAgLTYyOCwyNyArNjI4LDE5IEBAIFJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IEF0CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0
aXR1dGUgdGhlIGRlZmF1bHQgbW9ub3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNl
IGZvbnRzLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJt
b25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIp
KSB7Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllcigiY291cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwot
ICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9u
YWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkK
KyAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsK
IAogICAgIC8vIFN1YnN0aXR1dGUgVmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7
Ci0gICAgICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gdmVyZGFuYSgidmVyZGFuYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAg
IH0KKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRh
IGdyYW5kZSIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZl
cmRhbmEiX3MpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBh
cmFiaWMoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIkFyYWJpYyIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwYXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0
byIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKCJVcmR1IikpOwotICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10g
PSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWlu
KCJHZWV6YVBybyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgi
R2VlemFQcm8tQm9sZCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBm
b3IgKFN0cmluZyogbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgewotICAgICAgICBpZiAoZmFtaWx5
LmNvbnRhaW5zSWdub3JpbmdBU0NJSUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyBnZWV6YUJvbGQgOiBnZWV6YVBsYWluKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEFTQ0lJTGl0ZXJhbCBtYXRjaFdvcmRzW10gPSB7ICJBcmFiaWMiX3MsICJQYXNodG8iX3Ms
ICJVcmR1Il9zIH07CisgICAgYXV0byBmYW1pbHlNYXRjaGVyID0gU3RyaW5nVmlldyhmYW1pbHkp
OworICAgIGZvciAoYXV0byYgbWF0Y2hXb3JkIDogbWF0Y2hXb3JkcykgeworICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlNYXRjaGVyLCBTdHJpbmdWaWV3KG1hdGNoV29y
ZCkpKQorICAgICAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gIkdlZXphUHJvLUJvbGQiX3MgOiAi
R2VlemFQcm8iX3MpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTEwODksMTAg
KzEwODEsMTAgQEAgc3RhdGljIGNvbnN0IEZvbnREYXRhYmFzZTo6SW5zdGFsbGVkRm9udCogZmlu
ZENsb3Nlc3RGb250KGNvbnN0IEZvbnREYXRhYmFzZTo6SW4KICAgICByZXR1cm4gJmZhbWlseUZv
bnRzLmluc3RhbGxlZEZvbnRzW2luZGV4XTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBh
YmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFs
bG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+
IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0
cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCiB7CiAgICAgYXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2lu
Z2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xl
dG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsKLSAgICBjb25zdCBhdXRvJiBmb250
cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUuc3RyaW5nKCkp
OworICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1p
bHkoZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZvbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKIApAQCAtMTEwOCwxMCArMTEwMCwxMCBAQCBzdHJ1Y3QgRm9udExvb2t1cCB7CiAgICAg
Ym9vbCBjcmVhdGVkRnJvbVBvc3RTY3JpcHROYW1lIHsgZmFsc2UgfTsKIH07CiAKLXN0YXRpYyBG
b250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBGb250TG9v
a3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIEZv
bnRTZWxlY3Rpb25SZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGNvbnN0IGF1dG8mIGFsbG93
bGlzdCA9IGZvbnRBbGxvd2xpc3QoKTsKLSAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkuc3Ry
aW5nKCkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkp
KQorICAgIGlmICghaXNTeXN0ZW1Gb250KGZhbWlseSkgJiYgYWxsb3dsaXN0LnNpemUoKSAmJiAh
YWxsb3dsaXN0LmNvbnRhaW5zKGZhbWlseSkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIgfTsK
IAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICIuYXBwbGVz
eXN0ZW11aWZvbnRzZXJpZiIpCkBAIC0xMTIzLDcgKzExMTUsNyBAQCBzdGF0aWMgRm9udExvb2t1
cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Rm9udFNlbAogICAgIH0KIAogICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6
OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNp
bmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYg
ZmFtaWx5Rm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkuc3Ry
aW5nKCkpOworICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxl
Y3Rpb25Gb3JGYW1pbHkoZmFtaWx5KTsKICAgICBpZiAoZmFtaWx5Rm9udHMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIC8vIFRoZSBDU1Mgc3BlYyBzdGF0ZXMgdGhhdCBmb250LWZhbWlseSBvbmx5IGFj
Y2VwdHMgYSBuYW1lIG9mIGFuIGFjdHVhbCBmb250IGZhbWlseS4gSG93ZXZlciwgaW4gV2ViS2l0
LCB3ZSBjbGFpbSB0byBhbHNvCiAgICAgICAgIC8vIHN1cHBvcnQgc3VwcGx5aW5nIGEgUG9zdFNj
cmlwdCBuYW1lIGluc3RlYWQuIEhvd2V2ZXIsIHRoaXMgY3JlYXRlcyBwcm9ibGVtcyB3aGVuIHRo
ZSBvdGhlciBwcm9wZXJ0aWVzIChmb250LXdlaWdodCwKQEAgLTExNzcsNyArMTE2OSw3IEBAIHN0
YXRpYyB2b2lkIGludmFsaWRhdGVGb250Q2FjaGUoKQogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuaW52YWxpZGF0ZSgpOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdp
dGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250
UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgLy8gRklYTUU6
IFNlZSBjb21tZW50IGluIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmVmZmVjdGl2ZUZhbWlseUF0
KCkgaW4gRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgT3B0aW9uYWw8U3lzdGVtRm9udEtp
bmQ+IHN5c3RlbURlc2lnbjsKQEAgLTEyMDYsNyArMTE5OCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8
Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseSwKICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIlVJQ1RGb250VGV4dFN0eWxlIikpIHsK
ICAgICAgICAgY29uc3QgYXV0byYgcmVxdWVzdCA9IGZvbnREZXNjcmlwdGlvbi5mb250U2VsZWN0
aW9uUmVxdWVzdCgpOwogICAgICAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSAoaXNG
b250V2VpZ2h0Qm9sZChyZXF1ZXN0LndlaWdodCkgfHwgRm9udENhY2hlOjpzaW5nbGV0b24oKS5z
aG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5KCkgPyBrQ1RGb250VHJhaXRC
b2xkIDogMCkgfCAoaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkgPyBrQ1RGb250VHJhaXRJdGFsaWMg
OiAwKTsKLSAgICAgICAgYXV0byBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9y
Q3JlYXRlV2l0aFRleHRTdHlsZShmYW1pbHkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwgUmVuZGVyVGhlbWVDb2NvYTo6c2luZ2xldG9uKCkuY29udGVudFNpemVDYXRlZ29yeSgpLCBm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygp
LmdldCgpKSk7CisgICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3Jp
cHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJl
bmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSkpOwogICAgICAgICBpZiAodHJhaXRzKQogICAgICAgICAgICAgZGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoU3ltYm9saWNUcmFpdHMoZGVzY3JpcHRv
ci5nZXQoKSwgdHJhaXRzLCB0cmFpdHMpKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZUZvbnRGb3JJ
bnN0YWxsZWRGb250cyhkZXNjcmlwdG9yLmdldCgpLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cyk7CkBAIC0xMjQwLDcgKzEyMzIsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0
aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0
aWVzLCBmbG9hdCBzaXplKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFt
aWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxv
YXQgc2l6ZSkKIHsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xMjgzLDcgKzEyNzUsNyBAQCBzdGF0aWMgdm9pZCBhdXRvQWN0aXZhdGVGb250
KGNvbnN0IFN0cmluZyYgbmFtZSwgQ0dGbG9hdCBzaXplKQogfQogI2VuZGlmCiAKLXN0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywg
Rm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykK
K3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0
aWVzKQogewogICAgIGZsb2F0IHNpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKTsKIApAQCAtMTI5Niw3ICsxMjg4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9y
bURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKIAog
ICAgICAgICAvLyBBdXRvIGFjdGl2YXRlIHRoZSBmb250IGJlZm9yZSBsb29raW5nIGZvciBpdCBh
IHNlY29uZCB0aW1lLgogICAgICAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBiZWNhdXNlIHdlIHdh
bnQgdG8gdXNlIG91ciBvd24gYWxnb3JpdGhtIHRvIGFjdHVhbGx5IGZpbmQgdGhlIGZvbnQuCi0g
ICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LnN0cmluZygpLCBzaXplKTsKKyAgICAgICAg
YXV0b0FjdGl2YXRlRm9udChmYW1pbHksIHNpemUpOwogCiAgICAgICAgIGZvbnQgPSBmb250V2l0
aEZhbWlseShmYW1pbHksIGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZh
Y2VDYXBhYmlsaXRpZXMsIHNpemUpOwogICAgIH0KQEAgLTE0MjgsNyArMTQyMCw3IEBAIFJlZlB0
cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEoYWx0ZXJu
YXRlRm9udCk7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxB
U0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgaGVpdGlTdHJp
bmdbXSA9IHsgMHg5ZWQxLCAweDRmNTMgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgc29uZ3Rp
U3RyaW5nW10gPSB7IDB4NWI4YiwgMHg0ZjUzIH07CkBAIC0xNDM2LDEwICsxNDI4LDEwIEBAIGNv
bnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5ZYUhl
aVN0cmluZ1tdID0geyAweDVmYWUsIDB4OGY2ZiwgMHg5NmM1LCAweDllZDEgfTsKICAgICBzdGF0
aWMgY29uc3QgVUNoYXIgd2VpcnVhblpoZW5nSGVpdGlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhl
ZGYsIDB4NmI2MywgMHg5ZWQxLCAweDlhZDQgfTsKIAotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc29uZ3RpU0MoIlNvbmd0aSBTQyIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVRDKCJTb25ndGkgVEMiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBoZWl0aVNDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFND
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlUQ1JlcGxhY2VtZW50KCJQ
aW5nRmFuZyBUQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBzb25ndGlTQyA9ICJTb25ndGkgU0MiX3M7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpVEMgPSAiU29uZ3RpIFRDIl9zOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGhlaXRpU0NSZXBsYWNlbWVudCA9ICJQ
aW5nRmFuZyBTQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVRD
UmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgVEMiX3M7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUu
bGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6CkBAIC0xNDc0LDcgKzE0NjYsNyBAQCBjb25zdCBBdG9t
U3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0
b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB2b2lkIGFkZEF0dHJpYnV0ZXNG
b3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQpAQCAtMTU0Nyw3ICsx
NTM5LDcgQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBGSVhNRTogV291bGQg
YmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVy
ZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIg
d291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBBdG9tU3RyaW5nKCJUaW1lcyIsIEF0
b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0g
Zm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sICJUaW1lcyJfcykpCiAgICAgICAgIHJldHVy
biAqcmVzdWx0OwogCiAgICAgLy8gTGFzdFJlc29ydCBpcyBndWFyYW50ZWVkIHRvIGJlIG5vbi1u
dWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENhY2hlQ29yZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKaW5kZXggOWFiYTg5ZjIxMzcwNzJkNDNhOGY4OThhZGRk
MThkYWQ2MjQ5MDM5NS4uZTg3Yjk2MTdlZGY5MDI0YjQwZDA3YzgxMTgwZmJkMDA0Y2YxM2Y3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q2FjaGVDb3JlVGV4dC5oCkBAIC02Miw3ICs2Miw3IEBAIHR5cGVkZWYgSGFzaE1hcDxG
b250VGFnLCBWYXJpYXRpb25EZWZhdWx0cywgRm91ckNoYXJhY3RlclRhZ0hhc2gsIEZvdXJDaGFy
YWN0ZXJUCiBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJlUGxhdGZvcm1Gb250KENURm9udFJl
ZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9u
dEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcywgYm9vbCBhcHBseVdlaWdodFdpZHRoU2xvcGVWYXJpYXRpb25zID0gdHJ1
ZSk7CiBlbnVtIGNsYXNzIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA6IGJvb2wgeyBObywg
WWVzIH07CiBTeW50aGVzaXNQYWlyIGNvbXB1dGVOZWNlc3NhcnlTeW50aGVzaXMoQ1RGb250UmVm
LCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgPSBT
aG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHM6Ok5vLCBib29sIGlzUGxhdGZvcm1Gb250ID0gZmFs
c2UpOwotUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9k
ZSwgZmxvYXQgc2l6ZSk7CitSZXRhaW5QdHI8Q1RGb250UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFt
aWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRl
cmluZ01vZGUsIGZsb2F0IHNpemUpOwogRm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyBjYXBhYmls
aXRpZXNGb3JGb250RGVzY3JpcHRvcihDVEZvbnREZXNjcmlwdG9yUmVmKTsKIHZvaWQgYWRkQXR0
cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRl
cywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRl
Rm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udERlc2NyaXB0b3JSZWYsIENHRmxvYXQgc2l6ZSwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cAppbmRleCA2ZmYwMGJmYmQ1NGEyYjhhMThlZWMwNTg0OTA3OTM1NGMwMjEyZGIwLi4yYmI3MTAx
NTkwZWViMTRkZTE0Zjk1MWM2YjNhMGEzY2E4NDJjMmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcApAQCAtMzE2LDggKzMxNiw4IEBAIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRl
Ojpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
CiAKICAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJh
Y3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tS
YW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZvbnRG
b3JDaGFyYWN0ZXIoaSwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZm9udCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlw
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2Fj
aGVGcmVlVHlwZS5jcHAKaW5kZXggZjAyN2VlZDMxNzE0NDRiYzM2YTQzNDQ3NjNiNzNlMTJkYjJh
MDI2Ny4uYWUwODNkODkwMTk5ZDAyMzVmZTEwZDUwODcwNGVjMmFjOTNjNmNmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMzE5LDI1ICszMTksMjQgQEAgUmVmPEZvbnQ+IEZv
bnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGkKIHsKICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBhIGZhbGxiYWNrIGZvbnQg
aGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5nIEZvbnRDb25maWcKICAgICAvLyBt
YXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQgcmV0dXJuIDAuIFNlZSBpc0ZhbGxi
YWNrRm9udEFsbG93ZWQuCi0gICAgc3RhdGljIEF0b21TdHJpbmcgdGltZXNTdHIoInNlcmlmIik7
Ci0gICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIHRpbWVzU3RyKSkKLSAgICAgICAgcmV0dXJuICpmb250OworICAgIGlmIChSZWZQdHI8Rm9u
dD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAic2VyaWYiX3MpKQorICAg
ICAgICByZXR1cm4gZm9udC5yZWxlYXNlTm9uTnVsbCgpOwogCiAgICAgLy8gVGhpcyBjb3VsZCBi
ZSByZWFjaGVkIGR1ZSB0byBpbXByb3Blcmx5LWluc3RhbGxlZCBvciBtaXNjb25maWd1cmVkIGZv
bnRjb25maWcuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotVmVjdG9y
PEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRG
b250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmLCBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKIHsKICAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgU3RyaW5nIGdl
dEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3N0
YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21GYW1pbHkoY29uc3QgU3RyaW5nJiBm
YW1pbHkpCiB7CiAgICAgLy8gSWYgd2UncmUgY3JlYXRpbmcgYSBmYWxsYmFjayBmb250IChlLmcu
ICItd2Via2l0LW1vbm9zcGFjZSIpLCBjb252ZXJ0IHRoZSBuYW1lIGludG8KICAgICAvLyB0aGUg
ZmFsbGJhY2sgbmFtZSAobGlrZSAibW9ub3NwYWNlIikgdGhhdCBmb250Y29uZmlnIHVuZGVyc3Rh
bmRzLgogICAgIGlmIChmYW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFydHNXaXRoKCItd2Vi
a2l0LSIpKQotICAgICAgICByZXR1cm4gZmFtaWx5LnN0cmluZygpOworICAgICAgICByZXR1cm4g
ZmFtaWx5OwogCiAgICAgaWYgKGZhbWlseSA9PSBzdGFuZGFyZEZhbWlseSB8fCBmYW1pbHkgPT0g
c2VyaWZGYW1pbHkpCiAgICAgICAgIHJldHVybiAic2VyaWYiOwpAQCAtNTAwLDcgKzQ5OSw3IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1vbmx5VXNlZEdlbmVyaWNGYW1pbHkoY29uc3QgU3Ry
aW5nJiBmYW1pbHlOYW1lU3RyaW5nKQogICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAiY3Vyc2l2ZSIpOwogfQogCi1zdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRm
b3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmll
ZENhcGFiaWxpdGllcykKIHsKICAgICAvLyBUaGUgQ1NTIGZvbnQgbWF0Y2hpbmcgYWxnb3JpdGht
IChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNmb250LW1hdGNoaW5nLWFsZ29yaXRo
bSkKICAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBmaW5kIGFuIGV4YWN0IG1hdGNoIGZvciBmb250
IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxpcXVlIGNhbiBiZSB1c2VkKQpAQCAtNTk5LDkg
KzU5OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHBsYXRmb3JtRGF0
YTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRD
YWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
cmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogI2lmIEVO
QUJMRShWQVJJQVRJT05fRk9OVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRl
eHQubW0KaW5kZXggNDUxMTA3YmJiNDY1YmRlMzk1NDQ5ZGMwNzhkODA1YThlMTY0ZjhhNC4uYzhj
MTgxMDQ4MzRiYmMzZGFjNWFlMzZjNjMwZTRjNTM3NDhjNzU5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVU
ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpAQCAtMTI1LDkgKzEyNSw5IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgIGlzU3lzdGVtRmFsbGJhY2sgPSB0cnVlOwogCiAgICAgICAg
IFUxNl9HRVQoY3AsIDAsIDAsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGZvbnQg
PSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0
ZXIpOworICAgICAgICBmb250ID0gbV9mb250LmZvbnRGb3JDaGFyYWN0ZXIoMCwgYmFzZUNoYXJh
Y3Rlcik7CiAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgIGZvbnQgPSAmbV9mb250LmZh
bGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgIGZvbnQg
PSAmbV9mb250LmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1
bHQsIDAsIGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyhtX2ZvbnQuZW5hYmxlS2VybmluZygp
LCBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpLCBtX2ZvbnQuZm9udERlc2NyaXB0
aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSkuZ2V0KCkpKTsKICAgICAgICAgLy8gV2UgZG9uJ3Qga25v
dyB3aGljaCBmb250IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciB0aGlzIGdyYXBoZW1lIGNsdXN0
ZXIsIHNvIGVuYWJsZSBDb3JlVGV4dCdzIGZhbGxiYWNrIG1lY2hhbmlzbSBieSB1c2luZyB0aGUg
Q1RGb250IHdoaWNoIGRvZXNuJ3QgaGF2ZSBDb3JlVGV4dCdzIGZhbGxiYWNrIGRpc2FibGVkLgog
ICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShjb25zdF9jYXN0PENGTXV0YWJsZURpY3Rpb25h
cnlSZWY+KHN0cmluZ0F0dHJpYnV0ZXMuZ2V0KCkpLCBrQ1RGb250QXR0cmlidXRlTmFtZSwgZm9u
dC0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKQEAgLTE4Nyw4ICsxODcsOCBAQCB2b2lkIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNwLAogICAgICAgICAgICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVx
dWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhy
dW5DVEZvbnQpOwogICAgICAgICAgICAgaWYgKCFXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnRFcXVh
bGl0eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlD
aGVjaygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8vIEJlZ2luIHRyeWluZyB0byBzZWUg
aWYgcnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMgaW4gdGhlIGZhbGxiYWNrIGxpc3Qu
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jh
bmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9
IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFj
a1Jhbmdlc0FyZU51bGwoaSk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0g
bV9mb250LmZvbnRGb3JDaGFyYWN0ZXIoaSwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghcnVuRm9udCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoV1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250LT5wbGF0Zm9y
bURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9i
amVjdC5nZXQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDJiNGI1NTcyYTRkODA4YjgzYjRiMGY0YWE2NGY5
NmM5NjM4MmY2MTMuLjAzMTY2ZWQ4MDJmYjk0MzY5YzE5ZGNjNWY4NzUxMTZkZDkxNzQxNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwCkBAIC0zNjIsOSArMzYyLDkgQEAgYm9vbCBGb250Q2FjaGU6OmlzU3lzdGVtRm9u
dEZvcmJpZGRlbkZvckVkaXRpbmcoY29uc3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBm
b250LCBBdG9tU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2Fj
aGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBTdHJpbmcmIG91dEZvbnRGYW1p
bHlOYW1lKQogewotICAgIEF0b21TdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdj
c25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOworICAgIFN0cmluZyBmYW1pbHlO
YW1lKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpF
KSk7CiAgICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVzY3Jp
cHRpb24sIGZhbWlseU5hbWUpOwogICAgIGlmIChmb250RGF0YSkKICAgICAgICAgb3V0Rm9udEZh
bWlseU5hbWUgPSBmYW1pbHlOYW1lOwpAQCAtMzczLDcgKzM3Myw3IEBAIFJlZlB0cjxGb250PiBG
b250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9uCiAKIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7Ci0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CiAKICAgICBp
ZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gKmZv
bnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnROYW1lKTsKQEAgLTM4NCwx
MiArMzg0LDEyIEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiAgICAgLy8gU2VhcmNoIGFsbCB0
eXBpY2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KICAgICAvLyBTb3J0
ZWQgYnkgbW9zdCB0byBsZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvVW5pY29kZV90eXBlZmFjZXMKICAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5l
dyBSb21hbiBhbHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3Qg
Y2hhbmdlIHByZWZzLgotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gZmFsbGJhY2tGb250c1tdID0gewotICAgICAgICBBdG9tU3RyaW5nKCJUaW1l
cyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAg
IEF0b21TdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJUYWhvbWEiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkx1Y2lkYSBTYW5zIFVu
aWNvZGUiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21T
dHJpbmcoIkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZmFsbGJhY2tGb250c1tdID0geworICAg
ICAgICBTdHJpbmcoIlRpbWVzIE5ldyBSb21hbiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiVGFob21hIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgIFN0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICBTdHJpbmcoIkFyaWFsIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKICAgICB9OwogICAgIFJlZlB0cjxGb250PiBz
aW1wbGVGb250OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChm
YWxsYmFja0ZvbnRzKTsgKytpKSB7CkBAIC01MTIsNyArNTEyLDcgQEAgc3RhdGljIGludCBDQUxM
QkFDSyBtYXRjaEltcHJvdmluZ0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09O
U1QgVEVYVE0KICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3Jl
YXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwg
Ym9vbCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3Rh
dGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwg
TE9ORyBkZXNpcmVkV2VpZ2h0LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5
bnRoZXNpemVJdGFsaWMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzAs
MTIgQEAgc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5
UHJvY0RhdGEgewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSkKKyAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFt
aWx5TmFtZSkKICAgICAgICAgOiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAg
fQogCi0gICAgY29uc3QgQXRvbVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmlu
ZyYgbV9mYW1pbHlOYW1lOwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBt
X2NhcGFiaWxpdGllczsKIH07CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCBzdGF0aWMgaW50IENBTExC
QUNLIHRyYWl0c0luRmFtaWx5RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1Qg
VEVYVE1FVAogICAgIHJldHVybiAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0
b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ2LDcg
QEAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNl
bGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+
IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJv
b2wgaXNMdWNpZGFHcmFuZGUgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHks
ICJsdWNpZGEgZ3JhbmRlIik7CiAKQEAgLTY5MiwxMSArNjkyLDggQEAgc3RkOjp1bmlxdWVfcHRy
PEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250
Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJu
YXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJU
aW1lcyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3Nv
ZnRTYW5zU2VyaWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAg
Ly8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kg
Y29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcg
Um9tYW4gYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAg
LTcwNSw3ICs3MDIsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5l
ZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAg
ICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1l
cyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRv
bid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBw
b3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0
ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3
MTEsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9u
IG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAg
ICAgICAgICByZXR1cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJN
aWNyb3NvZnQgU2FucyBTZXJpZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVy
biBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2
MzY2MTU0YmMwNGJlYTUwM2M2MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1
NDFiZmJhMDc2YmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1
Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0Jp
ZGlDb250ZXh0PiB7CitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJp
dGZpZWxkcyA6IDE2OwogICAgIHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2
OTY3MGQzOWJkMzRkMS4uNWE4ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUg
KzIyLDE1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUg
fTsKIAogLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFz
cyBCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBC
aWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewog
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0
ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZh
bHNlLCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBw
YXJlbnQgPSBudWxscHRyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423707</attachid>
            <date>2021-03-19 02:21:02 -0700</date>
            <delta_ts>2021-03-19 03:17:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210319092101.patch</filename>
            <type>text/plain</type>
            <size>71634</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uYjk2ZDlkY2Uz
NGI4ODljZGY2ZDEyNmI5NTNkMDNhOTVhODdjMzEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsNyArNjQsNyBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCiAgICAgICAgICwg
bV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6
IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTk5LDggKzkwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwobV9m
YW1pbHksIG90aGVyLm1fZmFtaWx5KTsKICAgICB9CiAKKyAgICB2b2lkIGlzb2xhdGUoKSB7IG1f
ZmFtaWx5ID0gbV9mYW1pbHkuaXNvbGF0ZWRDb3B5KCk7IH0KKwogICAgIEZvbnREZXNjcmlwdGlv
bktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5OworICAg
IFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZm9udEZhY2VGZWF0
dXJlczsKICAgICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIG1fZm9udEZhY2VD
YXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQxLDM5ICsxMzQsMzMgQEAgc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZv
bnRQbGEKIAogdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNo
LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU7CiAKK3N0YXRpYyBMb2NrIGdQbGF0Zm9ybURhdGFDYWNoZUxvY2s7CisKIHN0YXRpYyBGb250
UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpCiB7CiAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4gY2FjaGU7CiAgICAgcmV0dXJu
IGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWls
eU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJh
bD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFt
ZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJp
ZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3
KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGlj
YSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRp
bWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGlt
ZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNB
bHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0
ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0
dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUu
bGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2
ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAg
ICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5l
dyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAg
ICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5l
dyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAg
ICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAg
YnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcg
aXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMg
KzE3MCwyOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlm
IENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0g
ICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJf
czsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIp
KQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJf
czsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUs
CiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBj
aGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJ
TkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBp
biB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRo
ZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMs
IHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCi0gICAgLy8gSUUgZGlz
cmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0
aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRG
YW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAg
ICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRvbVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwo
KS0+c3Vic3RyaW5nKDEpKTsKKyAgICAvLyBJRSBkaXNyZWdhcmRzICJAIiByZWdhcmRsZXNzIG9m
IHRoZSBvcmllbnRhdGlvbiwgc28gd2UgZm9sbG93IHRoZSBiZWhhdmlvci4KKyAgICBjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lLnN1YnN0cmluZyhwYXNzZWRGYW1p
bHlOYW1lWzBdID09ICdAJyA/IDEgOiAwKTsKICNlbHNlCi0gICAgY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQ7CkBAIC0yMjMsMTQgKzIwNSwxNCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6
OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAg
IGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtleSwgbnVsbHB0
cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFkZFJlc3VsdC5p
dGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAga2V5Lmlz
b2xhdGUoKTsKICAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzKTsKIAogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVO
YW1lKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdl
IGhhdmUgYSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywK
ICAgICAgICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5l
dywgZXRjLiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4K
LSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVG
YW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGVOYW1lLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3Jt
RGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmls
aXRpZXMsIHRydWUpOworICAgICAgICAgICAgaWYgKGF1dG8gYWx0ZXJuYXRlTmFtZSA9IGFsdGVy
bmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
Zm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZh
Y2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIExvb2t1cCB0aGUga2V5
IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2
ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBj
YWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9
IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKQEAgLTMxMiw4ICsyOTQsMTAgQEAg
Y29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNp
Z25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0
IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMw
OwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRl
cm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdB
bHRlcm5hdGVOYW1lKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwog
ICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHVyZ2VUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIApAQCAtMzI1LDEwICszMDksOCBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjbwogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0gICAg
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgYXV0byBhZGRSZXN1
bHQgPSBjYWNoZWRGb250cygpLmVuc3VyZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAgICAgICAgIHJl
dHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9KTsKQEAgLTM0MCw2ICszMjIs
OCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAg
ICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5n
bGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZv
bnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJlc3N1
cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7CiAKQEAgLTM1NywxNSAr
MzQxLDEzIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgp
CiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VD
b3VudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBMT0co
Rm9udHMsICJGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSgldSkiLCBwdXJnZUNvdW50
KTsKIAogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7
CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0KICAg
ICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8UmVmPEZvbnQ+LCAyMD4gZm9u
dHNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1
ZXMoKSkgewpAQCAtNDIxLDYgKzQwMyw3IEBAIHN0YXRpYyBib29sIGtleXNNYXRjaChjb25zdCBG
b250Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiCiAKIHZv
aWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fZm9udENhc2NhZGVDYWNoZS5jbGVhcigp
OwogfQogCkBAIC00MzcsMTIgKzQyMCwxOCBAQCBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBt
YWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJgogICAg
IHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsKICAgICBr
ZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAgIGtleS5mYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworICAgICAgICBr
ZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpLnN0cmlu
ZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0
b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNl
bGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAgIHJldHVybiBrZXk7CiB9
CiAKK3N0YXRpYyB2b2lkIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KEZvbnRDYXNjYWRlQ2Fj
aGVLZXkmIGtleSkKK3sKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGtleS5mYW1pbGllcykKKyAg
ICAgICAgZmFtaWx5ID0gZmFtaWx5Lmlzb2xhdGVkQ29weSgpOworfQorCiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkm
IGtleSkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGhhc2ggdGhlIGtleSBhbmQgdGhlIGZhbWls
eSBuYW1lIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gbWFraW5nIGEgaGFzaCBvdXQgb2Ygb3RoZXIg
aGFzaGVzLgpAQCAtNDc5LDYgKzQ2OCw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2Fj
aGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAg
aWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpc29sYXRlRm9udENhc2NhZGVDYWNoZUtleShrZXkp
OwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBu
ZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihXVEZNb3ZlKGtleSks
IEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKICAgICBS
ZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdldCgpOwpAQCAt
NDk3LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZl
T3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAKIHZvaWQgRm9udENhY2hl
Ojp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIFJlZlB0
cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVGb250cyhyZXRyaWV2ZU9yQWRk
Q2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1vdmUoZm9udFNl
bGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDggQEAgc2l6ZV90IEZvbnRDYWNoZTo6Zm9u
dENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9j
ayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52
YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCkBAIC01MjIsNiArNTEy
LDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwogCiB2b2lkIEZv
bnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9jayk7CisKICAgICBpZiAoIWdDbGll
bnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+OwogCkBA
IC01MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3Im
IGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImIGNs
aWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxv
Y2spOworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRh
aW5zKCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4IEBAIHVuc2lnbmVkIHNob3J0IEZvbnRD
YWNoZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2spOworCiAgICAg
aWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YUNhY2hlKCku
aXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4MSw3IEBAIHZvaWQgRm9u
dENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpCiB7CiB9CiAKLVJlZlB0
cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5k
ZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uM2RlNmFiMjQ0Nzcw
MjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRl
ICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFy
cmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFw
dGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAsNyBAQCBzdHJ1
Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3JpcHRpb24uY29t
cHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0KGRlc2Ny
aXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFncyhtYWtlRmxh
Z3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNp
ZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmllZExv
Y2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGluZ3MoZGVzY3Jp
cHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsxNTgsNyBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2VsZWN0aW9uUmVx
dWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+
IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOworICAgIFN0cmlu
ZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNldHRpbmdzOwog
ICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwogfTsKQEAgLTE3
OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7CiAKIHN0cnVjdCBG
b250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0
aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5n
IEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
VmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7
CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0yMjQsMTIgKzIyNSwx
MiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBzbyBDU1NGb250U2Vs
ZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0YWxsZWQgZm9udHMgYW5k
IEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdoZW4geW91IGNyZWF0ZSBh
biBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFzIGEgcHJlaW5zdGFsbGVk
IGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBnZXRG
b250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRG
b3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBi
b29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVs
bHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0cjxGb250PiBzaW1pbGFy
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpOwor
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3ImKTsK
ICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAgLTI0Nyw3ICsyNDgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKICNpZiBQTEFURk9STShX
SU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3RyaW5nJiBvdXRGb250RmFt
aWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBTdHJpbmcmIG91dEZvbnRG
YW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQpAQCAt
MjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQ
dHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQg
ZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVs
bHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9u
dFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkg
ZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgY29uc3QgQXRv
bVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcm
IGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisK
KyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAgIFJlY3Vyc2l2ZUxvY2sg
bV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBtX3B1cmdlVGltZXI7CiAK
LSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xk
U3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAgICAgRm9udENhc2NhZGVD
YWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcgQEAgcHJpdmF0ZToKIAog
aW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIG51bGxwdHIsIHsgfSk7
CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMwMzhkYmY0NmUyOGMxOTIw
Li45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTE2OCw3ICsxNjgs
OSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9tU3RyaW5n
JikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwotICAgIGNv
bnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OworICAgIGJv
b2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBjb25zdCBGb250
KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2VzSW5kZXgsIFVDaGFyMzIp
IGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CiAgICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9u
dFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25zdCBGb250KiBmb250Rm9y
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoKSBj
b25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBGb250JiBGb250Q2FzY2Fk
ZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRzLT5wcmltYXJ5Rm9udCht
X2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250Q2Fz
Y2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBib29s
IEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWduZWQgaW5kZXgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2ZvbnRzLT5yZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworICAgIHJldHVybiBtX2Zv
bnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30K
KworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ2hhcmFjdGVyKHVuc2ln
bmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mb250
cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIobV9mb250RGVzY3JpcHRp
b24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2Nh
ZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mb250cyk7Cisg
ICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9udERlc2NyaXB0aW9uKTsK
IH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEwMmMzMTkyNDgwNDNmYTc0
NjRhZGMuLmZjODEyNGU3ZmY0ZWUzNTdiODc1MjU1ODczN2U1NzhhODdhZTcyNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRl
RGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1ib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZhbWlseTEsIGNvbnN0IFN0
cmluZyYgZmFtaWx5MikKIHsKKyAgICBBU1NFUlQoIWZhbWlseTEuaXNOdWxsKCkpOworICAgIEFT
U0VSVCghZmFtaWx5Mi5pc051bGwoKSk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGZh
bWlseTEuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1cm4gZmFtaWx5MSA9PSBmYW1pbHky
OwpAQCAtMTEwLDE3ICsxMTIsMTUgQEAgYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1p
bHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnMKICAgICByZXR1
cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVhbChmYW1pbHkxLCBmYW1pbHkyKTsKIH0K
IAotdW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZUhhc2goY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5KQordW5zaWduZWQgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFt
aWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcuJykpCi0gICAgICAgIHJldHVybiBmYW1pbHku
ZXhpc3RpbmdIYXNoKCk7Ci0jZW5kaWYKKyAgICBBU1NFUlQoIWZhbWlseS5pc051bGwoKSk7CiAg
ICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChmYW1pbHkpOwogfQogCiBT
dHJpbmcgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShjb25zdCBTdHJp
bmcmIGZhbWlseSkKIHsKKyAgICBBU1NFUlQoIWZhbWlseS5pc051bGwoKSk7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCcuJykpCiAgICAgICAgIHJldHVy
biBmYW1pbHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKaW5kZXggMGE3ZGYyNTI4ZGFjNjJhOGM1YTg5MGJk
MmRmYTQzMGEyMTRkZDdmNi4uMzc5Y2FkN2ZkNThlZDFmN2QyZjAxNThhNmQzMWE4OTFiYzA2M2Jk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uaApAQCAtNTcsOCArNTcsOCBAQCBwdWJsaWM6CiAgICAgY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5QXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9mYW1p
bGllc1tpXTsgfQogICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxBdG9tU3RyaW5nPiYgZmFtaWxp
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlsaWVzOyB9CiAKLSAgICBzdGF0aWMgYm9vbCBmYW1p
bHlOYW1lc0FyZUVxdWFsKGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBBdG9tU3RyaW5nJik7Ci0g
ICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAg
ICBzdGF0aWMgYm9vbCBmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBTdHJpbmcm
KTsKICAgICBzdGF0aWMgU3RyaW5nIGZvbGRlZEZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB1bnNpZ25lZCBlZmZlY3RpdmVGYW1pbHlDb3VudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAppbmRl
eCAyZGRkNmJkZjE5NDM4NDE3YWRlYTcxMTI0N2QyMTc2ZDU3NjM1MjM0Li42YjIzNjU2ODUwZThi
MDI2MTQ0YjcxZWVmOTFlODFmNmFiZGNiNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcApAQCAtMTA3LDE4ICsxMDcs
MjAgQEAgRm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyhSZWZQdHI8Rm9udFNlbGVj
dG9yPiYmIGZvbnRTZWxlY3RvcikKIH0KIAogRm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVG
b250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCi0gICAgOiBtX2NhY2hl
ZFByaW1hcnlGb250KG51bGxwdHIpCisgICAgOiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXpl
KDEpCisgICAgLCBtX2NhY2hlZFByaW1hcnlGb250KG51bGxwdHIpCiAgICAgLCBtX2ZvbnRTZWxl
Y3RvclZlcnNpb24oMCkKICAgICAsIG1fZ2VuZXJhdGlvbihGb250Q2FjaGU6OnNpbmdsZXRvbigp
LmdlbmVyYXRpb24oKSkKICAgICAsIG1faXNGb3JQbGF0Zm9ybUZvbnQodHJ1ZSkKIHsKLSAgICBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5n
bGV0b24oKS5mb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsKKyAgICBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXMucHVzaF9iYWNrKEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0
b24oKS5mb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkpKTsKIH0KIAogRm9udENhc2Nh
ZGVGb250czo6fkZvbnRDYXNjYWRlRm9udHMoKSA9IGRlZmF1bHQ7CiAKIHZvaWQgRm9udENhc2Nh
ZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzLmVtcHR5KCkpOwogICAgIGF1dG8mIHByaW1hcnlSYW5nZXMgPSBy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAgdW5zaWduZWQgbnVt
UmFuZ2VzID0gcHJpbWFyeVJhbmdlcy5zaXplKCk7CiAgICAgaWYgKG51bVJhbmdlcyA9PSAxKQpA
QCAtMTI5LDYgKzEzMSw3IEBAIHZvaWQgRm9udENhc2NhZGVGb250czo6ZGV0ZXJtaW5lUGl0Y2go
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiAKIGJvb2wgRm9udENh
c2NhZGVGb250czo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogeworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb3IgKGF1dG8mIGZvbnRSYW5nZXMgOiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXMpIHsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNMb2FkaW5n
KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE3MywxNCArMTc2LDIxIEBAIHN0YXRp
YyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcHRpb24sCiAKIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6
OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzW2luZGV4XTsKKyAgICAvLyBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMgaXMgYSBsaW5r
ZWQgbGlzdCBhbmQgaXRzIGxlbmd0aCBvbmx5IGdyb3dzLAorICAgIC8vIGl0IGlzIG5ldmVyIG90
aGVyd2lzZSBtb2RpZmllZC4gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc2FmZSB0byBhY2Nlc3MKKyAg
ICAvLyBleGlzdGluZyBub2RlcyB3aXRob3V0IHRha2luZyB0aGUgbG9jaywgc28gd2UgYXNzZXJ0
IHRoYXQgdGhlIGxvY2sgaXMKKyAgICAvLyBoZWxkIGFmdGVyIHRoaXMgZmFzdCByZXR1cm4gcGF0
aC4KKyAgICBpZiAoaW5kZXggPCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplKSB7CisgICAg
ICAgIGF1dG8gaXQgPSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYmVnaW4oKTsKKyAgICAgICAg
c3RkOjphZHZhbmNlKGl0LCBpbmRleCk7CisgICAgICAgIHJldHVybiAqaXQ7CisgICAgfQogCi0g
ICAgQVNTRVJUKGluZGV4ID09IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpOworICAg
IEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOworICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXNTaXplKTsKICAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24oKS5n
ZW5lcmF0aW9uKCkgPT0gbV9nZW5lcmF0aW9uKTsKIAotICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jh
bmdlcy5hcHBlbmQoRm9udFJhbmdlcygpKTsKLSAgICBhdXRvJiBmb250UmFuZ2VzID0gbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzLmxhc3QoKTsKKyAgICBhdXRvIGZvbnRSYW5nZXMgPSBGb250UmFu
Z2VzKCk7CiAKICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXpl
TmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1f
Zm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTE4OCwyMyArMTk4LDQyIEBAIGNvbnN0IEZvbnRSYW5n
ZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRD
YXNjYWRlRGVzCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZvbnRS
YW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAgICAgaWYg
KGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdl
cyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRp
b24pKTsKLSAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZh
bWlseUNvdW50KCkpCisgICAgICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFj
ayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rv
ci5nZXQoKSk7CisKKyAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2Vs
ZWN0b3IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgg
Pj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CisKKyAgICAgICAgICAgIHVu
c2lnbmVkIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNr
SW5kZXggLSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpOworICAgICAgICAgICAg
aWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXggIT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNr
Rm9udENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJ
bmRleDsKKyAgICAgICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRTZWxl
Y3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5k
ZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgp
KQotICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwg
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CisgICAg
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhXVEZNb3ZlKGZvbnRSYW5nZXMpKTsK
KyAgICArK21fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1NpemU7CisgICAgcmV0dXJuIG1fcmVhbGl6
ZWRGYWxsYmFja1Jhbmdlcy5iYWNrKCk7Cit9CiAKLSAgICBpZiAoZm9udFJhbmdlcy5pc051bGwo
KSAmJiBtX2ZvbnRTZWxlY3RvcikgewotICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxs
YmFja0luZGV4ID49IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOworYm9vbCBG
b250Q2FzY2FkZUZvbnRzOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQoreworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1NpemUgPD0g
aW5kZXgpOworICAgIHJldHVybiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
aW5kZXgpLmlzTnVsbCgpOworfQogCi0gICAgICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvckZhbGxi
YWNrSW5kZXggPSBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggLSBkZXNjcmlwdGlvbi5lZmZl
Y3RpdmVGYW1pbHlDb3VudCgpOwotICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRl
eCA9PSBtX2ZvbnRTZWxlY3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmb250UmFuZ2VzOwotICAgICAgICArK21fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleDsK
LSAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNr
Rm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7Ci0gICAgfQor
Y29uc3QgRm9udCogRm9udENhc2NhZGVGb250czo6Zm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgsIFVDaGFyMzIg
Y2hhcmFjdGVyKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVh
bGl6ZWRGYWxsYmFja1Jhbmdlc1NpemUgPD0gaW5kZXgpOworICAgIHJldHVybiByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgaW5kZXgpLmZvbnRGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKK30KIAotICAgIHJldHVybiBmb250UmFuZ2VzOworY29uc3QgRm9udCYgRm9udENhc2Nh
ZGVGb250czo6Zm9udEZvckZpcnN0UmFuZ2UoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmVtcHR5KCkpOworICAgIHJldHVybiByZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKIH0KIAogc3Rh
dGljIGlubGluZSBib29sIGlzSW5SYW5nZShVQ2hhcjMyIGNoYXJhY3RlciwgVUNoYXIzMiBsb3dl
ckJvdW5kLCBVQ2hhcjMyIHVwcGVyQm91bmQpCkBAIC0zMjMsMTAgKzM1MiwxMCBAQCBzdGF0aWMg
R2x5cGhEYXRhIGdseXBoRGF0YUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVudGF0aW9u
KFVDaGFyMzIgY2hhcmFjdAogICAgIHJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgY29uc3QgRm9u
dCogZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250cyYgZm9udENhc2NhZGVGb250
cywgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFVDaGFyMzIgY2hh
cmFjdGVyKQorY29uc3QgRm9udCogRm9udENhc2NhZGVGb250czo6ZmluZEJlc3RGYWxsYmFja0Zv
bnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIFVDaGFyMzIgY2hh
cmFjdGVyKQogewogICAgIGZvciAodW5zaWduZWQgZmFsbGJhY2tJbmRleCA9IDA7IDsgKytmYWxs
YmFja0luZGV4KSB7Ci0gICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSBmb250Q2FzY2FkZUZvbnRz
LnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBmYWxsYmFja0luZGV4KTsKKyAg
ICAgICAgYXV0byYgZm9udFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0
aW9uLCBmYWxsYmFja0luZGV4KTsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgYXV0byogY3VycmVudEZvbnQgPSBmb250UmFuZ2Vz
LmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIEV4dGVybmFsUmVzb3VyY2VEb3dubG9h
ZFBvbGljeTo6Rm9yYmlkKS5mb250OwpAQCAtMzQyLDEwICszNzEsMTAgQEAgc3RhdGljIGNvbnN0
IEZvbnQqIGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRlRm9udHMmIGZvbnRDYXNjYWRl
Rm9udHMsIGNvbnMKIAogR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvclN5
c3RlbUZhbGxiYWNrKFVDaGFyMzIgY2hhcmFjdGVyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFj
a1Nob3VsZEJlSW52aXNpYmxlKQogewotICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmaW5kQmVzdEZh
bGxiYWNrRm9udCgqdGhpcywgZGVzY3JpcHRpb24sIGNoYXJhY3Rlcik7CisgICAgY29uc3QgRm9u
dCogZm9udCA9IGZpbmRCZXN0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uLCBjaGFyYWN0ZXIpOwog
CiAgICAgaWYgKCFmb250KQotICAgICAgICBmb250ID0gJnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGRlc2NyaXB0aW9uLCAwKS5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgICAgICBmb250ID0gJmZv
bnRGb3JGaXJzdFJhbmdlKGRlc2NyaXB0aW9uKTsKIAogICAgIGF1dG8gc3lzdGVtRmFsbGJhY2tG
b250ID0gZm9udC0+c3lzdGVtRmFsbGJhY2tGb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZGVz
Y3JpcHRpb24sIG1faXNGb3JQbGF0Zm9ybUZvbnQgPyBJc0ZvclBsYXRmb3JtRm9udDo6WWVzIDog
SXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vKTsKICAgICBpZiAoIXN5c3RlbUZhbGxiYWNrRm9udCkKQEAg
LTQ4OCw5ICs1MTcsOSBAQCBzdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlRnJvbUZv
bnRSYW5nZXModW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udAogCiBHbHlwaERhdGEgRm9u
dENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQpCiB7
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQodmFyaWFudCAhPSBBdXRv
VmFyaWFudCk7CiAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgaWYg
KHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkKICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUZvclZh
cmlhbnQoYywgZGVzY3JpcHRpb24sIHZhcmlhbnQpOwogCkBAIC01MTYsNiArNTQ1LDcgQEAgR2x5
cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMs
IGNvbnN0IEZvbnRDYXNjYWRlRGUKIAogdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpwcnVuZVN5c3Rl
bUZhbGxiYWNrcygpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAg
IGlmIChtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyBNdXRhYmxlIGdseXBoIHBhZ2VzIG1heSByZWZlcmVuY2UgZmFsbGJhY2sgZm9udHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmgKaW5kZXggNDUwMTk0NDVlMzMzOTBiYjg0Y2I2NmJhNWMxODNhNThmNWJhZDM4ZC4uOTgz
YjIwZmUxN2JkZWFlZjE1OTZlZGJjNjU4ZWUzMGI1YWJmZDQzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaApAQCAtMjcsNyAr
MjcsOSBAQAogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGlzdC5oPgogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCkBAIC00Myw3ICs0
NSw3IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAKIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnRDYXNjYWRlRm9udHMpOwotY2xh
c3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+
IHsKK2NsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Rm9udENhc2NhZGVGb250cz4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvbnRDYXNjYWRl
Rm9udHMpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVS
KEZvbnRDYXNjYWRlRm9udHMpOwogcHVibGljOgpAQCAtNzAsNyArNzIsOSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgV2lkdGhDYWNoZSYgd2lkdGhDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhD
YWNoZTsgfQogCiAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZvbnRSYW5nZXMmIHJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25l
ZCBmYWxsYmFja0luZGV4KTsKKyAgICBib29sIGZhbGxiYWNrUmFuZ2VzQXJlTnVsbChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQpOworICAgIGNvbnN0IEZvbnQqIGZvbnRG
b3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxi
YWNrUmFuZ2VzSW5kZXgsIFVDaGFyMzIpOworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJh
bmdlKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKIAogICAgIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja3MoKTsKIApAQCAtNzgsMTAgKzgyLDE0IEBAIHByaXZhdGU6CiAgICAgRm9udENh
c2NhZGVGb250cyhSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKICAgICBGb250Q2FzY2FkZUZvbnRz
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKIAorICAgIGNvbnN0IEZvbnQqIGZpbmRCZXN0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBVQ2hhcjMyKTsKICAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiwgY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50LCBib29sIHN5c3RlbUZhbGxiYWNrU2hvdWxk
QmVJbnZpc2libGUpOwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JWYXJpYW50KFVDaGFyMzIs
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgdW5zaWduZWQgZmFs
bGJhY2tJbmRleCA9IDApOwogCi0gICAgVmVjdG9yPEZvbnRSYW5nZXMsIDE+IG1fcmVhbGl6ZWRG
YWxsYmFja1JhbmdlczsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFs
aXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWdu
ZWQgZmFsbGJhY2tJbmRleCk7CisKKyAgICBTdGRMaXN0PEZvbnRSYW5nZXM+IG1fcmVhbGl6ZWRG
YWxsYmFja1JhbmdlczsKKyAgICB1bnNpZ25lZCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXpl
IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCB7IDAgfTsK
IAogICAgIGNsYXNzIEdseXBoUGFnZUNhY2hlRW50cnkgewpAQCAtMTE0LDYgKzEyMiw3IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0
Y2ggeyBVbmtub3duUGl0Y2ggfTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxz
ZSB9OworICAgIG11dGFibGUgTG9jayBtX2xvY2s7CiB9OwogCiBpbmxpbmUgYm9vbCBGb250Q2Fz
Y2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCkBAIC0xMjUsNyArMTM0LDEwIEBAIGlubGluZSBib29sIEZvbnRDYXNjYWRlRm9u
dHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwCiAK
IGlubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5Rm9udChjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIGlmIChtX2NhY2hlZFByaW1hcnlGb250KQorICAgICAgICByZXR1cm4g
Km1fY2FjaGVkUHJpbWFyeUZvbnQ7CisKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CiAgICAgaWYgKCFtX2NhY2hlZFByaW1hcnlGb250KSB7CiAgICAgICAgIGF1dG8mIHByaW1h
cnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7CiAgICAg
ICAgIG1fY2FjaGVkUHJpbWFyeUZvbnQgPSBwcmltYXJ5UmFuZ2VzLmdseXBoRGF0YUZvckNoYXJh
Y3RlcignICcsIEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBvbGljeTo6QWxsb3cpLmZvbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCmluZGV4
IGFjOWMxNjk2ZDE0MzdmYzU0ODFhYTYzOTgwYjYxMDA2ZDg1YzJmNTAuLjFmMWZkYmIwZjFlNmE1
MGE0MmY1MDQ0ZTkyMjA4MTdkZWIyYzBlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJGb250UmFuZ2VzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCA9IDA7CiB9OwogCi1jbGFzcyBGb250U2VsZWN0b3Ig
OiBwdWJsaWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKK2NsYXNzIEZvbnRTZWxlY3RvciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSA9IGRlZmF1bHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKaW5kZXggY2QwZGNkNDZmZWFiMmIxYmQ3ZmE3
ZmUxZWVhMmY4ZDdjMzgyNzczMy4uOGNmOWNkYWNmYjdhYjRlMGY4MTExNjkzYmQ1NmZhY2Y1Y2Qx
OTVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgK
QEAgLTMyLDggKzMyLDggQEAKIAogI2luY2x1ZGUgIkdseXBoLmgiCiAjaW5jbHVkZSA8dW5pY29k
ZS91dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHbHlwaERhdGEgewogLy8gQSBH
bHlwaFBhZ2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERhdGEgbWFwcGluZ3Mg
Zm9yIGEgY29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0aGUgVW5pY29kZSBj
b2RlIHNwYWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBzdGFydGluZyBmcm9tIDAgYW5k
IGluY3JlbWVudGluZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVyIG9mIGdseXBocy4KLWNsYXNzIEds
eXBoUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4geworY2xhc3MgR2x5cGhQYWdl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdseXBoUGFnZT4gewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8R2x5cGhQYWdlPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCkKICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm9IYXJmYnV6ek5HLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCmluZGV4IGEwODgyZjdjMmNmOGIyMzQyM2JjNzA0OGEz
ODk2YTdjY2E0ZWEwNDguLmRlMTQ3MTZmYjFkNmZhNWE4YWY1NDUxNTY4MGU4ZmY2ZjgxYTAxNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyb0hhcmZidXp6TkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCkBAIC0xMjksOCArMTI5LDggQEAgY29uc3Qg
Rm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25z
dCBVQ2hhciogb3JpZ2luYWwKICAgICAgICAgJiYgKCFwcmVmZXJDb2xvcmVkRm9udCB8fCBiYXNl
Rm9udC0+cGxhdGZvcm1EYXRhKCkuaXNDb2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgIHJldHVy
biBiYXNlRm9udDsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0
KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9udCogZmFsbGJhY2tGb250ID0g
ZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEZvbnQqIGZhbGxiYWNrRm9udCA9IGZvbnRGb3JDaGFyYWN0ZXIoaSwgY2hhcmFj
dGVyKTsKICAgICAgICAgaWYgKCFmYWxsYmFja0ZvbnQgfHwgZmFsbGJhY2tGb250ID09IGJhc2VG
b250KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAppbmRl
eCBmYTc3YjM5OTc3ZGI5NzhhMDU5NzFiNmMyNWM0MWYzNzJkZTUyNGIxLi40MDI5MmYyNzBmMjA5
ODcyMTVkZWE2Yzk4ZDMyYjA5OTQ2ZmNiMGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCkBA
IC02MTksNyArNjE5LDcgQEAgUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9u
dChDVEZvbnRSZWYgb3JpZ2luYWxGb250LCBjb25zdCBGb250RGVzY3IKICAgICByZXR1cm4gYWRv
cHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMob3JpZ2luYWxGb250LCBDVEZvbnRH
ZXRTaXplKG9yaWdpbmFsRm9udCksIG51bGxwdHIsIGRlc2NyaXB0b3IuZ2V0KCkpKTsKIH0KIAot
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQorUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Y29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7CiAgICAgLy8gQXR0ZW1wdCB0byBmaW5kIGFuIGFwcHJv
cHJpYXRlIGZvbnQgdXNpbmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgcHJlc2VuY2Ugb2Yga2V5d29y
ZHMgaW4KICAgICAvLyB0aGUgcmVxdWVzdGVkIG5hbWVzLiBGb3IgZXhhbXBsZSwgd2UnbGwgbWF0
Y2ggYW55IG5hbWUgdGhhdCBjb250YWlucyAiQXJhYmljIiB0byBHZWV6YSBQcm8uCkBAIC02Mjgs
MjcgKzYyOCwxOSBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdAogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAvLyBTdWJzdGl0dXRlIHRoZSBkZWZhdWx0IG1vbm9zcGFjZSBmb250IGZv
ciB3ZWxsLWtub3duIG1vbm9zcGFjZSBmb250cy4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5LCAibW9uYWNvIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAibWVubG8iKSkgewotICAgICAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoImNvdXJpZXIiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBjb3VyaWVyKTsKLSAgICB9CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseSwgIm1lbmxvIikpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCAiY291cmllciJfcyk7CiAKICAgICAvLyBTdWJzdGl0dXRlIFZlcmRhbmEgZm9yIEx1
Y2lkYSBHcmFuZGUuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eSwgImx1Y2lkYSBncmFuZGUiKSkgewotICAgICAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHZlcmRhbmEoInZlcmRhbmEiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCB2ZXJkYW5hKTsKLSAgICB9CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGZhbWlseSwgImx1Y2lkYSBncmFuZGUiKSkKKyAgICAgICAgcmV0dXJuIGZvbnRGb3JG
YW1pbHkoZGVzY3JpcHRpb24sICJ2ZXJkYW5hIl9zKTsKICNlbmRpZgogCi0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gYXJhYmljKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJBcmFi
aWMiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGFzaHRvKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJQYXNodG8iKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gdXJkdShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVXJkdSIpKTsKLSAgICBzdGF0aWMg
U3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJhYmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAm
dXJkdS5nZXQoKSB9OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gZ2VlemFQbGFpbigiR2VlemFQcm8iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgZm9yIChTdHJpbmcqIG1hdGNoV29yZCA6IG1hdGNoV29yZHMp
IHsKLSAgICAgICAgaWYgKGZhbWlseS5jb250YWluc0lnbm9yaW5nQVNDSUlDYXNlKCptYXRjaFdv
cmQpKQotICAgICAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9u
dFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gZ2VlemFCb2xkIDogZ2VlemFQbGFp
bik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgbWF0Y2hXb3Jkc1tdID0geyAi
QXJhYmljIl9zLCAiUGFzaHRvIl9zLCAiVXJkdSJfcyB9OworICAgIGF1dG8gZmFtaWx5TWF0Y2hl
ciA9IFN0cmluZ1ZpZXcoZmFtaWx5KTsKKyAgICBmb3IgKGF1dG8gbWF0Y2hXb3JkIDogbWF0Y2hX
b3JkcykgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlNYXRjaGVy
LCBTdHJpbmdWaWV3KG1hdGNoV29yZCkpKQorICAgICAgICAgICAgcmV0dXJuIGZvbnRGb3JGYW1p
bHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8g
IkdlZXphUHJvLUJvbGQiX3MgOiAiR2VlemFQcm8iX3MpOwogICAgIH0KICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KQEAgLTEwODksMTAgKzEwODEsMTAgQEAgc3RhdGljIGNvbnN0IEZvbnREYXRhYmFz
ZTo6SW5zdGFsbGVkRm9udCogZmluZENsb3Nlc3RGb250KGNvbnN0IEZvbnREYXRhYmFzZTo6SW4K
ICAgICByZXR1cm4gJmZhbWlseUZvbnRzLmluc3RhbGxlZEZvbnRzW2luZGV4XTsKIH0KIAotVmVj
dG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgYXV0byYgZm9udERhdGFiYXNl
ID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Olll
cyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKSA6
IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dpbmdVc2VySW5zdGFsbGVkRm9udHMoKTsK
LSAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5
KGZhbWlseU5hbWUuc3RyaW5nKCkpOworICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFi
YXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZvbnRzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMTEwOCwxMCArMTEwMCwxMCBAQCBzdHJ1
Y3QgRm9udExvb2t1cCB7CiAgICAgYm9vbCBjcmVhdGVkRnJvbVBvc3RTY3JpcHROYW1lIHsgZmFs
c2UgfTsKIH07CiAKLXN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1p
bHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0
LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cykKK3N0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdpdGhGYW1pbHkoY29u
c3QgU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNp
emUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewog
ICAgIGNvbnN0IGF1dG8mIGFsbG93bGlzdCA9IGZvbnRBbGxvd2xpc3QoKTsKLSAgICBpZiAoIWlz
U3lzdGVtRm9udChmYW1pbHkuc3RyaW5nKCkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93
bGlzdC5jb250YWlucyhmYW1pbHkpKQorICAgIGlmICghaXNTeXN0ZW1Gb250KGZhbWlseSkgJiYg
YWxsb3dsaXN0LnNpemUoKSAmJiAhYWxsb3dsaXN0LmNvbnRhaW5zKGZhbWlseSkpCiAgICAgICAg
IHJldHVybiB7IG51bGxwdHIgfTsKIAogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHksICIuYXBwbGVzeXN0ZW11aWZvbnRzZXJpZiIpCkBAIC0xMTIzLDcgKzExMTUs
NyBAQCBzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbAogICAgIH0KIAogICAgIGF1dG8mIGZvbnREYXRh
YmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRz
OjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRz
KCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRz
KCk7Ci0gICAgY29uc3QgYXV0byYgZmFtaWx5Rm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlv
bkZvckZhbWlseShmYW1pbHkuc3RyaW5nKCkpOworICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRz
ID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5KTsKICAgICBpZiAoZmFt
aWx5Rm9udHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoZSBDU1Mgc3BlYyBzdGF0ZXMgdGhh
dCBmb250LWZhbWlseSBvbmx5IGFjY2VwdHMgYSBuYW1lIG9mIGFuIGFjdHVhbCBmb250IGZhbWls
eS4gSG93ZXZlciwgaW4gV2ViS2l0LCB3ZSBjbGFpbSB0byBhbHNvCiAgICAgICAgIC8vIHN1cHBv
cnQgc3VwcGx5aW5nIGEgUG9zdFNjcmlwdCBuYW1lIGluc3RlYWQuIEhvd2V2ZXIsIHRoaXMgY3Jl
YXRlcyBwcm9ibGVtcyB3aGVuIHRoZSBvdGhlciBwcm9wZXJ0aWVzIChmb250LXdlaWdodCwKQEAg
LTExNzcsNyArMTE2OSw3IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVGb250Q2FjaGUoKQogICAg
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuaW52YWxpZGF0ZSgpOwogfQogCi1zdGF0aWMgUmV0YWlu
UHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
aXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK3N0
YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNvbnN0
IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
ZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCiB7CiAgICAgLy8gRklYTUU6IFNlZSBjb21tZW50IGluIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OmVmZmVjdGl2ZUZhbWlseUF0KCkgaW4gRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAg
T3B0aW9uYWw8U3lzdGVtRm9udEtpbmQ+IHN5c3RlbURlc2lnbjsKQEAgLTEyMDYsNyArMTE5OCw3
IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNl
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwKICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoIlVJ
Q1RGb250VGV4dFN0eWxlIikpIHsKICAgICAgICAgY29uc3QgYXV0byYgcmVxdWVzdCA9IGZvbnRE
ZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVzdCgpOwogICAgICAgICBDVEZvbnRTeW1ib2xp
Y1RyYWl0cyB0cmFpdHMgPSAoaXNGb250V2VpZ2h0Qm9sZChyZXF1ZXN0LndlaWdodCkgfHwgRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmls
aXR5KCkgPyBrQ1RGb250VHJhaXRCb2xkIDogMCkgfCAoaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkg
PyBrQ1RGb250VHJhaXRJdGFsaWMgOiAwKTsKLSAgICAgICAgYXV0byBkZXNjcmlwdG9yID0gYWRv
cHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHlsZShmYW1pbHkuc3RyaW5nKCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhlbWVDb2NvYTo6c2luZ2xldG9uKCkuY29u
dGVudFNpemVDYXRlZ29yeSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRMb2NhbGUoKS5zdHJp
bmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CisgICAgICAgIGF1dG8gZGVzY3JpcHRvciA9
IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRT
aXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwogICAgICAgICBpZiAodHJhaXRzKQogICAgICAgICAg
ICAgZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoU3lt
Ym9saWNUcmFpdHMoZGVzY3JpcHRvci5nZXQoKSwgdHJhaXRzLCB0cmFpdHMpKTsKICAgICAgICAg
cmV0dXJuIGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhkZXNjcmlwdG9yLmdldCgpLCBzaXpl
LCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyk7CkBAIC0xMjQwLDcgKzEyMzIsNyBAQCBzdGF0aWMg
UmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHksCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9hdCBzaXplKQorc3RhdGljIFJldGFpblB0cjxD
VEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250
RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKIHsKICAgICBpZiAoZmFtaWx5LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjgzLDcgKzEyNzUsNyBAQCBzdGF0aWMg
dm9pZCBhdXRvQWN0aXZhdGVGb250KGNvbnN0IFN0cmluZyYgbmFtZSwgQ0dGbG9hdCBzaXplKQog
fQogI2VuZGlmCiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5n
cyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBG
b250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogewogICAgIGZsb2F0IHNpemUgPSBmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKIApAQCAtMTI5Niw3ICsxMjg4LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGUKIAogICAgICAgICAvLyBBdXRvIGFjdGl2YXRlIHRoZSBmb250IGJl
Zm9yZSBsb29raW5nIGZvciBpdCBhIHNlY29uZCB0aW1lLgogICAgICAgICAvLyBJZ25vcmUgdGhl
IHJlc3VsdCBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIG91ciBvd24gYWxnb3JpdGhtIHRvIGFjdHVh
bGx5IGZpbmQgdGhlIGZvbnQuCi0gICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LnN0cmlu
ZygpLCBzaXplKTsKKyAgICAgICAgYXV0b0FjdGl2YXRlRm9udChmYW1pbHksIHNpemUpOwogCiAg
ICAgICAgIGZvbnQgPSBmb250V2l0aEZhbWlseShmYW1pbHksIGZvbnREZXNjcmlwdGlvbiwgZm9u
dEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHNpemUpOwogICAgIH0KQEAgLTE0
MjgsNyArMTQyMCw3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyCiAgICAgcmV0dXJuIGZvbnRG
b3JQbGF0Zm9ybURhdGEoYWx0ZXJuYXRlRm9udCk7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZv
bnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseU5hbWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBzdGF0aWMg
Y29uc3QgVUNoYXIgaGVpdGlTdHJpbmdbXSA9IHsgMHg5ZWQxLCAweDRmNTMgfTsKICAgICBzdGF0
aWMgY29uc3QgVUNoYXIgc29uZ3RpU3RyaW5nW10gPSB7IDB4NWI4YiwgMHg0ZjUzIH07CkBAIC0x
NDM2LDEwICsxNDI4LDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1B
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgc3RhdGljIGNv
bnN0IFVDaGFyIHdlaXJ1YW5ZYUhlaVN0cmluZ1tdID0geyAweDVmYWUsIDB4OGY2ZiwgMHg5NmM1
LCAweDllZDEgfTsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhblpoZW5nSGVpdGlTdHJp
bmdbXSA9IHsgMHg1ZmFlLCAweDhlZGYsIDB4NmI2MywgMHg5ZWQxLCAweDlhZDQgfTsKIAotICAg
IHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc29uZ3Rp
U0MoIlNvbmd0aSBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVRD
KCJTb25ndGkgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBoZWl0aVNDUmVw
bGFjZW1lbnQoIlBpbmdGYW5nIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
aGVpdGlUQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBUQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBzb25ndGlTQyA9
ICJTb25ndGkgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3Rp
VEMgPSAiU29uZ3RpIFRDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGhl
aXRpU0NSZXBsYWNlbWVudCA9ICJQaW5nRmFuZyBTQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEFTQ0lJTGl0ZXJhbCBoZWl0aVRDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgVEMiX3M7CiAKICAg
ICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDI6CkBAIC0xNDc0LDcg
KzE0NjYsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRl
RmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5
UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKQpAQCAtMTU0Nyw3ICsxNTM5LDcgQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIHsK
ICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVz
ZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwgcGljawogICAgIC8vIHRoZSBk
ZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZz
LgotICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBB
dG9tU3RyaW5nKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpCisg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sICJUaW1l
cyJfcykpCiAgICAgICAgIHJldHVybiAqcmVzdWx0OwogCiAgICAgLy8gTGFzdFJlc29ydCBpcyBn
dWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKaW5kZXggOWFiYTg5
ZjIxMzcwNzJkNDNhOGY4OThhZGRkMThkYWQ2MjQ5MDM5NS4uZTg3Yjk2MTdlZGY5MDI0YjQwZDA3
YzgxMTgwZmJkMDA0Y2YxM2Y3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCkBAIC02Miw3ICs2Miw3
IEBAIHR5cGVkZWYgSGFzaE1hcDxGb250VGFnLCBWYXJpYXRpb25EZWZhdWx0cywgRm91ckNoYXJh
Y3RlclRhZ0hhc2gsIEZvdXJDaGFyYWN0ZXJUCiBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVwYXJl
UGxhdGZvcm1Gb250KENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmll
ZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBhcHBseVdlaWdodFdpZHRo
U2xvcGVWYXJpYXRpb25zID0gdHJ1ZSk7CiBlbnVtIGNsYXNzIFNob3VsZENvbXB1dGVQaHlzaWNh
bFRyYWl0cyA6IGJvb2wgeyBObywgWWVzIH07CiBTeW50aGVzaXNQYWlyIGNvbXB1dGVOZWNlc3Nh
cnlTeW50aGVzaXMoQ1RGb250UmVmLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBTaG91bGRDb21w
dXRlUGh5c2ljYWxUcmFpdHMgPSBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHM6Ok5vLCBib29s
IGlzUGxhdGZvcm1Gb250ID0gZmFsc2UpOwotUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1G
b250V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25SZXF1
ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQgc2l6ZSk7CitSZXRhaW5QdHI8Q1RGb250UmVm
PiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0
aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOwogRm9udFNlbGVjdGlv
bkNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXNGb3JGb250RGVzY3JpcHRvcihDVEZvbnREZXNjcmlw
dG9yUmVmKTsKIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENGTXV0YWJsZURp
Y3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogUmV0YWlu
UHRyPENURm9udFJlZj4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKENURm9udERlc2NyaXB0
b3JSZWYsIENHRmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9G
b250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA2ZmYwMGJmYmQ1NGEyYjhhMThlZWMwNTg0OTA3
OTM1NGMwMjEyZGIwLi4yYmI3MTAxNTkwZWViMTRkZTE0Zjk1MWM2YjNhMGEzY2E4NDJjMmFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAtMzE2LDggKzMxNiw4IEBAIGNv
bnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlCiAKICAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQg
PSBmYWxzZTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkp
LmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFu
Z2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgRm9udCogZm9udCA9IGZvbnRGb3JDaGFyYWN0ZXIoaSwgYmFzZUNoYXJhY3Rlcik7CiAgICAg
ICAgIGlmICghZm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKaW5kZXggZjAyN2VlZDMxNzE0NDRi
YzM2YTQzNDQ3NjNiNzNlMTJkYjJhMDI2Ny4uYWUwODNkODkwMTk5ZDAyMzVmZTEwZDUwODcwNGVj
MmFjOTNjNmNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcApAQCAtMzE5LDI1ICsz
MTksMjQgQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKIHsKICAgICAvLyBXZSB3YW50IHRvIHJl
dHVybiBhIGZhbGxiYWNrIGZvbnQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBsb2dpYyBwcmV2ZW50aW5n
IEZvbnRDb25maWcKICAgICAvLyBtYXRjaGVzIGZvciBub24tZmFsbGJhY2sgZm9udHMgbWlnaHQg
cmV0dXJuIDAuIFNlZSBpc0ZhbGxiYWNrRm9udEFsbG93ZWQuCi0gICAgc3RhdGljIEF0b21TdHJp
bmcgdGltZXNTdHIoInNlcmlmIik7Ci0gICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9udEZv
ckZhbWlseShmb250RGVzY3JpcHRpb24sIHRpbWVzU3RyKSkKLSAgICAgICAgcmV0dXJuICpmb250
OworICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0
aW9uLCAic2VyaWYiX3MpKQorICAgICAgICByZXR1cm4gZm9udC5yZWxlYXNlTm9uTnVsbCgpOwog
CiAgICAgLy8gVGhpcyBjb3VsZCBiZSByZWFjaGVkIGR1ZSB0byBpbXByb3Blcmx5LWluc3RhbGxl
ZCBvciBtaXNjb25maWd1cmVkIGZvbnRjb25maWcuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNo
ZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcm
LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25z
dCBTdHJpbmcmLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICByZXR1cm4geyB9Owog
fQogCi1zdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseSkKK3N0YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21G
YW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHkpCiB7CiAgICAgLy8gSWYgd2UncmUgY3JlYXRpbmcg
YSBmYWxsYmFjayBmb250IChlLmcuICItd2Via2l0LW1vbm9zcGFjZSIpLCBjb252ZXJ0IHRoZSBu
YW1lIGludG8KICAgICAvLyB0aGUgZmFsbGJhY2sgbmFtZSAobGlrZSAibW9ub3NwYWNlIikgdGhh
dCBmb250Y29uZmlnIHVuZGVyc3RhbmRzLgogICAgIGlmIChmYW1pbHkubGVuZ3RoKCkgJiYgIWZh
bWlseS5zdGFydHNXaXRoKCItd2Via2l0LSIpKQotICAgICAgICByZXR1cm4gZmFtaWx5LnN0cmlu
ZygpOworICAgICAgICByZXR1cm4gZmFtaWx5OwogCiAgICAgaWYgKGZhbWlseSA9PSBzdGFuZGFy
ZEZhbWlseSB8fCBmYW1pbHkgPT0gc2VyaWZGYW1pbHkpCiAgICAgICAgIHJldHVybiAic2VyaWYi
OwpAQCAtNTAwLDcgKzQ5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0NvbW1vbmx5VXNlZEdl
bmVyaWNGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lU3RyaW5nKQogICAgICAgICB8fCBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lU3RyaW5nLCAiY3Vyc2l2ZSIp
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCitzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJp
bmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywg
Rm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKIHsKICAgICAvLyBUaGUgQ1NTIGZv
bnQgbWF0Y2hpbmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZvbnRzLyNm
b250LW1hdGNoaW5nLWFsZ29yaXRobSkKICAgICAvLyBzYXlzIHRoYXQgd2UgbXVzdCBmaW5kIGFu
IGV4YWN0IG1hdGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBvciBvYmxpcXVlIGNh
biBiZSB1c2VkKQpAQCAtNTk5LDkgKzU5OCw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAg
ICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYpCitPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
Q29yZVRleHQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KaW5kZXggNDUxMTA3YmJiNDY1YmRlMzk1NDQ5ZGMw
NzhkODA1YThlMTY0ZjhhNC4uYzhjMTgxMDQ4MzRiYmMzZGFjNWFlMzZjNjMwZTRjNTM3NDhjNzU5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpAQCAtMTI1LDkg
KzEyNSw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsCiAgICAgICAgIGlzU3lzdGVtRmFsbGJh
Y2sgPSB0cnVlOwogCiAgICAgICAgIFUxNl9HRVQoY3AsIDAsIDAsIGxlbmd0aCwgYmFzZUNoYXJh
Y3Rlcik7Ci0gICAgICAgIGZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdCgwKS5mb250Rm9y
Q2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBmb250ID0gbV9mb250LmZvbnRGb3JD
aGFyYWN0ZXIoMCwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZm9udCkKLSAgICAgICAg
ICAgIGZvbnQgPSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckZpcnN0UmFuZ2Uo
KTsKKyAgICAgICAgICAgIGZvbnQgPSAmbV9mb250LmZvbnRGb3JGaXJzdFJhbmdlKCk7CiAgICAg
ICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGVD
b3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIGZvbnQtPmdldENGU3RyaW5nQXR0cmlidXRlcyht
X2ZvbnQuZW5hYmxlS2VybmluZygpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
LCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSkuZ2V0KCkpKTsKICAg
ICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGljaCBmb250IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRl
ciB0aGlzIGdyYXBoZW1lIGNsdXN0ZXIsIHNvIGVuYWJsZSBDb3JlVGV4dCdzIGZhbGxiYWNrIG1l
Y2hhbmlzbSBieSB1c2luZyB0aGUgQ1RGb250IHdoaWNoIGRvZXNuJ3QgaGF2ZSBDb3JlVGV4dCdz
IGZhbGxiYWNrIGRpc2FibGVkLgogICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShjb25zdF9j
YXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KHN0cmluZ0F0dHJpYnV0ZXMuZ2V0KCkpLCBrQ1RG
b250QXR0cmlidXRlTmFtZSwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKQEAgLTE4Nyw4
ICsxODcsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0
UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICAgICAgUmV0YWluUHRy
PENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRmb3JtRGF0YTo6b2Jq
ZWN0Rm9yRXF1YWxpdHlDaGVjayhydW5DVEZvbnQpOwogICAgICAgICAgICAgaWYgKCFXVEY6OnNh
ZmVDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udC0+cGxhdGZvcm1EYXRh
KCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkgewogICAgICAgICAgICAgICAgIC8v
IEJlZ2luIHRyeWluZyB0byBzZWUgaWYgcnVuRm9udCBtYXRjaGVzIGFueSBvZiB0aGUgZm9udHMg
aW4gdGhlIGZhbGxiYWNrIGxpc3QuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JD
aGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZvbnRGb3JDaGFyYWN0ZXIoaSwgYmFzZUNoYXJh
Y3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoV1RGOjpzYWZlQ0ZF
cXVhbChydW5Gb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkuZ2V0
KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDJiNGI1NTcy
YTRkODA4YjgzYjRiMGY0YWE2NGY5NmM5NjM4MmY2MTMuLmUxMWFlOWU2Nzg5ZTQwN2I0Mjc3ODc3
NjhjNzIzZTdlMWI3MDczYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0zNjIsOSArMzYyLDkgQEAgYm9vbCBG
b250Q2FjaGU6OmlzU3lzdGVtRm9udEZvcmJpZGRlbkZvckVkaXRpbmcoY29uc3QgU3RyaW5nJikK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9t
RGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9tU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkK
K1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250
LCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQogewotICAgIEF0b21TdHJpbmcgZmFtaWx5TmFt
ZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkp
OworICAgIFN0cmluZyBmYW1pbHlOYW1lKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihmb250Lmxm
RmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CiAgICAgUmVmUHRyPEZvbnQ+IGZvbnREYXRhID0gZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAgIGlmIChmb250RGF0
YSkKICAgICAgICAgb3V0Rm9udEZhbWlseU5hbWUgPSBmYW1pbHlOYW1lOwpAQCAtMzczLDU2ICsz
NzMsNTggQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb24KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6
bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPEF0b21TdHJpbmc+
IGZhbGxiYWNrRm9udE5hbWU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gZmFs
bGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAg
c3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgLy8gRklYTUU6IFdvdWxk
IGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhl
cmUuIEZvciBub3cgd2UnbGwgcGljaworICAgICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1
c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KKworICAgICAgICAvLyBT
ZWFyY2ggYWxsIHR5cGljYWwgV2luZG93cy1pbnN0YWxsZWQgZnVsbCBVbmljb2RlIGZvbnRzLgor
ICAgICAgICAvLyBTb3J0ZWQgYnkgbW9zdCB0byBsZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pY29kZV90eXBlZmFjZXMKKyAgICAgICAgLy8g
U3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCBp
ZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KKyAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0cmluZz4gZmFsbGJhY2tGb250c1tdID0geworICAgICAgICAgICAgU3Ry
aW5nKCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAg
ICAgICAgICAgIFN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGFob21hIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNv
ZGUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygi
QXJpYWwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgICAgICB9OworICAgICAg
ICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9u
dHNbaV0pKSB7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZS5nZXQoKSA9IGZhbGxi
YWNrRm9udHNbaV07CisgICAgICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBm
YWxsYmFja0ZvbnROYW1lKTsKKyAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBERUZBVUxUX0dV
SV9GT05UIGlmIG5vIGtub3duIFVuaWNvZGUgZm9udHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAg
aWYgKEhGT05UIGRlZmF1bHRHVUlGb250ID0gc3RhdGljX2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2Jq
ZWN0KERFRkFVTFRfR1VJX0ZPTlQpKSkgeworICAgICAgICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJ
TG9nRm9udDsKKyAgICAgICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRl
ZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKKyAgICAgICAgICAgIGlmIChz
aW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuICpzaW1wbGVGb250OworICAgICAgICB9CiAKLSAgICAvLyBGSVhNRTogV291bGQgYmUg
ZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4g
IEZvciBub3cgd2UnbGwgcGljawotICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291
bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgotCi0gICAgLy8gU2VhcmNoIGFsbCB0
eXBpY2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KLSAgICAvLyBTb3J0
ZWQgYnkgbW9zdCB0byBsZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvVW5pY29kZV90eXBlZmFjZXMKLSAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5l
dyBSb21hbiBhbHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3Qg
Y2hhbmdlIHByZWZzLgotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gZmFsbGJhY2tGb250c1tdID0gewotICAgICAgICBBdG9tU3RyaW5nKCJUaW1l
cyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAg
IEF0b21TdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJUYWhvbWEiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkx1Y2lkYSBTYW5zIFVu
aWNvZGUiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21T
dHJpbmcoIkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCi0gICAgfTsK
LSAgICBSZWZQdHI8Rm9udD4gc2ltcGxlRm9udDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgoZmFsbGJhY2tGb250cyk7ICsraSkgewotICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ld
KSkgewotICAgICAgICAgICAgZmFsbGJhY2tGb250TmFtZS5nZXQoKSA9IGZhbGxiYWNrRm9udHNb
aV07Ci0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7CisgICAgICAgIC8vIEZhbGwgYmFj
ayB0byBOb24tY2xpZW50IG1ldHJpY3MgZm9udHMuCisgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1Mg
bm9uQ2xpZW50TWV0cmljcyB7IH07CisgICAgICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0g
c2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpOworICAgICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5v
bkNsaWVudE1ldHJpY3MsIDApKSB7CisgICAgICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmlj
cy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnNpbXBsZUZvbnQ7CisgICAgICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1l
bnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKnNpbXBs
ZUZvbnQ7CisgICAgICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQs
IGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsK
KyAgICAgICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0Zv
bnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxi
YWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKKyAgICAg
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9u
dERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tG
b250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwogICAgICAgICB9
Ci0gICAgfQorICAgIH0pOwogCi0gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBERUZBVUxUX0dVSV9G
T05UIGlmIG5vIGtub3duIFVuaWNvZGUgZm9udHMgYXJlIGF2YWlsYWJsZS4KLSAgICBpZiAoSEZP
TlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3QoREVG
QVVMVF9HVUlfRk9OVCkpKSB7Ci0gICAgICAgIExPR0ZPTlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7Ci0g
ICAgICAgIEdldE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250
KSwgJmRlZmF1bHRHVUlMb2dGb250KTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIGRlZmF1bHRHVUlMb2dGb250
LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAg
ICB9CisgICAgaWYgKCFmYWxsYmFja0ZvbnROYW1lLmdldCgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7
CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRzLgotICAgIE5P
TkNMSUVOVE1FVFJJQ1Mgbm9uQ2xpZW50TWV0cmljcyB7IH07Ci0gICAgbm9uQ2xpZW50TWV0cmlj
cy5jYlNpemUgPSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7Ci0gICAgaWYgKFN5c3RlbVBhcmFt
ZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmlj
cyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgewotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZv
bnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0
cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVy
biAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZNZW51Rm9u
dCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0g
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9u
dERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250
TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlmIChzaW1w
bGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBu
b25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAg
ICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmlj
cy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
ICpzaW1wbGVGb250OwotICAgIH0KLSAgICAKICAgICBhdXRvIGhGb250ID0gYWRvcHRHRElPYmpl
Y3Qoc3RhdGljX2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpKSk7
CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoV1RGTW92ZShoRm9udCksIGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAg
ICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpOwpAQCAtNTEyLDcgKzUx
NCw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sgbWF0Y2hJbXByb3ZpbmdFbnVtUHJvYyhDT05TVCBM
T0dGT05UKiBjYW5kaWRhdGUsIENPTlNUIFRFWFRNCiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRp
YyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LCBMT05HIGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJvb2wg
c3ludGhlc2l6ZUl0YWxpYykKK3N0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQo
Y29uc3QgU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRh
bGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQogewogICAgIEhXbmREQyBoZGMo
MCk7CiAKQEAgLTU3MCwxMiArNTcyLDEyIEBAIHN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0
ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnCiB9CiAK
IHN0cnVjdCBUcmFpdHNJbkZhbWlseVByb2NEYXRhIHsKLSAgICBUcmFpdHNJbkZhbWlseVByb2NE
YXRhKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCisgICAgVHJhaXRzSW5GYW1pbHlQcm9j
RGF0YShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgICAgIDogbV9mYW1pbHlOYW1lKGZh
bWlseU5hbWUpCiAgICAgewogICAgIH0KIAotICAgIGNvbnN0IEF0b21TdHJpbmcmIG1fZmFtaWx5
TmFtZTsKKyAgICBjb25zdCBTdHJpbmcmIG1fZmFtaWx5TmFtZTsKICAgICBWZWN0b3I8Rm9udFNl
bGVjdGlvbkNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CiB9OwogCkBAIC02MjYsNyArNjI4
LDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExP
R0ZPTlQqIGxvZ0ZvbnQsIENPTlNUIFRFWFRNRVQKICAgICByZXR1cm4gMTsKIH0KIAotVmVjdG9y
PEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRD
YWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgSFduZERDIGhkYygw
KTsKIApAQCAtNjQ2LDcgKzY0OCw3IEBAIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
PiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlsCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRD
YWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVl
X3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcykKIHsKICAgICBib29sIGlzTHVjaWRhR3JhbmRlID0gZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpOwogCkBAIC02OTIsMTEgKzY5
NCw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
Y29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lKQogewotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQogICAgIHN3aXRjaCAoZmFtaWx5
TmFtZS5sZW5ndGgoKSkgewogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0
bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRo
dXMgd2UgYWxsb3cgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUgYml0
bWFwIGZvbnQgTVMgU2VyaWYsCkBAIC03MDUsNyArNzA0LDcgQEAgY29uc3QgQXRvbVN0cmluZyYg
Rm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAg
Y2FzZSA4OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgIm1zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAg
ICAgICAgICAgIHJldHVybiAiVGltZXMgTmV3IFJvbWFuIl9zOwogICAgICAgICBicmVhazsKICAg
ICAvLyBPbiBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2Fj
eSBjb250ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IE1pY3Jvc29m
dCBTYW5zIFNlcmlmIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2Fu
cyBTZXJpZiwKQEAgLTcxNCwxMCArNzEzLDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAg
ICAgLy8gd291bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgMTM6
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
bXMgc2FucyBzZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIG1pY3Jvc29mdFNhbnNTZXJpZjsK
KyAgICAgICAgICAgIHJldHVybiAiTWljcm9zb2Z0IFNhbnMgU2VyaWYiX3M7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQu
Y3BwCmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1MDNjNjI0ZmFlYTAxYjUuLjU1ZjFi
MWFmN2ZhMWQ5YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBS
ZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4geworc3RydWN0IFNhbWVTaXplQXNCaWRp
Q29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRl
eHQ+IHsKICAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKICAgICB2b2lkKiBwYXJlbnQ7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCmluZGV4IGQ0YzRl
NTcwOGEwZDQyY2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0ZDEuLjVhOGQ5MDllZWE5MWI2MTllNTM5
NDY5ZmRhY2ZjNGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBCaWRpRW1iZWRkaW5nU291cmNlIHsgRnJvbVN0
eWxlT3JET00sIEZyb21Vbmljb2RlIH07CiAKIC8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBleHBs
aWNpdCBlbWJlZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxC
aWRpQ29udGV4dD4geworY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8QmlkaUNvbnRleHQ+IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPEJpZGlDb250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rp
b24sIGJvb2wgb3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSA9IEZyb21TdHls
ZU9yRE9NLCBCaWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423711</attachid>
            <date>2021-03-19 03:17:30 -0700</date>
            <delta_ts>2021-03-19 04:12:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210319101728.patch</filename>
            <type>text/plain</type>
            <size>71537</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uYjk2ZDlkY2Uz
NGI4ODljZGY2ZDEyNmI5NTNkMDNhOTVhODdjMzEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsNyArNjQsNyBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCiAgICAgICAgICwg
bV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6
IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTk5LDggKzkwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwobV9m
YW1pbHksIG90aGVyLm1fZmFtaWx5KTsKICAgICB9CiAKKyAgICB2b2lkIGlzb2xhdGUoKSB7IG1f
ZmFtaWx5ID0gbV9mYW1pbHkuaXNvbGF0ZWRDb3B5KCk7IH0KKwogICAgIEZvbnREZXNjcmlwdGlv
bktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5OworICAg
IFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZm9udEZhY2VGZWF0
dXJlczsKICAgICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIG1fZm9udEZhY2VD
YXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQxLDM5ICsxMzQsMzMgQEAgc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZv
bnRQbGEKIAogdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNo
LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU7CiAKK3N0YXRpYyBMb2NrIGdQbGF0Zm9ybURhdGFDYWNoZUxvY2s7CisKIHN0YXRpYyBGb250
UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpCiB7CiAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4gY2FjaGU7CiAgICAgcmV0dXJu
IGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWls
eU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJh
bD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFt
ZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAg
ICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJp
ZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3
KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlbHZldGlj
YSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXMoIlRp
bWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdSb21hbigiVGlt
ZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNB
bHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0
ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAgICAgICAgcmV0
dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUu
bGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJldHVybiBoZWx2
ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIpKQotICAgICAg
ICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5l
dyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIiKSkKLSAgICAg
ICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIE5l
dyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQotICAgICAgICAg
ICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsKICAgICAgICAg
YnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291cmllciBOZXcg
aXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBAIC0xODMsMzMg
KzE3MCwyOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJlIHRyaWVkIGlm
IENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIgbmV3IikpCi0g
ICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAiQ291cmllciJf
czsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5ldyByb21hbiIp
KQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyJf
czsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpn
ZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUs
CiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBj
aGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAogI2lmIE9TKFdJ
TkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFkaW5nICJAIiBp
biB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRo
ZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBvdXJzZWx2ZXMs
IHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCi0gICAgLy8gSUUgZGlz
cmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0
aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRG
YW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1pbHlOYW1lWzBdICE9ICdAJykgPwotICAg
ICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRvbVN0cmluZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwo
KS0+c3Vic3RyaW5nKDEpKTsKKyAgICAvLyBJRSBkaXNyZWdhcmRzICJAIiByZWdhcmRsZXNzIG9m
IHRoZSBvcmllbnRhdGlvbiwgc28gd2UgZm9sbG93IHRoZSBiZWhhdmlvci4KKyAgICBjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lLnN1YnN0cmluZyhwYXNzZWRGYW1p
bHlOYW1lWzBdID09ICdAJyA/IDEgOiAwKTsKICNlbHNlCi0gICAgY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAgc3RhdGljIGJvb2wgaW5pdGlh
bGl6ZWQ7CkBAIC0yMjMsMTQgKzIwNSwxNCBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6
OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmbwogICAg
IGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtleSwgbnVsbHB0
cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFkZFJlc3VsdC5p
dGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAga2V5Lmlz
b2xhdGUoKTsKICAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJp
bGl0aWVzKTsKIAogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVO
YW1lKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEgZm9udC4gIFdl
IGhhdmUgYSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhlciBuYW1lcywK
ICAgICAgICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9Db3VyaWVyIE5l
dywgZXRjLiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4K
LSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVG
YW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGVOYW1lLmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3Jt
RGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmls
aXRpZXMsIHRydWUpOworICAgICAgICAgICAgaWYgKGF1dG8gYWx0ZXJuYXRlTmFtZSA9IGFsdGVy
bmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBmb250
UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
Zm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZh
Y2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIExvb2t1cCB0aGUga2V5
IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRvciBtYXkgaGF2
ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBj
YWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAgICAgICBpdCA9
IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKQEAgLTMxMiw4ICsyOTQsMTAgQEAg
Y29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBjb25zdCB1bnNp
Z25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0
IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMw
OwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRl
cm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdB
bHRlcm5hdGVOYW1lKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwog
ICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHVyZ2VUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIApAQCAtMzI1LDEwICszMDksOCBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjbwogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0gICAg
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgYXV0byBhZGRSZXN1
bHQgPSBjYWNoZWRGb250cygpLmVuc3VyZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAgICAgICAgIHJl
dHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9KTsKQEAgLTM0MCw2ICszMjIs
OCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAg
ICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5n
bGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZv
bnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJlc3N1
cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7CiAKQEAgLTM1NywxNSAr
MzQxLDEzIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgp
CiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VD
b3VudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBMT0co
Rm9udHMsICJGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSgldSkiLCBwdXJnZUNvdW50
KTsKIAogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7
CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0KICAg
ICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8UmVmPEZvbnQ+LCAyMD4gZm9u
dHNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1
ZXMoKSkgewpAQCAtNDIxLDYgKzQwMyw3IEBAIHN0YXRpYyBib29sIGtleXNNYXRjaChjb25zdCBG
b250Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBiCiAKIHZv
aWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fZm9udENhc2NhZGVDYWNoZS5jbGVhcigp
OwogfQogCkBAIC00MzcsMTIgKzQyMCwxOCBAQCBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtleSBt
YWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJgogICAg
IHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsKICAgICBr
ZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAgIGtleS5mYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworICAgICAgICBr
ZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpLnN0cmlu
ZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0
b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNl
bGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAgIHJldHVybiBrZXk7CiB9
CiAKK3N0YXRpYyB2b2lkIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KEZvbnRDYXNjYWRlQ2Fj
aGVLZXkmIGtleSkKK3sKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGtleS5mYW1pbGllcykKKyAg
ICAgICAgZmFtaWx5ID0gZmFtaWx5Lmlzb2xhdGVkQ29weSgpOworfQorCiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkm
IGtleSkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGhhc2ggdGhlIGtleSBhbmQgdGhlIGZhbWls
eSBuYW1lIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gbWFraW5nIGEgaGFzaCBvdXQgb2Ygb3RoZXIg
aGFzaGVzLgpAQCAtNDc5LDYgKzQ2OCw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2Fj
aGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAgICAg
aWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpc29sYXRlRm9udENhc2NhZGVDYWNoZUtleShrZXkp
OwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBu
ZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihXVEZNb3ZlKGtleSks
IEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKICAgICBS
ZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdldCgpOwpAQCAt
NDk3LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZl
T3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAKIHZvaWQgRm9udENhY2hl
Ojp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIFJlZlB0
cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVGb250cyhyZXRyaWV2ZU9yQWRk
Q2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1vdmUoZm9udFNl
bGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDggQEAgc2l6ZV90IEZvbnRDYWNoZTo6Zm9u
dENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9j
ayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52
YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCkBAIC01MjIsNiArNTEy
LDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwogCiB2b2lkIEZv
bnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9jayk7CisKICAgICBpZiAoIWdDbGll
bnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+OwogCkBA
IC01MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3Im
IGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImIGNs
aWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxv
Y2spOworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRh
aW5zKCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4IEBAIHVuc2lnbmVkIHNob3J0IEZvbnRD
YWNoZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2spOworCiAgICAg
aWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YUNhY2hlKCku
aXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4MSw3IEBAIHZvaWQgRm9u
dENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpCiB7CiB9CiAKLVJlZlB0
cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5k
ZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uM2RlNmFiMjQ0Nzcw
MjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRl
ICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFy
cmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFw
dGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAsNyBAQCBzdHJ1
Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3JpcHRpb24uY29t
cHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0KGRlc2Ny
aXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFncyhtYWtlRmxh
Z3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNp
ZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmllZExv
Y2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRlc2NyaXB0aW9u
LmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGluZ3MoZGVzY3Jp
cHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsxNTgsNyBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2VsZWN0aW9uUmVx
dWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+
IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOworICAgIFN0cmlu
ZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNldHRpbmdzOwog
ICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwogfTsKQEAgLTE3
OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7CiAKIHN0cnVjdCBG
b250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkgZm9udERlc2NyaXB0
aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hlIChjYWNoaW5n
IEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFtaWxpZXM7CisgICAg
VmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7
CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0yMjQsMTIgKzIyNSwx
MiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBzbyBDU1NGb250U2Vs
ZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0YWxsZWQgZm9udHMgYW5k
IEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdoZW4geW91IGNyZWF0ZSBh
biBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFzIGEgcHJlaW5zdGFsbGVk
IGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdldEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBnZXRG
b250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRG
b3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBi
b29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBS
ZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVs
bHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0cjxGb250PiBzaW1pbGFy
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpOwor
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2VsZWN0b3ImKTsK
ICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAgLTI0Nyw3ICsyNDgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKICNpZiBQTEFURk9STShX
SU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3RyaW5nJiBvdXRGb250RmFt
aWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBTdHJpbmcmIG91dEZvbnRG
YW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQpAQCAt
MjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0
cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQ
dHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQg
ZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0gbnVs
bHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9u
dFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVO
YW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkg
ZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBhbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgY29uc3QgQXRv
bVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcm
IGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9u
dFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyk7CisK
KyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+IHBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAgIFJlY3Vyc2l2ZUxvY2sg
bV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBtX3B1cmdlVGltZXI7CiAK
LSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xk
U3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAgICAgRm9udENhc2NhZGVD
YWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcgQEAgcHJpdmF0ZToKIAog
aW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIG51bGxwdHIsIHsgfSk7
CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpICYm
ICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMwMzhkYmY0NmUyOGMxOTIw
Li45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTE2OCw3ICsxNjgs
OSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBBdG9tU3RyaW5n
JikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwotICAgIGNv
bnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OworICAgIGJv
b2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBjb25zdCBGb250
KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2VzSW5kZXgsIFVDaGFyMzIp
IGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3Q7CiAgICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgRm9u
dFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25zdCBGb250KiBmb250Rm9y
Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoKSBj
b25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBGb250JiBGb250Q2FzY2Fk
ZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRzLT5wcmltYXJ5Rm9udCht
X2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250UmFuZ2VzJiBGb250Q2Fz
Y2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBib29s
IEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWduZWQgaW5kZXgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2ZvbnRzLT5yZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworICAgIHJldHVybiBtX2Zv
bnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsKK30K
KworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ2hhcmFjdGVyKHVuc2ln
bmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mb250
cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIobV9mb250RGVzY3JpcHRp
b24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2Nh
ZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mb250cyk7Cisg
ICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9udERlc2NyaXB0aW9uKTsK
IH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2Ny
aXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEwMmMzMTkyNDgwNDNmYTc0
NjRhZGMuLjE4MWFhM2EzODAzYjIyOTcxZmMxOTg3ZWZkM2ZhNDA0ODBlY2FlNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wgRm9udENhc2NhZGVEZXNj
cmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRl
RGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1ib29sIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9udENhc2NhZGVEZXNjcmlw
dGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZhbWlseTEsIGNvbnN0IFN0
cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwoKSB8fCBmYW1pbHkyLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5pc051bGwoKSAmJiBmYW1pbHkyLmlzTnVs
bCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4n
KSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5MjsKQEAgLTExMCwxNyArMTEyLDE1
IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7CiB9CiAKLXVuc2lnbmVkIEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkK
K3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IFN0
cmluZyYgZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChmYW1pbHkuc3Rh
cnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5LmV4aXN0aW5nSGFzaCgpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChmYW1pbHkpOwor
ICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5LmlzTnVsbCgp
ID8gZW1wdHlTdHJpbmcoKSA6IGZhbWlseSk7CiB9CiAKIFN0cmluZyBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5KQogeworICAgIGlm
IChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFtaWx5OwogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQogICAgICAgICByZXR1cm4g
ZmFtaWx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThjNWE4OTBiZDJk
ZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkxYmMwNjNiZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxp
ZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4mIGZhbWlsaWVz
KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQogCi0gICAgc3RhdGljIGJvb2wgZmFtaWx5
TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmluZyYpOwotICAg
IHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5nJik7CisgICAg
c3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgU3RyaW5nJik7
CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXgg
MmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIzNC4uNmIyMzY1Njg1MGU4YjAy
NjE0NGI3MWVlZjkxZTgxZjZhYmRjYjYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTEwNywxOCArMTA3LDIw
IEBAIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rv
cj4mJiBmb250U2VsZWN0b3IpCiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9u
dHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQotICAgIDogbV9jYWNoZWRQ
cmltYXJ5Rm9udChudWxscHRyKQorICAgIDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSgx
KQorICAgICwgbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQogICAgICwgbV9mb250U2VsZWN0
b3JWZXJzaW9uKDApCiAgICAgLCBtX2dlbmVyYXRpb24oRm9udENhY2hlOjpzaW5nbGV0b24oKS5n
ZW5lcmF0aW9uKCkpCiAgICAgLCBtX2lzRm9yUGxhdGZvcm1Gb250KHRydWUpCiB7Ci0gICAgbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CisgICAgbV9yZWFsaXpl
ZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhGb250UmFuZ2VzKEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CiB9CiAKIEZvbnRDYXNjYWRl
Rm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkgPSBkZWZhdWx0OwogCiB2b2lkIEZvbnRDYXNjYWRl
Rm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6
ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgIHVuc2lnbmVkIG51bVJh
bmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwogICAgIGlmIChudW1SYW5nZXMgPT0gMSkKQEAg
LTEyOSw2ICsxMzEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogCiBib29sIEZvbnRDYXNj
YWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9yIChhdXRvJiBmb250UmFuZ2VzIDogbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzKSB7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTG9hZGluZygp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzMsMTQgKzE3NiwyMSBAQCBzdGF0aWMg
Rm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLAogCiBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jh
bmdlc1tpbmRleF07CisgICAgLy8gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzIGlzIGEgbGlua2Vk
IGxpc3QgYW5kIGl0cyBsZW5ndGggb25seSBncm93cywKKyAgICAvLyBpdCBpcyBuZXZlciBvdGhl
cndpc2UgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHNhZmUgdG8gYWNjZXNzCisgICAg
Ly8gZXhpc3Rpbmcgbm9kZXMgd2l0aG91dCB0YWtpbmcgdGhlIGxvY2ssIHNvIHdlIGFzc2VydCB0
aGF0IHRoZSBsb2NrIGlzCisgICAgLy8gaGVsZCBhZnRlciB0aGlzIGZhc3QgcmV0dXJuIHBhdGgu
CisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSkgeworICAgICAg
ICBhdXRvIGl0ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmJlZ2luKCk7CisgICAgICAgIHN0
ZDo6YWR2YW5jZShpdCwgaW5kZXgpOworICAgICAgICByZXR1cm4gKml0OworICAgIH0KIAotICAg
IEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgpKTsKKyAgICBB
U1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPT0gbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzU2l6ZSk7CiAgICAgQVNTRVJUKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2Vu
ZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKLSAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5n
ZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6
ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CisgICAgYXV0byBmb250UmFuZ2VzID0gRm9udFJhbmdl
cygpOwogCiAgICAgaWYgKCFpbmRleCkgewogICAgICAgICBmb250UmFuZ2VzID0gcmVhbGl6ZU5l
eHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4LCBtX2Zv
bnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0xODgsMjMgKzE5OCw0MiBAQCBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2Fz
Y2FkZURlcwogICAgICAgICAgICAgZm9udFJhbmdlcyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFu
Z2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFyZEZhbWlseSk7CiAgICAgICAgIGlmIChm
b250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMo
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9u
KSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1p
bHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2so
ZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3Iu
Z2V0KCkpOworCisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVj
dG9yKSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49
IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOworCisgICAgICAgICAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKKyAgICAgICAgICAgIGlm
IChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0Zv
bnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5k
ZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9mb250U2VsZWN0
b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSkK
LSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1f
bGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOworICAgIG1f
cmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2soV1RGTW92ZShmb250UmFuZ2VzKSk7Cisg
ICAgKyttX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplOworICAgIHJldHVybiBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXMuYmFjaygpOworfQogCi0gICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkg
JiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsKK2Jvb2wgRm9u
dENhc2NhZGVGb250czo6ZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGlu
ZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGlu
ZGV4KS5pc051bGwoKTsKK30KIAotICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFj
a0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0
aXZlRmFtaWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxiYWNrSW5kZXgg
PT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCi0gICAgICAgICAgICByZXR1
cm4gZm9udFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7Ci0g
ICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0Zv
bnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCkpOwotICAgIH0KK2Nv
bnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JDaGFyYWN0ZXIoY29uc3QgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNo
YXJhY3RlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxp
emVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxi
YWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5mb250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
cik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdlczsKK2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRl
Rm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ssIG1fcmVh
bGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJC
b3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQpAQCAtMzIzLDEwICszNTIsMTAgQEAgc3RhdGljIEds
eXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihV
Q2hhcjMyIGNoYXJhY3QKICAgICByZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGNvbnN0IEZvbnQq
IGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRlRm9udHMmIGZvbnRDYXNjYWRlRm9udHMs
IGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJh
Y3RlcikKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZpbmRCZXN0RmFsbGJhY2tGb250
KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJh
Y3RlcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyA7ICsrZmFsbGJh
Y2tJbmRleCkgewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gZm9udENhc2NhZGVGb250cy5y
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CisgICAg
ICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgZmFsbGJhY2tJbmRleCk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8qIGN1cnJlbnRGb250ID0gZm9udFJhbmdlcy5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQ
b2xpY3k6OkZvcmJpZCkuZm9udDsKQEAgLTM0MiwxMCArMzcxLDEwIEBAIHN0YXRpYyBjb25zdCBG
b250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250Q2FzY2FkZUZv
bnRzLCBjb25zCiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0
ZW1GYWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIGJvb2wgc3lzdGVtRmFsbGJhY2tT
aG91bGRCZUludmlzaWJsZSkKIHsKLSAgICBjb25zdCBGb250KiBmb250ID0gZmluZEJlc3RGYWxs
YmFja0ZvbnQoKnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFyYWN0ZXIpOworICAgIGNvbnN0IEZvbnQq
IGZvbnQgPSBmaW5kQmVzdEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsKIAog
ICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9ICZyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgZm9udCA9ICZmb250
Rm9yRmlyc3RSYW5nZShkZXNjcmlwdGlvbik7CiAKICAgICBhdXRvIHN5c3RlbUZhbGxiYWNrRm9u
dCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGRlc2Ny
aXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250ID8gSXNGb3JQbGF0Zm9ybUZvbnQ6OlllcyA6IElz
Rm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0ZvbnQpCkBAIC00
ODgsOSArNTE3LDkgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFnZUZyb21Gb250
UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQKIAogR2x5cGhEYXRhIEZvbnRD
YXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50KQogewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQgIT0gQXV0b1Zh
cmlhbnQpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmICh2
YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCiAgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JWYXJp
YW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKIApAQCAtNTE2LDYgKzU0NSw3IEBAIEdseXBo
RGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBj
b25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0ZW1G
YWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBp
ZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNrIGZvbnRzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVG
b250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250
cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZiYTVjMTgzYTU4ZjViYWQzOGQuLjk4M2Iy
MGZlMTdiZGVhZWYxNTk2ZWRiYzY1OGVlMzBiNWFiZmQ0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKQEAgLTI3LDcgKzI3
LDkgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJXaWR0aENhY2hlLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgpAQCAtNDMsNyArNDUs
NyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRGb250R2x5cGhQYWdlOwogCiBERUNMQVJF
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKLWNsYXNz
IEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7
CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZv
bnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q2FzY2FkZUZv
bnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihG
b250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTcwLDcgKzcyLDkgQEAgcHVibGljOgogICAg
IGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoQ2Fj
aGU7IH0KIAogICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2VzJiByZWFsaXpl
RmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgdW5zaWduZWQg
ZmFsbGJhY2tJbmRleCk7CisgICAgYm9vbCBmYWxsYmFja1Jhbmdlc0FyZU51bGwoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkKTsKKyAgICBjb25zdCBGb250KiBmb250Rm9y
Q2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCBmYWxsYmFj
a1Jhbmdlc0luZGV4LCBVQ2hhcjMyKTsKKyAgICBjb25zdCBGb250JiBmb250Rm9yRmlyc3RSYW5n
ZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIHBydW5lU3lzdGVt
RmFsbGJhY2tzKCk7CiAKQEAgLTc4LDEwICs4MiwxNCBAQCBwcml2YXRlOgogICAgIEZvbnRDYXNj
YWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2NhZGVGb250cyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxi
YWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJl
SW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChVQ2hhcjMyLCBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwKTsKIAotICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXM7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdlcyYgcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVk
IGZhbGxiYWNrSW5kZXgpOworCisgICAgU3RkTGlzdDxGb250UmFuZ2VzPiBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSB7
IDAgfTsKICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggeyAwIH07CiAK
ICAgICBjbGFzcyBHbHlwaFBhZ2VDYWNoZUVudHJ5IHsKQEAgLTExNCw2ICsxMjIsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKICAgICBQaXRjaCBtX3BpdGNo
IHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2Ug
fTsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogfTsKIAogaW5saW5lIGJvb2wgRm9udENhc2Nh
ZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQpAQCAtMTI1LDcgKzEzNCwxMCBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRz
Ojppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcAogCiBp
bmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAgICAgcmV0dXJuICpt
X2NhY2hlZFByaW1hcnlGb250OworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRvJiBwcmltYXJ5
UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgICAg
ICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5mb250OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAppbmRleCBh
YzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJiMGYxZTZhNTBh
NDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAi
Rm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNlbGVjdG9yIDog
cHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2VsZWN0b3IgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJiMWJkN2ZhN2Zl
MWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZmYWNmNWNkMTk1
ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCkBA
IC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHVuaWNvZGUv
dXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIEEgR2x5
cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZv
ciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVuaWNvZGUgY29k
ZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJvbSAwIGFuZCBp
bmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1jbGFzcyBHbHlw
aFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEdseXBoUGFnZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4MmY3YzJjZjhiMjM0MjNiYzcwNDhhMzg5
NmE3Y2NhNGVhMDQ4Li5kZTE0NzE2ZmIxZDZmYTVhOGFmNTQ1MTU2ODBlOGZmNmY4MWEwMTY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTI5LDggKzEyOSw4IEBAIGNvbnN0IEZv
bnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICYmICghcHJlZmVyQ29sb3JlZEZvbnQgfHwgYmFzZUZv
bnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpKQogICAgICAgICByZXR1cm4g
YmFzZUZvbnQ7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChp
KS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZhbGxiYWNrRm9udCA9IGZh
bGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkgeworICAgICAg
ICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGksIGNoYXJhY3Rl
cik7CiAgICAgICAgIGlmICghZmFsbGJhY2tGb250IHx8IGZhbGxiYWNrRm9udCA9PSBiYXNlRm9u
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXgg
ZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZjMjVjNDFmMzcyZGU1MjRiMS4uNDAyOTJmMjcwZjIwOTg3
MjE1ZGVhNmM5OGQzMmIwOTk0NmZjYjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApAQCAt
NjE5LDcgKzYxOSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQo
Q1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgcmV0dXJuIGFkb3B0
Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwgQ1RGb250R2V0
U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7CiB9CiAKLVJl
ZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK1JlZlB0cjxGb250PiBGb250
Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHByb3By
aWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdvcmRz
IGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNo
IGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgpAQCAtNjI4LDI3
ICs2MjgsMTkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBmb3Ig
d2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNp
ZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHks
ICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlw
dGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXJhYmlj
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhNQUtFX1NUQVRJ
Q19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUiKSk7Ci0gICAgc3RhdGljIFN0
cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVy
ZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIGZvciAoU3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7
Ci0gICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgqbWF0Y2hXb3Jk
KSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRX
ZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxhaW4p
OworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIG1hdGNoV29yZHNbXSA9IHsgIkFy
YWJpYyJfcywgIlBhc2h0byJfcywgIlVyZHUiX3MgfTsKKyAgICBhdXRvIGZhbWlseU1hdGNoZXIg
PSBTdHJpbmdWaWV3KGZhbWlseSk7CisgICAgZm9yIChhdXRvIG1hdGNoV29yZCA6IG1hdGNoV29y
ZHMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TWF0Y2hlciwg
U3RyaW5nVmlldyhtYXRjaFdvcmQpKSkKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5
KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/ICJH
ZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBjb25zdCBGb250RGF0YWJhc2U6
Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0YWJhc2U6OkluCiAg
ICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07CiB9CiAKLVZlY3Rv
cjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxlZEZv
bnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9
IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXMg
PyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkgOiBG
b250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7Ci0g
ICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShm
YW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRhYmFz
ZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGlmIChmb250cy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAgKzExMDAsMTAgQEAgc3RydWN0
IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0U2NyaXB0TmFtZSB7IGZhbHNl
IH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5
KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVzdCwg
ZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBzaXpl
LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAg
ICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7Ci0gICAgaWYgKCFpc1N5
c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYmICFhbGxvd2xp
c3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkpICYmIGFs
bG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQogICAgICAgICBy
ZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpAQCAtMTEyMyw3ICsxMTE1LDcg
QEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAgICBhdXRvJiBmb250RGF0YWJh
c2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6
WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
IDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250cygp
OwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rpb25G
b3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9
IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAgICAgaWYgKGZhbWls
eUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQg
Zm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1pbHku
IEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwogICAgICAgICAvLyBzdXBwb3J0
IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBIb3dldmVyLCB0aGlzIGNyZWF0
ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAoZm9udC13ZWlnaHQsCkBAIC0x
MTc3LDcgKzExNjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCkKICAgICBG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKTsKIH0KIAotc3RhdGljIFJldGFpblB0
cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6
ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0
aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZs
b2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRz
KQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9u
OjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIE9w
dGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjA2LDcgKzExOTgsNyBA
QCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCJVSUNU
Rm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVz
Y3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICAgICAgQ1RGb250U3ltYm9saWNU
cmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRD
YWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0
eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8g
a0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LnN0cmluZygpLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRl
bnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5n
KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWlseS5jcmVhdGVD
RlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNvY29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6
ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWl0cykKICAgICAgICAgICAg
IGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJv
bGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRyYWl0cywgdHJhaXRzKSk7CiAgICAgICAgIHJl
dHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwg
YWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtMTI0MCw3ICsxMjMyLDcgQEAgc3RhdGljIFJl
dGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRy
PENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RG
b250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZv
bnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZh
Y2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI4Myw3ICsxMjc1LDcgQEAgc3RhdGljIHZv
aWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJpbmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkKIH0K
ICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpj
cmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAgICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAgLTEyOTYsNyArMTI4OCw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8gQXV0byBhY3RpdmF0ZSB0aGUgZm9udCBiZWZv
cmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGltZS4KICAgICAgICAgLy8gSWdub3JlIHRoZSBy
ZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxs
eSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmco
KSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAogICAg
ICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRG
YWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBzaXplKTsKICAgICB9CkBAIC0xNDI4
LDcgKzE0MjAsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNo
YXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250Rm9y
UGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250
Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJu
YXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNv
bnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQz
NiwxMCArMTQyOCwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25z
dCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwg
MHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5n
W10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVND
KCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygi
U29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxh
Y2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhl
aXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAi
U29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRD
ID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0
aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBB
U0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAg
c3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAtMTQ3NCw3ICsx
NDY2LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZh
bWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAog
dm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJl
ZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cykKQEAgLTE1NDcsNyArMTUzOSw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNv
cnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAg
ICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2Vy
J3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVm
YXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4K
LSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRv
bVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAg
IGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMi
X3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3Vh
cmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4OWYy
MTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAzOTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQwN2M4
MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaApAQCAtNjIsNyArNjIsNyBA
QCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0
ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBs
YXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRD
YXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNs
b3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBjbGFzcyBTaG91bGRDb21wdXRlUGh5c2ljYWxU
cmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5
U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkQ29tcHV0
ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9vbCBp
c1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9u
dFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVz
dCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOworUmV0YWluUHRyPENURm9udFJlZj4g
cGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlv
blJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRv
clJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0
aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0
cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9y
UmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29y
ZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkz
NTRjMDIxMmRiMC4uMmJiNzEwMTU5MGVlYjE0ZGUxNGY5NTFjNmIzYTBhM2NhODQyYzJhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTMxNiw4ICszMTYsOCBAQCBjb25z
dCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZQogCiAgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0g
ZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5p
c051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdl
c0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAgICAgIGNvbnN0
IEZvbnQqIGZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAg
ICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMz
NmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLmFlMDgzZDg5MDE5OWQwMjM1ZmUxMGQ1MDg3MDRlYzJh
YzkzYzZjZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zy
ZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMxOSwyNSArMzE5
LDI0IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1
cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBG
b250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJl
dHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5n
IHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCi0gICAgICAgIHJldHVybiAqZm9udDsK
KyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgInNlcmlmIl9zKSkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZU5vbk51bGwoKTsKIAog
ICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9wZXJseS1pbnN0YWxsZWQg
b3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6
OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
cz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3Qg
U3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFt
aWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEg
ZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFt
ZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQg
Zm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1p
bHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAogICAgIGlmIChmYW1pbHkgPT0gc3RhbmRhcmRG
YW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5KQogICAgICAgICByZXR1cm4gInNlcmlmIjsK
QEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25seVVzZWRHZW5l
cmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykKICAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKTsK
IH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZv
bnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgLy8gVGhlIENTUyBmb250
IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9u
dC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdlIG11c3QgZmluZCBhbiBl
eGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Igb2JsaXF1ZSBjYW4g
YmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAg
IHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQorT3B0aW9uYWw8
QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDQ1MTEwN2JiYjQ2NWJkZTM5NTQ0OWRjMDc4
ZDgwNWE4ZTE2NGY4YTQuLmM4YzE4MTA0ODM0YmJjM2RhYzVhZTM2YzYzMGU0YzUzNzQ4Yzc1OTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTEyNSw5ICsx
MjUsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICBpc1N5c3RlbUZhbGxiYWNr
ID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0
ZXIpOwotICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckNo
YXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgZm9udCA9IG1fZm9udC5mb250Rm9yQ2hh
cmFjdGVyKDAsIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAg
ICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7
CisgICAgICAgICAgICBmb250ID0gJm1fZm9udC5mb250Rm9yRmlyc3RSYW5nZSgpOwogICAgICAg
ICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29w
eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9m
b250LmVuYWJsZUtlcm5pbmcoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwg
bV9mb250LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpLmdldCgpKSk7CiAgICAg
ICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggZm9udCBzaG91bGQgYmUgdXNlZCB0byByZW5kZXIg
dGhpcyBncmFwaGVtZSBjbHVzdGVyLCBzbyBlbmFibGUgQ29yZVRleHQncyBmYWxsYmFjayBtZWNo
YW5pc20gYnkgdXNpbmcgdGhlIENURm9udCB3aGljaCBkb2Vzbid0IGhhdmUgQ29yZVRleHQncyBm
YWxsYmFjayBkaXNhYmxlZC4KICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29uc3RfY2Fz
dDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwga0NURm9u
dEF0dHJpYnV0ZU5hbWUsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CkBAIC0xODcsOCAr
MTg3LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1
bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgICAgIFJldGFpblB0cjxD
RlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVj
dEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKICAgICAgICAgICAgIGlmICghV1RGOjpzYWZl
Q0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3JtRGF0YSgp
Lm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBC
ZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZvbnQgbWF0Y2hlcyBhbnkgb2YgdGhlIGZvbnRzIGlu
IHRoZSBmYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hh
cmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFdURjo6c2FmZUNGRXF1
YWwocnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgp
LCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0
ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi43ZjU3MjMyZTA3ZDI1MDdiNDk0ZjYxODll
MWZiZDRhNmViOGQyZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzYyLDkgKzM2Miw5IEBAIGJvb2wgRm9u
dENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0cmluZyYpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwg
U3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBBdG9tU3RyaW5nIGZhbWlseU5hbWUo
Zm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsK
KyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZh
Y2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0cjxGb250PiBmb250RGF0YSA9IGZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoZm9udERhdGEp
CiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKQEAgLTM3Myw1NiArMzcz
LDU3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9uCiAKIFJlZjxGb250PiBGb250Q2FjaGU6Omxh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBm
YWxsYmFja0ZvbnROYW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhbGxi
YWNrRm9udE5hbWU7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJl
LiBGb3Igbm93IHdlJ2xsIHBpY2sKKyAgICAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNl
ciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCisKKyAgICAgICAgLy8gU2Vh
cmNoIGFsbCB0eXBpY2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KKyAg
ICAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCisgICAgICAgIC8vIFN0
YXJ0IHdpdGggVGltZXMgTmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1bHQgaWYg
dGhlIHVzZXIgZG9lc24ndCBjaGFuZ2UgcHJlZnMuCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgICAgIFN0cmlu
ZygiVGltZXMgTmV3IFJvbWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAg
ICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2Rl
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIkFy
aWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAgICAgfTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250c1tpXSkpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lLmdldCgp
ID0gZmFsbGJhY2tGb250c1tpXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5nZXQoKS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxi
YWNrRm9udE5hbWUpOworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERFRkFVTFRfR1VJX0ZP
TlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgorICAgICAgICBpZiAo
SEZPTlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3Qo
REVGQVVMVF9HVUlfRk9OVCkpKSB7CisgICAgICAgICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dG
b250OworICAgICAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2YoZGVmYXVs
dEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOworICAgICAgICAgICAgaWYgKGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgZGVmYXVsdEdVSUxvZ0Zv
bnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogCi0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRo
ZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKLSAgICAvLyB0
aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBw
cmVmcy4KLQotICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWluc3RhbGxlZCBmdWxs
IFVuaWNvZGUgZm9udHMuCi0gICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFj
Y29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2Vz
Ci0gICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0aGUg
ZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9
IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBT
ZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0
cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAg
ICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKQotICAgIH07Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbXBsZUZvbnQ7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9u
dHMpOyArK2kpIHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSkpIHsKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dE5hbWUuZ2V0KCkgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAgcmV0dXJuICpzaW1w
bGVGb250OworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRz
LgorICAgICAgICBOT05DTElFTlRNRVRSSUNTIG5vbkNsaWVudE1ldHJpY3MgeyB9OworICAgICAg
ICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKKyAg
ICAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBz
aXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgeworICAgICAg
ICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
bm9uQ2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
IChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVu
dE1ldHJpY3MubGZTdGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQo
Zm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNr
Rm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJp
Y3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICB9CisgICAgfSk7CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8g
dGhlIERFRkFVTFRfR1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxh
YmxlLgotICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0PEhGT05UPihH
ZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKLSAgICAgICAgTE9HRk9OVCBkZWZh
dWx0R1VJTG9nRm9udDsKLSAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2Yo
ZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOwotICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
ZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
ICpzaW1wbGVGb250OwotICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBm
YWxsYmFja0ZvbnROYW1lKTsKIAotICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1ldHJp
Y3MgZm9udHMuCi0gICAgTk9OQ0xJRU5UTUVUUklDUyBub25DbGllbnRNZXRyaWNzIHsgfTsKLSAg
ICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKLSAg
ICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVv
Zihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVudE1ldHJpY3MsIDApKSB7Ci0gICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0
aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQot
ICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9
IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50
TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVy
biAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTdGF0dXNG
b250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsK
LSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChm
b250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwgZmFsbGJhY2tG
b250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlmIChz
aW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0g
ICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQotICAgIAogICAgIGF1dG8gaEZv
bnQgPSBhZG9wdEdESU9iamVjdChzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3QoREVG
QVVMVF9HVUlfRk9OVCkpKTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShXVEZN
b3ZlKGhGb250KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZhbHNlLCBm
YWxzZSwgZmFsc2UpOwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0
YSk7CkBAIC01MTIsNyArNTEzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBtYXRjaEltcHJvdmlu
Z0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1QgVEVYVE0KICAgICByZXR1
cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRhbGlj
LCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3RhdGljIEdESU9iamVjdDxIRk9O
VD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0
LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCiB7
CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzEsMTIgQEAgc3RhdGljIEdESU9i
amVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcg
ZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgewotICAgIFRy
YWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKKyAgICBU
cmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAgICAg
OiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQogCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgbV9mYW1pbHlOYW1lOwog
ICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKIH07
CiAKQEAgLTYyNiw3ICs2MjcsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5
RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAgIHJldHVy
biAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpn
ZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1p
bHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsK
ICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ3LDcgQEAgVmVjdG9yPEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
c0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wgaXNMdWNpZGFHcmFuZGUg
PSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIik7
CiAKQEAgLTY5MiwxMSArNjkzLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+
IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8
QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRTYW5zU2VyaWYoIk1pY3Jv
c29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCiAg
ICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24gV2luZG93cywgd2Ug
ZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1
cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJu
YXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcwNSw3ICs3MDMsNyBAQCBj
b25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxh
dGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiB0
aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAg
ICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFw
IGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMg
d2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBi
aXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTIsMTAgQEAgY29uc3QgQXRv
bVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0
b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4gbWlj
cm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJNaWNyb3NvZnQgU2FucyBTZXJp
ZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxsQXRvbSgpOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2MTU0YmMwNGJlYTUwM2M2
MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFiZmJhMDc2YmQ3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTI2LDcg
KzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0JpZGlD
b250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CitzdHJ1
Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNh
bWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OwogICAg
IHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQzOWJkMzRkMS4uNWE4
ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIyLDE1IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIEJpZGlFbWJlZGRp
bmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAogLy8gVXNlZCB0byBr
ZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBCaWRpQ29udGV4dCA6IHB1
YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRpQ29udGV4dCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxl
dmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5n
U291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423716</attachid>
            <date>2021-03-19 04:12:11 -0700</date>
            <delta_ts>2021-03-23 02:03:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210319111209.patch</filename>
            <type>text/plain</type>
            <size>71546</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uNWZkNDU1NWFj
ZmM0NDlhNmY4NWEzMjBiMWRlYjVkZGMzNmFhZjljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsNyArNjQsNyBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCiAgICAgICAgICwg
bV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6
IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTk5LDggKzkwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwobV9m
YW1pbHksIG90aGVyLm1fZmFtaWx5KTsKICAgICB9CiAKKyAgICB2b2lkIGlzb2xhdGUoKSB7IG1f
ZmFtaWx5ID0gbV9mYW1pbHkuaXNvbGF0ZWRDb3B5KCk7IH0KKwogICAgIEZvbnREZXNjcmlwdGlv
bktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5OworICAg
IFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZm9udEZhY2VGZWF0
dXJlczsKICAgICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIG1fZm9udEZhY2VD
YXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQxLDM5ICsxMzQsMzMgQEAgc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZv
bnRQbGEKIAogdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNo
LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU7CiAKK3N0YXRpYyBSZWN1cnNpdmVMb2NrIGdQbGF0Zm9ybURhdGFDYWNoZUxvY2s7CisKIHN0
YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpCiB7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4gY2FjaGU7CiAg
ICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFT
Q0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBj
b3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
dGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdS
b21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZp
Y0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAg
ICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZh
bWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJl
dHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIp
KQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4g
IlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIi
KSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJD
b3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQot
ICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsK
ICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291
cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBA
IC0xODMsMzMgKzE3MCwyOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJl
IHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIg
bmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAi
Q291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5l
dyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJu
ICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9t
KCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9u
dENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZh
bWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJl
cywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAog
I2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFk
aW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZs
YWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBv
dXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCi0gICAg
Ly8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdl
IGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9
IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1pbHlOYW1lWzBdICE9ICdA
JykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRvbVN0cmluZyhwYXNzZWRGYW1pbHlO
YW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICAvLyBJRSBkaXNyZWdhcmRzICJAIiByZWdh
cmRsZXNzIG9mIHRoZSBvcmllbnRhdGlvbiwgc28gd2UgZm9sbG93IHRoZSBiZWhhdmlvci4KKyAg
ICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lLnN1YnN0cmluZyhw
YXNzZWRGYW1pbHlOYW1lWzBdID09ICdAJyA/IDEgOiAwKTsKICNlbHNlCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjMsMTQgKzIwNSwxNCBAQCBGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmbwogICAgIGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtl
eSwgbnVsbHB0cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFk
ZFJlc3VsdC5pdGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAg
ICAga2V5Lmlzb2xhdGUoKTsKICAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzKTsKIAogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdB
bHRlcm5hdGVOYW1lKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEg
Zm9udC4gIFdlIGhhdmUgYSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhl
ciBuYW1lcywKICAgICAgICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9D
b3VyaWVyIE5ldywgZXRjLiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFz
ZWQgbmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZU5hbWUgPSBh
bHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICAgICAgaWYgKCFhbHRlcm5h
dGVOYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9u
dFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZh
Y2VDYXBhYmlsaXRpZXMsIHRydWUpOworICAgICAgICAgICAgaWYgKGF1dG8gYWx0ZXJuYXRlTmFt
ZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0
Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJl
cywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIExvb2t1
cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRv
ciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJl
Y3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAg
ICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKQEAgLTMxMiw4ICsy
OTQsMTAgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBj
b25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1
MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250
RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWls
eShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKwogICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHVy
Z2VUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIApAQCAtMzI1LDEwICszMDksOCBAQCBSZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjbwogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2Vu
ZGlmCi0gICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgYXV0
byBhZGRSZXN1bHQgPSBjYWNoZWRGb250cygpLmVuc3VyZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAg
ICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9KTsKQEAgLTM0
MCw2ICszMjIsOCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIAogdm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCiAgICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICB1bnNpZ25lZCBp
bmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVt
b3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7CiAKQEAg
LTM1NywxNSArMzQxLDEzIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJ
Zk5lZWRlZCgpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWdu
ZWQgcHVyZ2VDb3VudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
ICAgICBMT0coRm9udHMsICJGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSgldSkiLCBw
dXJnZUNvdW50KTsKIAogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2Fk
ZUNhY2hlKCk7CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2Vu
ZGlmCi0KICAgICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8UmVmPEZvbnQ+
LCAyMD4gZm9udHNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9u
dHMoKS52YWx1ZXMoKSkgewpAQCAtNDIxLDYgKzQwMyw3IEBAIHN0YXRpYyBib29sIGtleXNNYXRj
aChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBiCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fZm9udENhc2NhZGVDYWNo
ZS5jbGVhcigpOwogfQogCkBAIC00MzcsMTIgKzQyMCwxOCBAQCBzdGF0aWMgRm9udENhc2NhZGVD
YWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJgogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQo
KTsKICAgICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAg
IGtleS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOwor
ICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0
KGkpLnN0cmluZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAgIHJldHVy
biBrZXk7CiB9CiAKK3N0YXRpYyB2b2lkIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KEZvbnRD
YXNjYWRlQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGtleS5mYW1p
bGllcykKKyAgICAgICAgZmFtaWx5ID0gZmFtaWx5Lmlzb2xhdGVkQ29weSgpOworfQorCiBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0IEZvbnRDYXNjYWRl
Q2FjaGVLZXkmIGtleSkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGhhc2ggdGhlIGtleSBhbmQg
dGhlIGZhbWlseSBuYW1lIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gbWFraW5nIGEgaGFzaCBvdXQg
b2Ygb3RoZXIgaGFzaGVzLgpAQCAtNDc5LDYgKzQ2OCw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRz
PiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURl
c2NyCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpc29sYXRlRm9udENhc2NhZGVDYWNo
ZUtleShrZXkpOwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKICAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihXVEZN
b3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3Rvcikp
KTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdl
dCgpOwpAQCAtNDk3LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6
OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAKIHZvaWQg
Rm9udENhY2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2Nh
ZGUsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVGb250cyhyZXRy
aWV2ZU9yQWRkQ2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1v
dmUoZm9udFNlbGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDggQEAgc2l6ZV90IEZvbnRD
YWNoZTo6Zm9udENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQo
KQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhmb250TG9jayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVk
Rm9udHMoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCkBAIC01
MjIsNiArNTEyLDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwog
CiB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9jayk7CisKICAgICBp
ZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rv
cio+OwogCkBAIC01MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250
U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2Vs
ZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURh
dGFDYWNoZUxvY2spOworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVu
dHMtPmNvbnRhaW5zKCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4IEBAIHVuc2lnbmVkIHNo
b3J0IEZvbnRDYWNoZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRl
KCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2sp
OworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4MSw3IEBA
IHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpCiB7CiB9
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxh
ckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uM2Rl
NmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
ICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2
ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAs
NyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1
ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFn
cyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNw
ZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRl
c2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGlu
Z3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsx
NTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2Vs
ZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5z
aWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOwor
ICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNl
dHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwog
fTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7CiAK
IHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkgZm9u
dERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hl
IChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFtaWxp
ZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNl
bGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0yMjQs
MTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBzbyBD
U1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0YWxsZWQg
Zm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdoZW4geW91
IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFzIGEgcHJl
aW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdl
dEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZv
bnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmlu
ZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRy
LCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVz
ID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGZvbnRG
b3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0cjxGb250
PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2Vs
ZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAgLTI0Nyw3
ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKICNpZiBQ
TEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3RyaW5nJiBv
dXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBTdHJpbmcm
IG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJ
Q0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENhc2NhZGVG
b250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhv
ZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7
CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZp
ZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdB
bHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVt
ZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+
IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAgIFJlY3Vy
c2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBtX3B1cmdl
VGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBtX3Nob3Vs
ZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAgICAgRm9u
dENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcgQEAgcHJp
dmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2Fj
aGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIG51bGxw
dHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMwMzhkYmY0
NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTE2
OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBB
dG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0
OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0
OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBj
b25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2VzSW5kZXgs
IFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdlKCkgY29u
c3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1p
cnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25zdCBGb250
KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3Qg
bGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBGb250JiBG
b250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRzLT5wcmlt
YXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lu
bGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2ZvbnRzLT5y
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworICAgIHJl
dHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRpb24sIGlu
ZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ2hhcmFj
dGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIobV9mb250
RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3QgRm9udCYg
Rm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9m
b250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9udERlc2Ny
aXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEwMmMzMTky
NDgwNDNmYTc0NjRhZGMuLjE4MWFhM2EzODAzYjIyOTcxZmMxOTg3ZWZkM2ZhNDA0ODBlY2FlNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1ib29s
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZhbWlseTEs
IGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwoKSB8fCBm
YW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5pc051bGwoKSAmJiBmYW1p
bHkyLmlzTnVsbCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkxLnN0YXJ0
c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5MjsKQEAgLTExMCwx
NyArMTEyLDE1IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVF
cXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAgcmV0dXJuIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7CiB9CiAKLXVuc2lnbmVk
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNo
KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChm
YW1pbHkuc3RhcnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5LmV4aXN0aW5nSGFz
aCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChm
YW1pbHkpOworICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5
LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGZhbWlseSk7CiB9CiAKIFN0cmluZyBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5KQog
eworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFtaWx5OwogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQogICAgICAg
ICByZXR1cm4gZmFtaWx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThj
NWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkx
YmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgog
ICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4m
IGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQogCi0gICAgc3RhdGljIGJv
b2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmlu
ZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5n
Jik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3Qg
U3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5j
cHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIzNC4uNmIyMzY1
Njg1MGU4YjAyNjE0NGI3MWVlZjkxZTgxZjZhYmRjYjYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTEwNywx
OCArMTA3LDIwIEBAIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZv
bnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRD
YXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQotICAgIDog
bV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQorICAgIDogbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzU2l6ZSgxKQorICAgICwgbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQogICAgICwgbV9m
b250U2VsZWN0b3JWZXJzaW9uKDApCiAgICAgLCBtX2dlbmVyYXRpb24oRm9udENhY2hlOjpzaW5n
bGV0b24oKS5nZW5lcmF0aW9uKCkpCiAgICAgLCBtX2lzRm9yUGxhdGZvcm1Gb250KHRydWUpCiB7
Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKEZvbnRDYWNo
ZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CisgICAg
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhGb250UmFuZ2VzKEZvbnRDYWNoZTo6
c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CiB9CiAKIEZv
bnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkgPSBkZWZhdWx0OwogCiB2b2lkIEZv
bnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ss
IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKICAgICBhdXRvJiBwcmltYXJ5UmFu
Z2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgIHVuc2ln
bmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwogICAgIGlmIChudW1SYW5nZXMg
PT0gMSkKQEAgLTEyOSw2ICsxMzEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWlu
ZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogCiBib29s
IEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9yIChhdXRvJiBmb250UmFuZ2Vz
IDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzKSB7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlz
TG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzMsMTQgKzE3NiwyMSBA
QCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogCiBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2Fk
ZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgaWYgKGluZGV4IDwgbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlc1tpbmRleF07CisgICAgLy8gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzIGlz
IGEgbGlua2VkIGxpc3QgYW5kIGl0cyBsZW5ndGggb25seSBncm93cywKKyAgICAvLyBpdCBpcyBu
ZXZlciBvdGhlcndpc2UgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHNhZmUgdG8gYWNj
ZXNzCisgICAgLy8gZXhpc3Rpbmcgbm9kZXMgd2l0aG91dCB0YWtpbmcgdGhlIGxvY2ssIHNvIHdl
IGFzc2VydCB0aGF0IHRoZSBsb2NrIGlzCisgICAgLy8gaGVsZCBhZnRlciB0aGlzIGZhc3QgcmV0
dXJuIHBhdGguCisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSkg
eworICAgICAgICBhdXRvIGl0ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmJlZ2luKCk7Cisg
ICAgICAgIHN0ZDo6YWR2YW5jZShpdCwgaW5kZXgpOworICAgICAgICByZXR1cm4gKml0OworICAg
IH0KIAotICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPT0gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSk7CiAgICAgQVNTRVJUKEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKLSAgICBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9udFJhbmdlcyA9
IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CisgICAgYXV0byBmb250UmFuZ2VzID0g
Rm9udFJhbmdlcygpOwogCiAgICAgaWYgKCFpbmRleCkgewogICAgICAgICBmb250UmFuZ2VzID0g
cmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0xODgsMjMgKzE5OCw0MiBAQCBjb25zdCBG
b250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25z
dCBGb250Q2FzY2FkZURlcwogICAgICAgICAgICAgZm9udFJhbmdlcyA9IG1fZm9udFNlbGVjdG9y
LT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFyZEZhbWlseSk7CiAgICAg
ICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZv
bnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGRl
c2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZl
Y3RpdmVGYW1pbHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0
RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250
U2VsZWN0b3IuZ2V0KCkpOworCisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1f
Zm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFj
a0luZGV4ID49IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRG
YWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKKyAgICAg
ICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1fZm9udFNlbGVjdG9yLT5m
YWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZh
bGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9m
b250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxs
YmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5
Q291bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3Jp
cHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkp
OworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2soV1RGTW92ZShmb250UmFu
Z2VzKSk7CisgICAgKyttX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplOworICAgIHJldHVybiBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYmFjaygpOworfQogCi0gICAgaWYgKGZvbnRSYW5nZXMu
aXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxp
emVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsK
K2Jvb2wgRm9udENhc2NhZGVGb250czo6ZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNT
aXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIGluZGV4KS5pc051bGwoKTsKK30KIAotICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0
b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRp
b24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxi
YWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNr
SW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5m
YWxsYmFja0ZvbnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCkpOwot
ICAgIH0KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JDaGFyYWN0ZXIoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4LCBV
Q2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2Nr
LCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5mb250Rm9yQ2hhcmFjdGVy
KGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdlczsKK2NvbnN0IEZvbnQmIEZv
bnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xv
Y2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKKyAgICByZXR1cm4gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0ZXIsIFVDaGFy
MzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQpAQCAtMzIzLDEwICszNTIsMTAgQEAg
c3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmll
bnRhdGlvbihVQ2hhcjMyIGNoYXJhY3QKICAgICByZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGNv
bnN0IEZvbnQqIGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRlRm9udHMmIGZvbnRDYXNj
YWRlRm9udHMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hh
cjMyIGNoYXJhY3RlcikKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZpbmRCZXN0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hh
cjMyIGNoYXJhY3RlcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyA7
ICsrZmFsbGJhY2tJbmRleCkgewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gZm9udENhc2Nh
ZGVGb250cy5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRl
eCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVs
bCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8qIGN1cnJlbnRGb250ID0gZm9u
dFJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBFeHRlcm5hbFJlc291cmNl
RG93bmxvYWRQb2xpY3k6OkZvcmJpZCkuZm9udDsKQEAgLTM0MiwxMCArMzcxLDEwIEBAIHN0YXRp
YyBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250
Q2FzY2FkZUZvbnRzLCBjb25zCiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERh
dGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIGJvb2wgc3lzdGVt
RmFsbGJhY2tTaG91bGRCZUludmlzaWJsZSkKIHsKLSAgICBjb25zdCBGb250KiBmb250ID0gZmlu
ZEJlc3RGYWxsYmFja0ZvbnQoKnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFyYWN0ZXIpOworICAgIGNv
bnN0IEZvbnQqIGZvbnQgPSBmaW5kQmVzdEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbiwgY2hhcmFj
dGVyKTsKIAogICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9ICZyZWFsaXplRmFsbGJhY2tS
YW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgZm9u
dCA9ICZmb250Rm9yRmlyc3RSYW5nZShkZXNjcmlwdGlvbik7CiAKICAgICBhdXRvIHN5c3RlbUZh
bGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250ID8gSXNGb3JQbGF0Zm9ybUZvbnQ6
OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0Zv
bnQpCkBAIC00ODgsOSArNTE3LDkgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFn
ZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQKIAogR2x5cGhE
YXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQg
IT0gQXV0b1ZhcmlhbnQpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwog
ICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCiAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKIApAQCAtNTE2LDYgKzU0NSw3
IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNo
YXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENhc2NhZGVGb250czo6cHJ1
bmVTeXN0ZW1GYWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNr
IGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZiYTVjMTgzYTU4ZjViYWQz
OGQuLjk4M2IyMGZlMTdiZGVhZWYxNTk2ZWRiYzY1OGVlMzBiNWFiZmQ0MzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKQEAg
LTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJXaWR0aENh
Y2hlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgpAQCAt
NDMsNyArNDUsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRGb250R2x5cGhQYWdlOwog
CiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRz
KTsKLWNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2Fk
ZUZvbnRzPiB7CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250
Q2FzY2FkZUZvbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURF
TlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTcwLDcgKzcyLDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoQ2FjaGU7IH0KIAogICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2Vz
JiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgYm9vbCBmYWxsYmFja1Jhbmdlc0FyZU51bGwo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkKTsKKyAgICBjb25zdCBGb250
KiBmb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25l
ZCBmYWxsYmFja1Jhbmdlc0luZGV4LCBVQ2hhcjMyKTsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIHBy
dW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc4LDEwICs4MiwxNCBAQCBwcml2YXRlOgogICAg
IEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2Nh
ZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5k
QmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7
CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFj
a1Nob3VsZEJlSW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChV
Q2hhcjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2ln
bmVkIGZhbGxiYWNrSW5kZXggPSAwKTsKIAotICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdl
cyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYs
IHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworCisgICAgU3RkTGlzdDxGb250UmFuZ2VzPiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgg
eyAwIH07CiAKICAgICBjbGFzcyBHbHlwaFBhZ2VDYWNoZUVudHJ5IHsKQEAgLTExNCw2ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKICAgICBQaXRj
aCBtX3BpdGNoIHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250
IHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogfTsKIAogaW5saW5lIGJvb2wg
Rm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQpAQCAtMTI1LDcgKzEzNCwxMCBAQCBpbmxpbmUgYm9vbCBGb250Q2Fz
Y2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcAogCiBpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAgICAg
cmV0dXJuICptX2NhY2hlZFByaW1hcnlGb250OworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRv
JiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAp
OwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5m
b250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAppbmRleCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJi
MGYxZTZhNTBhNDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAj
aW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNl
bGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2Vs
ZWN0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJi
MWJkN2ZhN2ZlMWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZm
YWNmNWNkMTk1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUg
PHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsK
IC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1h
cHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVu
aWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJv
bSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1j
bGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEds
eXBoUGFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4MmY3YzJjZjhiMjM0MjNi
YzcwNDhhMzg5NmE3Y2NhNGVhMDQ4Li5kZTE0NzE2ZmIxZDZmYTVhOGFmNTQ1MTU2ODBlOGZmNmY4
MWEwMTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTI5LDggKzEyOSw4IEBA
IGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UoY29uc3QgVUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICYmICghcHJlZmVyQ29sb3JlZEZvbnQg
fHwgYmFzZUZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpKQogICAgICAg
ICByZXR1cm4gYmFzZUZvbnQ7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tS
YW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZhbGxiYWNr
Rm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkg
eworICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGks
IGNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZmFsbGJhY2tGb250IHx8IGZhbGxiYWNrRm9udCA9
PSBiYXNlRm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAKaW5kZXggZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZjMjVjNDFmMzcyZGU1MjRiMS4uNDAyOTJm
MjcwZjIwOTg3MjE1ZGVhNmM5OGQzMmIwOTk0NmZjYjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcApAQCAtNjE5LDcgKzYxOSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0
Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgcmV0
dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwg
Q1RGb250R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7
CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK1JlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBh
biBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9m
IGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdl
J2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgpA
QCAtNjI4LDI3ICs2MjgsMTkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2Ug
Zm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5h
IGZvciBMdWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAgIHJldHVybiBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiQXJhYmljIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUiKSk7Ci0gICAg
c3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5n
ZXQoKSwgJnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIGZvciAoU3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRj
aFdvcmRzKSB7Ci0gICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgq
bWF0Y2hXb3JkKSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdl
ZXphUGxhaW4pOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIG1hdGNoV29yZHNb
XSA9IHsgIkFyYWJpYyJfcywgIlBhc2h0byJfcywgIlVyZHUiX3MgfTsKKyAgICBhdXRvIGZhbWls
eU1hdGNoZXIgPSBTdHJpbmdWaWV3KGZhbWlseSk7CisgICAgZm9yIChhdXRvIG1hdGNoV29yZCA6
IG1hdGNoV29yZHMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TWF0Y2hlciwgU3RyaW5nVmlldyhtYXRjaFdvcmQpKSkKKyAgICAgICAgICAgIHJldHVybiBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBjb25zdCBGb250
RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0YWJh
c2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07CiB9
CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3Rv
cjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1dG8mIGZvbnRE
YXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZv
bnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZv
bnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZv
bnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZv
ckZhbWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmb250cyA9IGZv
bnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGlmIChmb250
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAgKzExMDAsMTAg
QEAgc3RydWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0U2NyaXB0TmFt
ZSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBX
aXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3Qg
cmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFt
aWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBm
bG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7Ci0gICAg
aWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYm
ICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1p
bHkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQog
ICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpAQCAtMTEyMyw3
ICsxMTE1LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWls
eShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAgICBhdXRvJiBm
b250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNv
bGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmYW1p
bHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAgICAg
aWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3Rh
dGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9u
dCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwogICAgICAgICAv
LyBzdXBwb3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBIb3dldmVyLCB0
aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAoZm9udC13ZWln
aHQsCkBAIC0xMTc3LDcgKzExNjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hl
KCkKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKTsKIH0KIAotc3RhdGlj
IFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
ZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2Fz
ZShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNw
cAogICAgIE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjA2LDcg
KzExOTgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVj
aWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgaWYgKGZhbWlseS5zdGFydHNX
aXRoKCJVSUNURm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlcXVlc3Qg
PSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICAgICAgQ1RGb250
U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWlnaHQp
IHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNj
ZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVlc3Qu
c2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRv
ciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LnN0
cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRv
bigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxl
KCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgICAgICBhdXRvIGRlc2Ny
aXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWls
eS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNvY29hOjpzaW5nbGV0b24oKS5j
b250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLnN0
cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWl0cykKICAg
ICAgICAgICAgIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5
V2l0aFN5bWJvbGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRyYWl0cywgdHJhaXRzKSk7CiAg
ICAgICAgIHJldHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMoZGVzY3JpcHRvci5nZXQo
KSwgc2l6ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtMTI0MCw3ICsxMjMyLDcgQEAg
c3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMg
UmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRh
aW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKGZhbWlseS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI4Myw3ICsxMjc1LDcgQEAg
c3RhdGljIHZvaWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJpbmcmIG5hbWUsIENHRmxvYXQg
c2l6ZSkKIH0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAgICBmbG9hdCBzaXplID0gZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAgLTEyOTYsNyArMTI4OCw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8gQXV0byBhY3RpdmF0ZSB0aGUg
Zm9udCBiZWZvcmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGltZS4KICAgICAgICAgLy8gSWdu
b3JlIHRoZSByZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0
byBhY3R1YWxseSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWls
eS5zdHJpbmcoKSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LCBzaXpl
KTsKIAogICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRp
b24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBzaXplKTsKICAgICB9
CkBAIC0xNDI4LDcgKzE0MjAsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVy
biBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9
OwpAQCAtMTQzNiwxMCArMTQyOCwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYs
IDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hl
aXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07
CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBz
b25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVp
dGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29u
Z3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFs
IHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0
ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9z
OwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAt
MTQ3NCw3ICsxNDY2LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFs
dGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKQEAgLTE1NDcsNyArMTUzOSw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0
IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAv
LyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFu
eSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9u
LCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNv
cnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCmluZGV4
IDlhYmE4OWYyMTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAzOTUuLmU4N2I5NjE3ZWRmOTAy
NGI0MGQwN2M4MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaApAQCAtNjIs
NyArNjIsNyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZv
dXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0YWluUHRyPENURm9udFJlZj4g
cHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWln
aHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBjbGFzcyBTaG91bGRDb21wdXRl
UGh5c2ljYWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3ludGhlc2lzUGFpciBjb21wdXRl
TmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hv
dWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzOjpO
bywgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBs
YXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0
aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOworUmV0YWluUHRyPENU
Rm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKIEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoQ1RGb250
RGVzY3JpcHRvclJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsK
IFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnRE
ZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
YXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVj
MDU4NDkwNzkzNTRjMDIxMmRiMC4uMmJiNzEwMTU5MGVlYjE0ZGUxNGY5NTFjNmIzYTBhM2NhODQy
YzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTMxNiw4ICszMTYs
OCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogCiAgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0
ZXJGb250ID0gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5n
ZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIp
OwogICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQz
MTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLmFlMDgzZDg5MDE5OWQwMjM1ZmUxMGQ1
MDg3MDRlYzJhYzkzYzZjZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMx
OSwyNSArMzE5LDI0IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2Fu
dCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJl
dmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRz
IG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBB
dG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9
IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCi0gICAgICAgIHJldHVy
biAqZm9udDsKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZU5vbk51
bGwoKTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9wZXJseS1p
bnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBG
b250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1p
bHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJp
bmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdlJ3JlIGNy
ZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVy
dCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFj
ZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxlbmd0aCgp
ICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWls
eS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAogICAgIGlmIChmYW1pbHkgPT0g
c3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5KQogICAgICAgICByZXR1cm4g
InNlcmlmIjsKQEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25s
eVVzZWRHZW5lcmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykKICAgICAg
ICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1
cnNpdmUiKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRp
bmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVz
KQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgLy8gVGhl
IENTUyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1m
b250cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdlIG11c3Qg
ZmluZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Igb2Js
aXF1ZSBjYW4gYmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZv
bnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQor
T3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDQ1MTEwN2JiYjQ2NWJkZTM5
NTQ0OWRjMDc4ZDgwNWE4ZTE2NGY4YTQuLmM4YzE4MTA0ODM0YmJjM2RhYzVhZTM2YzYzMGU0YzUz
NzQ4Yzc1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAg
LTEyNSw5ICsxMjUsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBs
ZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICBpc1N5c3Rl
bUZhbGxiYWNrID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJh
c2VDaGFyYWN0ZXIpOwotICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCku
Zm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgZm9udCA9IG1fZm9udC5m
b250Rm9yQ2hhcmFjdGVyKDAsIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCi0g
ICAgICAgICAgICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJz
dFJhbmdlKCk7CisgICAgICAgICAgICBmb250ID0gJm1fZm9udC5mb250Rm9yRmlyc3RSYW5nZSgp
OwogICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVN
dXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJp
YnV0ZXMobV9mb250LmVuYWJsZUtlcm5pbmcoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpLmdldCgp
KSk7CiAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggZm9udCBzaG91bGQgYmUgdXNlZCB0
byByZW5kZXIgdGhpcyBncmFwaGVtZSBjbHVzdGVyLCBzbyBlbmFibGUgQ29yZVRleHQncyBmYWxs
YmFjayBtZWNoYW5pc20gYnkgdXNpbmcgdGhlIENURm9udCB3aGljaCBkb2Vzbid0IGhhdmUgQ29y
ZVRleHQncyBmYWxsYmFjayBkaXNhYmxlZC4KICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
Y29uc3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgp
KSwga0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CkBA
IC0xODcsOCArMTg3LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgICAgIFJl
dGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURh
dGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKICAgICAgICAgICAgIGlmICgh
V1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRm
b3JtRGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKICAgICAgICAgICAg
ICAgICAvLyBCZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZvbnQgbWF0Y2hlcyBhbnkgb2YgdGhl
IGZvbnRzIGluIHRoZSBmYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5m
b250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKGksIGJh
c2VDaGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFdURjo6
c2FmZUNGRXF1YWwocnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVj
aygpLmdldCgpLCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAy
YjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi43ZjU3MjMyZTA3ZDI1MDdi
NDk0ZjYxODllMWZiZDRhNmViOGQyZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzYyLDkgKzM2Miw5IEBA
IGJvb2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0
cmluZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpm
b250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmluZyYgb3V0Rm9udEZhbWls
eU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9O
VCYgZm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBBdG9tU3RyaW5nIGZh
bWlseU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFD
RVNJWkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4o
Zm9udC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0cjxGb250PiBmb250RGF0
YSA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICBpZiAo
Zm9udERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKQEAgLTM3
Myw1NiArMzczLDU3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9uCiAKIFJlZjxGb250PiBGb250
Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9t
U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGZhbGxiYWNrRm9udE5hbWU7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFn
OworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQg
Zm9udCBoZXJlLiBGb3Igbm93IHdlJ2xsIHBpY2sKKyAgICAgICAgLy8gdGhlIGRlZmF1bHQgdGhh
dCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCisKKyAgICAg
ICAgLy8gU2VhcmNoIGFsbCB0eXBpY2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBm
b250cy4KKyAgICAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGlu
ZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCisgICAg
ICAgIC8vIFN0YXJ0IHdpdGggVGltZXMgTmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRl
ZmF1bHQgaWYgdGhlIHVzZXIgZG9lc24ndCBjaGFuZ2UgcHJlZnMuCisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAg
ICAgIFN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksCisgICAgICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJMdWNpZGEgU2Fu
cyBVbmljb2RlIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoIkFyaWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAgICAgfTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNr
Rm9udHMpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgZmFsbGJhY2tGb250c1tpXSkpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnRO
YW1lLmdldCgpID0gZmFsbGJhY2tGb250c1tpXTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5nZXQo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRp
b24sIGZhbGxiYWNrRm9udE5hbWUpOworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERFRkFV
TFRfR1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgorICAg
ICAgICBpZiAoSEZPTlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3Rv
Y2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkpKSB7CisgICAgICAgICAgICBMT0dGT05UIGRlZmF1
bHRHVUlMb2dGb250OworICAgICAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXpl
b2YoZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOworICAgICAgICAgICAg
aWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgZGVmYXVs
dEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogCi0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVo
b3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sK
LSAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5n
aW5nIGFueSBwcmVmcy4KLQotICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWluc3Rh
bGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCi0gICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3Qg
Z2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVf
dHlwZWZhY2VzCi0gICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBp
dCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAgICBz
dGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxiYWNr
Rm9udHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNyb3Nv
ZnQgU2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAg
ICAgQXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAotICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotICAgIH07Ci0gICAgUmVmUHRyPEZvbnQ+IHNp
bXBsZUZvbnQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZh
bGxiYWNrRm9udHMpOyArK2kpIHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250Rm9yRmFt
aWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSkpIHsKLSAgICAgICAgICAgIGZh
bGxiYWNrRm9udE5hbWUuZ2V0KCkgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAgcmV0
dXJuICpzaW1wbGVGb250OworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRy
aWNzIGZvbnRzLgorICAgICAgICBOT05DTElFTlRNRVRSSUNTIG5vbkNsaWVudE1ldHJpY3MgeyB9
OworICAgICAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRy
aWNzKTsKKyAgICAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRN
RVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkg
eworICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNj
cmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1l
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNj
cmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVu
dUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGlmIChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24s
IG5vbkNsaWVudE1ldHJpY3MubGZTdGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQs
IGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGlmIChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNs
aWVudE1ldHJpY3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9CisgICAgfSk7CiAKLSAgICAvLyBGYWxs
IGJhY2sgdG8gdGhlIERFRkFVTFRfR1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBh
cmUgYXZhaWxhYmxlLgotICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0
PEhGT05UPihHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKLSAgICAgICAgTE9H
Rk9OVCBkZWZhdWx0R1VJTG9nRm9udDsKLSAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250
LCBzaXplb2YoZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOwotICAgICAg
ICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNj
cmlwdGlvbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAg
ICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUu
Z2V0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLCBmYWxsYmFja0ZvbnROYW1lKTsKIAotICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xp
ZW50IG1ldHJpY3MgZm9udHMuCi0gICAgTk9OQ0xJRU5UTUVUUklDUyBub25DbGllbnRNZXRyaWNz
IHsgfTsKLSAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRy
aWNzKTsKLSAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJ
Q1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVudE1ldHJpY3MsIDApKSB7Ci0g
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9u
dERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9u
dE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
bm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAg
ICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3Mu
bGZTdGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2lt
cGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5k
TG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwg
ZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAg
ICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250
TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQotICAgIAogICAg
IGF1dG8gaEZvbnQgPSBhZG9wdEdESU9iamVjdChzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tP
YmplY3QoREVGQVVMVF9HVUlfRk9OVCkpKTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3Jt
RGF0YShXVEZNb3ZlKGhGb250KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCks
IGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKHBs
YXRmb3JtRGF0YSk7CkBAIC01MTIsNyArNTEzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBtYXRj
aEltcHJvdmluZ0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1QgVEVYVE0K
ICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9u
dChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNp
cmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3RhdGljIEdESU9i
amVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNp
cmVkV2VpZ2h0LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJ
dGFsaWMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzEsMTIgQEAgc3Rh
dGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIExPTkcgZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEg
ewotICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFt
ZSkKKyAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkK
ICAgICAgICAgOiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQogCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgbV9mYW1p
bHlOYW1lOwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxp
dGllczsKIH07CiAKQEAgLTYyNiw3ICs2MjcsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0
c0luRmFtaWx5RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAog
ICAgIHJldHVybiAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9u
dENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNl
bGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRG
b250cykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ3LDcgQEAgVmVjdG9y
PEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllc0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNo
ZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
LCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wgaXNMdWNp
ZGFHcmFuZGUgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEg
Z3JhbmRlIik7CiAKQEAgLTY5MiwxMSArNjkzLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0
Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQor
T3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcg
Um9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRTYW5zU2Vy
aWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24gV2lu
ZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBl
eHBlY3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9tYW4gYXMg
YW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcwNSw3ICs3
MDMsNyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24g
b3RoZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAgICAgICAg
IHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9t
YW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBv
cnQgYml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAg
IC8vIFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJuYXRpdmUg
Zm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTIsMTAgQEAg
Y29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBs
YXRmb3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAgICAgICBy
ZXR1cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJNaWNyb3NvZnQg
U2FucyBTZXJpZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxsQXRv
bSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2MTU0YmMw
NGJlYTUwM2M2MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFiZmJhMDc2
YmQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAK
QEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNp
emVBc0JpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0
PiB7CitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6
IDE2OwogICAgIHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0JpZGlDb250ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQzOWJk
MzRkMS4uNWE4ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIyLDE1IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIEJp
ZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAogLy8g
VXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBCaWRpQ29u
dGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRpQ29udGV4
dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25l
ZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRp
RW1iZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBu
dWxscHRyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423999</attachid>
            <date>2021-03-23 02:03:11 -0700</date>
            <delta_ts>2021-03-24 05:05:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210323090310.patch</filename>
            <type>text/plain</type>
            <size>72634</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uNDI0Zjk1MDBiZTcxMDdhZDQ4M2ZlN2E5MDdlNDVk
M2ZmY2ViNzNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTAzLTA4ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaDogTWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmg6IEludHJvZHVjZSBsb2NraW5nLCByZXBsYWNlIHVzZSBvZgorICAgICAgICAgICAg
QXRvbVN0cmluZyB3aXRoIFN0cmluZyBhbmQgbWFrZSBpc29sYXRlZCBjb3BpZXMgaW5zdGVhZCBv
ZiB0YWtpbmcKKyAgICAgICAgICAgIHJlZmVyZW5jZXMgdGhhdCBtaWdodCBiZSBhY2Nlc3NlZCBh
Y3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg6IEFkYXB0IHRvIEFQSSBjaGFu
Z2VzCisgICAgICAgICAgICBhbmQgcmVtb3ZlIENvY29hIGZhc3QtcGF0aCB0aGF0IGlzIG5vIGxv
bmdlciB2YWxpZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6IERv
bid0IGFzc2VydCBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgICAgIGludHJvZHVjZSBsb2NraW5n
IGFyb3VuZCBtZW1iZXIgdmFyaWFibGUgSS9PLiBMb2NrLWZyZWUgYWNjZXNzIGlzCisgICAgICAg
ICAgICBtYWludGFpbmVkIHdoZXJlIHBvc3NpYmxlLgorICAgICAgICAgICAgUmVtb3ZlIGFjY2Vz
cyB0byBGb250UmFuZ2VzIGFuZCBpbnN0ZWFkIGV4cG9zZSB0aGUgbWV0aG9kcyB1c2VkIG9uCisg
ICAgICAgICAgICB0aGVtIHNvIHRoYXQgdGhlaXIgcmVmZXJlbmNlIHJlbWFpbnMgYXNzb2NpYXRl
ZCBvbmx5IHdpdGggdGhlIHBhcmVudAorICAgICAgICAgICAgRm9udENhc2NhZGVGb250cy4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDogTWFrZSBUaHJlYWRTYWZl
UmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDogTWFr
ZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBpbgorICAgICAgICAg
ICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0Lmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYWNo
ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcDogQWRhcHQgdG8gY2hhbmdlcworICAgICAgICAgICAgaW4gRm9udENhc2NhZGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOiBB
ZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDogQWRhcHQgdG8gY2hhbmdlcyBp
bgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaDogTWFrZSBU
aHJlYWRTYWZlUmVmQ291bnRlZAorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2
Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBjN2RhNTQ5M2Zj
MTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4NGZkOTQ4NDlh
OWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5o
CkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAKIERFQ0xBUkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9udCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZv
bnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAK
aW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4uNWZkNDU1NWFj
ZmM0NDlhNmY4NWEzMjBiMWRlYjVkZGMzNmFhZjljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBAQAogI2luY2x1
ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9j
a0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5h
bWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250Q2FjaGU6OnNp
bmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1fcHVyZ2VUaW1l
cigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCisgICAg
OiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsNyArNjQsNyBAQCBzdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFj
ZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1
cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnREZXNjcmlwdGlv
bktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCiAgICAgICAgICwg
bV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6
IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTk5LDggKzkwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwobV9m
YW1pbHksIG90aGVyLm1fZmFtaWx5KTsKICAgICB9CiAKKyAgICB2b2lkIGlzb2xhdGUoKSB7IG1f
ZmFtaWx5ID0gbV9mYW1pbHkuaXNvbGF0ZWRDb3B5KCk7IH0KKwogICAgIEZvbnREZXNjcmlwdGlv
bktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFtaWx5OworICAg
IFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZm9udEZhY2VGZWF0
dXJlczsKICAgICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIG1fZm9udEZhY2VD
YXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQxLDM5ICsxMzQsMzMgQEAgc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEZv
bnRQbGEKIAogdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNo
LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2Fj
aGU7CiAKK3N0YXRpYyBSZWN1cnNpdmVMb2NrIGdQbGF0Zm9ybURhdGFDYWNoZUxvY2s7CisKIHN0
YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpCiB7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4gY2FjaGU7CiAg
ICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVy
bmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFT
Q0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBj
b3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
dGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0
YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGltZXNOZXdS
b21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICBpZiAoIXBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8gcGxhdGZvcm1TcGVjaWZp
Y0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkKICAg
ICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAKICAgICBzd2l0Y2ggKGZh
bWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkKLSAgICAgICAgICAgIHJl
dHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZldGljYSJfczsKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0aW1lcyIp
KQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4g
IlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3OgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIi
KSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAgcmV0dXJuICJD
b3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5OgogICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImhlbHZldGljYSIpKQot
ICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0dXJuICJBcmlhbCJfczsK
ICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8gT24gV2luZG93cywgQ291
cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNlbnQgYW5kCkBA
IC0xODMsMzMgKzE3MCwyOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAvLyBvbmx5IGJl
IHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBjYXNlIDExOgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImNvdXJpZXIg
bmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAgICAgICAgIHJldHVybiAi
Q291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIDE1OgogICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIG5l
dyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAgICAgICAgICAgcmV0dXJu
ICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9t
KCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3JtRGF0YSogRm9u
dENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRGYW1pbHlOYW1lLAorRm9u
dFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3NlZEZh
bWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJl
cywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGll
cywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAog
I2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAgICAvLyBMZWFk
aW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNhbCBmbG93IGZs
YWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwgZmxvdyBieSBv
dXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1cmUuCi0gICAg
Ly8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRvaW4sIHNvIHdl
IGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9
IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1pbHlOYW1lWzBdICE9ICdA
JykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRvbVN0cmluZyhwYXNzZWRGYW1pbHlO
YW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICAvLyBJRSBkaXNyZWdhcmRzICJAIiByZWdh
cmRsZXNzIG9mIHRoZSBvcmllbnRhdGlvbiwgc28gd2UgZm9sbG93IHRoZSBiZWhhdmlvci4KKyAg
ICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lLnN1YnN0cmluZyhw
YXNzZWRGYW1pbHlOYW1lWzBdID09ICdAJyA/IDEgOiAwKTsKICNlbHNlCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjMsMTQgKzIwNSwxNCBAQCBGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmbwogICAgIGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtl
eSwgbnVsbHB0cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFk
ZFJlc3VsdC5pdGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAg
ICAga2V5Lmlzb2xhdGUoKTsKICAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzKTsKIAogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAhY2hlY2tpbmdB
bHRlcm5hdGVOYW1lKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBmaW5kIGEg
Zm9udC4gIFdlIGhhdmUgYSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlhcyB0byBvdGhl
ciBuYW1lcywKICAgICAgICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwgQ291cmllci9D
b3VyaWVyIE5ldywgZXRjLiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIgdGhlIGFsaWFz
ZWQgbmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZU5hbWUgPSBh
bHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICAgICAgaWYgKCFhbHRlcm5h
dGVOYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogZm9u
dFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZh
Y2VDYXBhYmlsaXRpZXMsIHRydWUpOworICAgICAgICAgICAgaWYgKGF1dG8gYWx0ZXJuYXRlTmFt
ZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0
Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJl
cywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAgIC8vIExvb2t1
cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91cyBpdGVyYXRv
ciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQgYnkgdGhlIHJl
Y3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAgICAgICAgICAg
ICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKQEAgLTMxMiw4ICsy
OTQsMTAgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiBj
b25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1
MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250
RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxl
Y3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgY2hl
Y2tpbmdBbHRlcm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWls
eShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKKwogICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcHVy
Z2VUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIApAQCAtMzI1LDEwICszMDksOCBAQCBSZWZQdHI8
Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjbwogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2Vu
ZGlmCi0gICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworCiAgICAgYXV0
byBhZGRSZXN1bHQgPSBjYWNoZWRGb250cygpLmVuc3VyZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAg
ICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9KTsKQEAgLTM0
MCw2ICszMjIsOCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIAogdm9pZCBGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCiAgICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICB1bnNpZ25lZCBp
bmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVuZGVyTWVt
b3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7CiAKQEAg
LTM1NywxNSArMzQxLDEzIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJ
Zk5lZWRlZCgpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWdu
ZWQgcHVyZ2VDb3VudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
ICAgICBMT0coRm9udHMsICJGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSgldSkiLCBw
dXJnZUNvdW50KTsKIAogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2Fk
ZUNhY2hlKCk7CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2Vu
ZGlmCi0KICAgICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8UmVmPEZvbnQ+
LCAyMD4gZm9udHNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9u
dHMoKS52YWx1ZXMoKSkgewpAQCAtNDIxLDYgKzQwMyw3IEBAIHN0YXRpYyBib29sIGtleXNNYXRj
aChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5
JiBiCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7Cisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fZm9udENhc2NhZGVDYWNo
ZS5jbGVhcigpOwogfQogCkBAIC00MzcsMTIgKzQyMCwxOCBAQCBzdGF0aWMgRm9udENhc2NhZGVD
YWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJgogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQo
KTsKICAgICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAg
IGtleS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOwor
ICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0
KGkpLnN0cmluZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBm
b250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9u
ID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAgIHJldHVy
biBrZXk7CiB9CiAKK3N0YXRpYyB2b2lkIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hlS2V5KEZvbnRD
YXNjYWRlQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGtleS5mYW1p
bGllcykKKyAgICAgICAgZmFtaWx5ID0gZmFtaWx5Lmlzb2xhdGVkQ29weSgpOworfQorCiBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0IEZvbnRDYXNjYWRl
Q2FjaGVLZXkmIGtleSkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGhhc2ggdGhlIGtleSBhbmQg
dGhlIGZhbWlseSBuYW1lIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gbWFraW5nIGEgaGFzaCBvdXQg
b2Ygb3RoZXIgaGFzaGVzLgpAQCAtNDc5LDYgKzQ2OCw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRz
PiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURl
c2NyCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpc29sYXRlRm9udENhc2NhZGVDYWNo
ZUtleShrZXkpOwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKICAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihXVEZN
b3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3Rvcikp
KTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdl
dCgpOwpAQCAtNDk3LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6
OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAKIHZvaWQg
Rm9udENhY2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2Nh
ZGUsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVGb250cyhyZXRy
aWV2ZU9yQWRkQ2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1v
dmUoZm9udFNlbGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDggQEAgc2l6ZV90IEZvbnRD
YWNoZTo6Zm9udENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQo
KQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhmb250TG9jayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CisKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVk
Rm9udHMoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCkBAIC01
MjIsNiArNTEyLDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwog
CiB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9jayk7CisKICAgICBp
ZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rv
cio+OwogCkBAIC01MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250
U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2Vs
ZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURh
dGFDYWNoZUxvY2spOworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVu
dHMtPmNvbnRhaW5zKCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4IEBAIHVuc2lnbmVkIHNo
b3J0IEZvbnRDYWNoZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRl
KCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2sp
OworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4MSw3IEBA
IHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpCiB7CiB9
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxh
ckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uM2Rl
NmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2lu
Y2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIK
ICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2
ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAs
NyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1
ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFn
cyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0
aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNw
ZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRl
c2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGlu
Z3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsx
NTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2Vs
ZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5z
aWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOwor
ICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNl
dHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwog
fTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7CiAK
IHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRpb25LZXkgZm9u
dERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwgRm9udENhY2hl
IChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywgMz4gZmFtaWxp
ZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWduZWQgZm9udFNl
bGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CkBAIC0yMjQs
MTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBzbyBD
U1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVpbnN0YWxsZWQg
Zm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5IHdoZW4geW91
IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1lIGFzIGEgcHJl
aW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGdl
dEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZv
bnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmlu
ZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRy
LCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVz
ID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGZvbnRG
b3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJlZlB0cjxGb250
PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVudChGb250U2Vs
ZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsKQEAgLTI0Nyw3
ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7CiAKICNpZiBQ
TEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9tU3RyaW5nJiBv
dXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBTdHJpbmcm
IG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJ
Q0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9udENhc2NhZGVG
b250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhv
ZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1
cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7
CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVT
ZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZp
ZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdB
bHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVt
ZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAgICBzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21T
dHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxp
dGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRlcm5hdGVGYW1p
bHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJSUxpdGVyYWw+
IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKworICAgIFJlY3Vy
c2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hlPiBtX3B1cmdl
VGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9vbCBtX3Nob3Vs
ZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAgICAgRm9u
dENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEyLDcgQEAgcHJp
dmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2Fj
aGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7Ci0gICAgcmV0
dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHksIG51bGxw
dHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAhUExBVEZPUk0o
Q09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUwMjMwMzhkYmY0
NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5Nzk2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTE2
OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdodChjb25zdCBB
dG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0
OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0
OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25zdDsKKyAgICBj
b25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFuZ2VzSW5kZXgs
IFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJhbmdlKCkgY29u
c3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1p
cnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBjb25zdCBGb250
KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3Qg
bGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25zdCBGb250JiBG
b250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZvbnRzLT5wcmlt
YXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBGb250UmFuZ2Vz
JiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lu
bGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBtX2ZvbnRzLT5y
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgpOworICAgIHJl
dHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3JpcHRpb24sIGlu
ZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ2hhcmFj
dGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0ZXIobV9mb250
RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29uc3QgRm9udCYg
Rm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9m
b250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1fZm9udERlc2Ny
aXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQaXRjaCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5YWEwMmMzMTky
NDgwNDNmYTc0NjRhZGMuLjE4MWFhM2EzODAzYjIyOTcxZmMxOTg3ZWZkM2ZhNDA0ODBlY2FlNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
RGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJvb2wgRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5nKGNvbnN0IEZv
bnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1ib29s
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmIGZhbWlseTEs
IGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051bGwoKSB8fCBm
YW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5pc051bGwoKSAmJiBmYW1p
bHkyLmlzTnVsbCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkxLnN0YXJ0
c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5MjsKQEAgLTExMCwx
NyArMTEyLDE1IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVF
cXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAgcmV0dXJuIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7CiB9CiAKLXVuc2lnbmVk
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNo
KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmIChm
YW1pbHkuc3RhcnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5LmV4aXN0aW5nSGFz
aCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6aGFzaChm
YW1pbHkpOworICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2goZmFtaWx5
LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGZhbWlseSk7CiB9CiAKIFN0cmluZyBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5KQog
eworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFtaWx5OwogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQogICAgICAg
ICByZXR1cm4gZmFtaWx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBhN2RmMjUyOGRhYzYyYThj
NWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdkMmYwMTU4YTZkMzFhODkx
YmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3LDggQEAgcHVibGljOgog
ICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRvbVN0cmluZz4m
IGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQogCi0gICAgc3RhdGljIGJv
b2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgQXRvbVN0cmlu
ZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9tU3RyaW5n
Jik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3Qg
U3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmlu
ZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5j
cHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIzNC4uNmIyMzY1
Njg1MGU4YjAyNjE0NGI3MWVlZjkxZTgxZjZhYmRjYjYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTEwNywx
OCArMTA3LDIwIEBAIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZv
bnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRD
YXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQotICAgIDog
bV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQorICAgIDogbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzU2l6ZSgxKQorICAgICwgbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQogICAgICwgbV9m
b250U2VsZWN0b3JWZXJzaW9uKDApCiAgICAgLCBtX2dlbmVyYXRpb24oRm9udENhY2hlOjpzaW5n
bGV0b24oKS5nZW5lcmF0aW9uKCkpCiAgICAgLCBtX2lzRm9yUGxhdGZvcm1Gb250KHRydWUpCiB7
Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKEZvbnRDYWNo
ZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CisgICAg
bV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhGb250UmFuZ2VzKEZvbnRDYWNoZTo6
c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7CiB9CiAKIEZv
bnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkgPSBkZWZhdWx0OwogCiB2b2lkIEZv
bnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xvY2ss
IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKICAgICBhdXRvJiBwcmltYXJ5UmFu
Z2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwogICAgIHVuc2ln
bmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwogICAgIGlmIChudW1SYW5nZXMg
PT0gMSkKQEAgLTEyOSw2ICsxMzEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWlu
ZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogCiBib29s
IEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9yIChhdXRvJiBmb250UmFuZ2Vz
IDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzKSB7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlz
TG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzMsMTQgKzE3NiwyMSBA
QCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogCiBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2Fk
ZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgaWYgKGluZGV4IDwgbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRG
YWxsYmFja1Jhbmdlc1tpbmRleF07CisgICAgLy8gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzIGlz
IGEgbGlua2VkIGxpc3QgYW5kIGl0cyBsZW5ndGggb25seSBncm93cywKKyAgICAvLyBpdCBpcyBu
ZXZlciBvdGhlcndpc2UgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHNhZmUgdG8gYWNj
ZXNzCisgICAgLy8gZXhpc3Rpbmcgbm9kZXMgd2l0aG91dCB0YWtpbmcgdGhlIGxvY2ssIHNvIHdl
IGFzc2VydCB0aGF0IHRoZSBsb2NrIGlzCisgICAgLy8gaGVsZCBhZnRlciB0aGlzIGZhc3QgcmV0
dXJuIHBhdGguCisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSkg
eworICAgICAgICBhdXRvIGl0ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmJlZ2luKCk7Cisg
ICAgICAgIHN0ZDo6YWR2YW5jZShpdCwgaW5kZXgpOworICAgICAgICByZXR1cm4gKml0OworICAg
IH0KIAotICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuc2l6ZSgp
KTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoaW5kZXggPT0gbV9y
ZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSk7CiAgICAgQVNTRVJUKEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKLSAgICBtX3JlYWxpemVkRmFs
bGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9udFJhbmdlcyA9
IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CisgICAgYXV0byBmb250UmFuZ2VzID0g
Rm9udFJhbmdlcygpOwogCiAgICAgaWYgKCFpbmRleCkgewogICAgICAgICBmb250UmFuZ2VzID0g
cmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0xODgsMjMgKzE5OCw0MiBAQCBjb25zdCBG
b250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25z
dCBGb250Q2FzY2FkZURlcwogICAgICAgICAgICAgZm9udFJhbmdlcyA9IG1fZm9udFNlbGVjdG9y
LT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFyZEZhbWlseSk7CiAgICAg
ICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZv
bnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0RmFsbGJhY2tGb250KGRl
c2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlwdGlvbi5lZmZl
Y3RpdmVGYW1pbHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0
RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250
U2VsZWN0b3IuZ2V0KCkpOworCisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpICYmIG1f
Zm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6ZWRGYWxsYmFj
a0luZGV4ID49IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRG
YWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKKyAgICAg
ICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1fZm9udFNlbGVjdG9yLT5m
YWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKyttX2xhc3RSZWFsaXplZEZh
bGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMobV9m
b250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2VsZWN0b3JGYWxs
YmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5
Q291bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3Jp
cHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkp
OworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2soV1RGTW92ZShmb250UmFu
Z2VzKSk7CisgICAgKyttX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplOworICAgIHJldHVybiBt
X3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYmFjaygpOworfQogCi0gICAgaWYgKGZvbnRSYW5nZXMu
aXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxp
emVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsK
K2Jvb2wgRm9udENhc2NhZGVGb250czo6ZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNT
aXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIGluZGV4KS5pc051bGwoKTsKK30KIAotICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0
b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRp
b24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZvbnRTZWxlY3RvckZhbGxi
YWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkpCi0gICAgICAg
ICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RSZWFsaXplZEZhbGxiYWNr
SW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNlbGVjdG9yLT5m
YWxsYmFja0ZvbnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCkpOwot
ICAgIH0KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JDaGFyYWN0ZXIoY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4LCBV
Q2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2Nr
LCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVh
bGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5mb250Rm9yQ2hhcmFjdGVy
KGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdlczsKK2NvbnN0IEZvbnQmIEZv
bnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJZihtX2xv
Y2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKKyAgICByZXR1cm4gcmVhbGl6
ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0ZXIsIFVDaGFy
MzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQpAQCAtMzIzLDEwICszNTIsMTAgQEAg
c3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmll
bnRhdGlvbihVQ2hhcjMyIGNoYXJhY3QKICAgICByZXR1cm4gZGF0YTsKIH0KIAotc3RhdGljIGNv
bnN0IEZvbnQqIGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRlRm9udHMmIGZvbnRDYXNj
YWRlRm9udHMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hh
cjMyIGNoYXJhY3RlcikKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZpbmRCZXN0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBVQ2hh
cjMyIGNoYXJhY3RlcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwOyA7
ICsrZmFsbGJhY2tJbmRleCkgewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gZm9udENhc2Nh
ZGVGb250cy5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRl
eCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChk
ZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVs
bCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8qIGN1cnJlbnRGb250ID0gZm9u
dFJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBFeHRlcm5hbFJlc291cmNl
RG93bmxvYWRQb2xpY3k6OkZvcmJpZCkuZm9udDsKQEAgLTM0MiwxMCArMzcxLDEwIEBAIHN0YXRp
YyBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBmb250
Q2FzY2FkZUZvbnRzLCBjb25zCiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERh
dGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIGJvb2wgc3lzdGVt
RmFsbGJhY2tTaG91bGRCZUludmlzaWJsZSkKIHsKLSAgICBjb25zdCBGb250KiBmb250ID0gZmlu
ZEJlc3RGYWxsYmFja0ZvbnQoKnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFyYWN0ZXIpOworICAgIGNv
bnN0IEZvbnQqIGZvbnQgPSBmaW5kQmVzdEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbiwgY2hhcmFj
dGVyKTsKIAogICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9ICZyZWFsaXplRmFsbGJhY2tS
YW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgZm9u
dCA9ICZmb250Rm9yRmlyc3RSYW5nZShkZXNjcmlwdGlvbik7CiAKICAgICBhdXRvIHN5c3RlbUZh
bGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihjaGFyYWN0
ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250ID8gSXNGb3JQbGF0Zm9ybUZvbnQ6
OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAgaWYgKCFzeXN0ZW1GYWxsYmFja0Zv
bnQpCkBAIC00ODgsOSArNTE3LDkgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGdseXBoUGFn
ZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQKIAogR2x5cGhE
YXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJp
YW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHZhcmlhbnQg
IT0gQXV0b1ZhcmlhbnQpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwog
ICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCiAgICAgICAgIHJldHVybiBnbHlwaERh
dGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKIApAQCAtNTE2LDYgKzU0NSw3
IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNo
YXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENhc2NhZGVGb250czo6cHJ1
bmVTeXN0ZW1GYWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNr
IGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZiYTVjMTgzYTU4ZjViYWQz
OGQuLjk4M2IyMGZlMTdiZGVhZWYxNTk2ZWRiYzY1OGVlMzBiNWFiZmQ0MzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKQEAg
LTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJXaWR0aENh
Y2hlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZC5oIgpAQCAt
NDMsNyArNDUsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRGb250R2x5cGhQYWdlOwog
CiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRz
KTsKLWNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2Fk
ZUZvbnRzPiB7CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250
Q2FzY2FkZUZvbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURF
TlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTcwLDcgKzcyLDkgQEAgcHVi
bGljOgogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoQ2FjaGU7IH0KIAogICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250UmFuZ2Vz
JiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwg
dW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgYm9vbCBmYWxsYmFja1Jhbmdlc0FyZU51bGwo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkKTsKKyAgICBjb25zdCBGb250
KiBmb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25l
ZCBmYWxsYmFja1Jhbmdlc0luZGV4LCBVQ2hhcjMyKTsKKyAgICBjb25zdCBGb250JiBmb250Rm9y
Rmlyc3RSYW5nZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CiAKICAgICB2b2lkIHBy
dW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc4LDEwICs4MiwxNCBAQCBwcml2YXRlOgogICAg
IEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAgRm9udENhc2Nh
ZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBGb250KiBmaW5k
QmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgVUNoYXIzMik7
CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFyMzIsIGNvbnN0
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0ZW1GYWxsYmFj
a1Nob3VsZEJlSW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yVmFyaWFudChV
Q2hhcjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIHVuc2ln
bmVkIGZhbGxiYWNrSW5kZXggPSAwKTsKIAotICAgIFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9udFJhbmdl
cyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYs
IHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworCisgICAgU3RkTGlzdDxGb250UmFuZ2VzPiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgg
eyAwIH07CiAKICAgICBjbGFzcyBHbHlwaFBhZ2VDYWNoZUVudHJ5IHsKQEAgLTExNCw2ICsxMjIs
NyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsKICAgICBQaXRj
aCBtX3BpdGNoIHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lzRm9yUGxhdGZvcm1Gb250
IHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogfTsKIAogaW5saW5lIGJvb2wg
Rm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQpAQCAtMTI1LDcgKzEzNCwxMCBAQCBpbmxpbmUgYm9vbCBGb250Q2Fz
Y2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcAogCiBpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQo
Y29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udCkKKyAgICAgICAg
cmV0dXJuICptX2NhY2hlZFByaW1hcnlGb250OworCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRv
JiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAp
OwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5m
b250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3Iu
aAppbmRleCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJi
MGYxZTZhNTBhNDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAj
aW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNl
bGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2Vs
ZWN0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJi
MWJkN2ZhN2ZlMWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZm
YWNmNWNkMTk1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUg
PHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsK
IC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1h
cHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVu
aWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJv
bSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1j
bGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEds
eXBoUGFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4MmY3YzJjZjhiMjM0MjNi
YzcwNDhhMzg5NmE3Y2NhNGVhMDQ4Li5kZTE0NzE2ZmIxZDZmYTVhOGFmNTQ1MTU2ODBlOGZmNmY4
MWEwMTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTI5LDggKzEyOSw4IEBA
IGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UoY29uc3QgVUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICYmICghcHJlZmVyQ29sb3JlZEZvbnQg
fHwgYmFzZUZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpKQogICAgICAg
ICByZXR1cm4gYmFzZUZvbnQ7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tS
YW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZhbGxiYWNr
Rm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkg
eworICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGks
IGNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZmFsbGJhY2tGb250IHx8IGZhbGxiYWNrRm9udCA9
PSBiYXNlRm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5j
cHAKaW5kZXggZmE3N2IzOTk3N2RiOTc4YTA1OTcxYjZjMjVjNDFmMzcyZGU1MjRiMS4uNDAyOTJm
MjcwZjIwOTg3MjE1ZGVhNmM5OGQzMmIwOTk0NmZjYjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcApAQCAtNjE5LDcgKzYxOSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0
Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgcmV0
dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwg
Q1RGb250R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7
CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK1JlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBh
biBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9m
IGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdl
J2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgpA
QCAtNjI4LDI3ICs2MjgsMTkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2Ug
Zm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJl
YWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZh
bWlseShkZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5h
IGZvciBMdWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWls
eShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAgIHJldHVybiBm
b250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYKIAotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiQXJhYmljIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUiKSk7Ci0gICAg
c3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5n
ZXQoKSwgJnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIGZvciAoU3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRj
aFdvcmRzKSB7Ci0gICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgq
bWF0Y2hXb3JkKSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9u
LCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdl
ZXphUGxhaW4pOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIG1hdGNoV29yZHNb
XSA9IHsgIkFyYWJpYyJfcywgIlBhc2h0byJfcywgIlVyZHUiX3MgfTsKKyAgICBhdXRvIGZhbWls
eU1hdGNoZXIgPSBTdHJpbmdWaWV3KGZhbWlseSk7CisgICAgZm9yIChhdXRvIG1hdGNoV29yZCA6
IG1hdGNoV29yZHMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TWF0Y2hlciwgU3RyaW5nVmlldyhtYXRjaFdvcmQpKSkKKyAgICAgICAgICAgIHJldHVybiBmb250
Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdo
dCgpKSA/ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBjb25zdCBGb250
RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0YWJh
c2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07CiB9
CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
LCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3Rv
cjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1dG8mIGZvbnRE
YXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZv
bnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZv
bnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZv
bnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZv
ckZhbWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmb250cyA9IGZv
bnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGlmIChmb250
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAgKzExMDAsMTAg
QEAgc3RydWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0U2NyaXB0TmFt
ZSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBX
aXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3Qg
cmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFt
aWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBm
bG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7Ci0gICAg
aWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYm
ICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1p
bHkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQog
ICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpAQCAtMTEyMyw3
ICsxMTE1LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWls
eShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAgICBhdXRvJiBm
b250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxs
ZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNv
bGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmYW1p
bHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAgICAg
aWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3Rh
dGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9u
dCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwogICAgICAgICAv
LyBzdXBwb3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBIb3dldmVyLCB0
aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAoZm9udC13ZWln
aHQsCkBAIC0xMTc3LDcgKzExNjksNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hl
KCkKICAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmludmFsaWRhdGUoKTsKIH0KIAotc3RhdGlj
IFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
ZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2Fz
ZShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURl
c2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNw
cAogICAgIE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjA2LDcg
KzExOTgsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVj
aWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAgaWYgKGZhbWlseS5zdGFydHNX
aXRoKCJVSUNURm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlcXVlc3Qg
PSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICAgICAgQ1RGb250
U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWlnaHQp
IHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNj
ZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVlc3Qu
c2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRv
ciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LnN0
cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRv
bigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxl
KCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOworICAgICAgICBhdXRvIGRlc2Ny
aXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWls
eS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNvY29hOjpzaW5nbGV0b24oKS5j
b250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLnN0
cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWl0cykKICAg
ICAgICAgICAgIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5
V2l0aFN5bWJvbGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRyYWl0cywgdHJhaXRzKSk7CiAg
ICAgICAgIHJldHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMoZGVzY3JpcHRvci5nZXQo
KSwgc2l6ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAtMTI0MCw3ICsxMjMyLDcgQEAg
c3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMg
UmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRh
aW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKGZhbWlseS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTI4Myw3ICsxMjc1LDcgQEAg
c3RhdGljIHZvaWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJpbmcmIG5hbWUsIENHRmxvYXQg
c2l6ZSkKIH0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZl
YXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENh
cGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAgICBmbG9hdCBzaXplID0gZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAgLTEyOTYsNyArMTI4OCw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8gQXV0byBhY3RpdmF0ZSB0aGUg
Zm9udCBiZWZvcmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGltZS4KICAgICAgICAgLy8gSWdu
b3JlIHRoZSByZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0
byBhY3R1YWxseSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWls
eS5zdHJpbmcoKSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LCBzaXpl
KTsKIAogICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRp
b24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBzaXplKTsKICAgICB9
CkBAIC0xNDI4LDcgKzE0MjAsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxs
YmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVy
biBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAg
c3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAg
ICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9
OwpAQCAtMTQzNiwxMCArMTQyOCwxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0
YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYs
IDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hl
aXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07
CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+
IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBz
b25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVp
dGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29u
Z3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFs
IHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0
ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9z
OwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAt
MTQ3NCw3ICsxNDY2LDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFs
dGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJ
bnN0YWxsZWRGb250cykKQEAgLTE1NDcsNyArMTUzOSw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6
Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0
IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAv
LyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFu
eSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlw
dGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9u
LCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNv
cnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCmluZGV4
IDlhYmE4OWYyMTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAzOTUuLmU4N2I5NjE3ZWRmOTAy
NGI0MGQwN2M4MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaApAQCAtNjIs
NyArNjIsNyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZv
dXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0YWluUHRyPENURm9udFJlZj4g
cHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWln
aHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBjbGFzcyBTaG91bGRDb21wdXRl
UGh5c2ljYWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3ludGhlc2lzUGFpciBjb21wdXRl
TmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hv
dWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzOjpO
bywgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBs
YXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0
aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOworUmV0YWluUHRyPENU
Rm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKIEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoQ1RGb250
RGVzY3JpcHRvclJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11
dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsK
IFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnRE
ZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
YXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVj
MDU4NDkwNzkzNTRjMDIxMmRiMC4uMmJiNzEwMTU5MGVlYjE0ZGUxNGY5NTFjNmIzYTBhM2NhODQy
YzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTMxNiw4ICszMTYs
OCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogCiAgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0
ZXJGb250ID0gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5n
ZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxs
YmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIp
OwogICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQz
MTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLmFkMjAzNDMyZTQ4NjI1YmVjNDY3M2I0
MTc5OWU5NjQ0Y2NmOGVhMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMx
OSwzOSArMzE5LDM4IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0Zv
bnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2Fu
dCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJl
dmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRz
IG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBB
dG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9
IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCi0gICAgICAgIHJldHVy
biAqZm9udDsKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZU5vbk51
bGwoKTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9wZXJseS1p
bnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBG
b250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9t
U3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1p
bHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJu
IHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJp
bmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdlJ3JlIGNy
ZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVy
dCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFj
ZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxlbmd0aCgp
ICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWls
eS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAotICAgIGlmIChmYW1pbHkgPT0g
c3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5KQorICAgIGlmIChmYW1pbHkg
PT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJ
bmRleDo6U3RhbmRhcmRGYW1pbHkpKSB8fCBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0
PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTZXJpZkZhbWlseSkpKQogICAgICAgICByZXR1
cm4gInNlcmlmIjsKLSAgICBpZiAoZmFtaWx5ID09IHNhbnNTZXJpZkZhbWlseSkKKyAgICBpZiAo
ZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWls
eU5hbWVzSW5kZXg6OlNhbnNTZXJpZkZhbWlseSkpKQogICAgICAgICByZXR1cm4gInNhbnMtc2Vy
aWYiOwotICAgIGlmIChmYW1pbHkgPT0gbW9ub3NwYWNlRmFtaWx5KQorICAgIGlmIChmYW1pbHkg
PT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJ
bmRleDo6TW9ub3NwYWNlRmFtaWx5KSkpCiAgICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsKLSAg
ICBpZiAoZmFtaWx5ID09IGN1cnNpdmVGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlO
YW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpDdXJz
aXZlRmFtaWx5KSkpCiAgICAgICAgIHJldHVybiAiY3Vyc2l2ZSI7Ci0gICAgaWYgKGZhbWlseSA9
PSBmYW50YXN5RmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6RmFudGFzeUZhbWlseSkpKQog
ICAgICAgICByZXR1cm4gImZhbnRhc3kiOwogCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIGlmIChm
YW1pbHkgPT0gc3lzdGVtVWlGYW1pbHkgfHwgZmFtaWx5ID09ICItd2Via2l0LXN5c3RlbS1mb250
IikKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6OlN5c3RlbVVpRmFtaWx5KSkgfHwgZmFtaWx5ID09ICIt
d2Via2l0LXN5c3RlbS1mb250IikKICAgICAgICAgcmV0dXJuIGRlZmF1bHRHdGtTeXN0ZW1Gb250
KCk7CiAjZW5kaWYKIApAQCAtNTAwLDcgKzQ5OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0Nv
bW1vbmx5VXNlZEdlbmVyaWNGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lU3RyaW5nKQog
ICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lU3RyaW5n
LCAiY3Vyc2l2ZSIpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmls
aXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKIHsKICAgICAv
LyBUaGUgQ1NTIGZvbnQgbWF0Y2hpbmcgYWxnb3JpdGhtIChodHRwOi8vd3d3LnczLm9yZy9UUi9j
c3MzLWZvbnRzLyNmb250LW1hdGNoaW5nLWFsZ29yaXRobSkKICAgICAvLyBzYXlzIHRoYXQgd2Ug
bXVzdCBmaW5kIGFuIGV4YWN0IG1hdGNoIGZvciBmb250IGZhbWlseSwgc2xhbnQgKGl0YWxpYyBv
ciBvYmxpcXVlIGNhbiBiZSB1c2VkKQpAQCAtNTk5LDkgKzU5OCw5IEBAIHN0ZDo6dW5pcXVlX3B0
cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlCiAgICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKIH0KIAotY29uc3QgQXRvbVN0cmlu
ZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRl
eHRDb250cm9sbGVyQ29yZVRleHQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KaW5kZXggNDUxMTA3YmJiNDY1
YmRlMzk1NDQ5ZGMwNzhkODA1YThlMTY0ZjhhNC4uYzhjMTgxMDQ4MzRiYmMzZGFjNWFlMzZjNjMw
ZTRjNTM3NDhjNzU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5t
bQpAQCAtMTI1LDkgKzEyNSw5IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0
Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3AsCiAgICAgICAgIGlz
U3lzdGVtRmFsbGJhY2sgPSB0cnVlOwogCiAgICAgICAgIFUxNl9HRVQoY3AsIDAsIDAsIGxlbmd0
aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNB
dCgwKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBmb250ID0gbV9m
b250LmZvbnRGb3JDaGFyYWN0ZXIoMCwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZm9u
dCkKLSAgICAgICAgICAgIGZvbnQgPSAmbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZv
ckZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgIGZvbnQgPSAmbV9mb250LmZvbnRGb3JGaXJzdFJh
bmdlKCk7CiAgICAgICAgIHN0cmluZ0F0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGVDb3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsIGZvbnQtPmdldENGU3RyaW5n
QXR0cmlidXRlcyhtX2ZvbnQuZW5hYmxlS2VybmluZygpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5v
cmllbnRhdGlvbigpLCBtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSku
Z2V0KCkpKTsKICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGljaCBmb250IHNob3VsZCBiZSB1
c2VkIHRvIHJlbmRlciB0aGlzIGdyYXBoZW1lIGNsdXN0ZXIsIHNvIGVuYWJsZSBDb3JlVGV4dCdz
IGZhbGxiYWNrIG1lY2hhbmlzbSBieSB1c2luZyB0aGUgQ1RGb250IHdoaWNoIGRvZXNuJ3QgaGF2
ZSBDb3JlVGV4dCdzIGZhbGxiYWNrIGRpc2FibGVkLgogICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShjb25zdF9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KHN0cmluZ0F0dHJpYnV0ZXMu
Z2V0KCkpLCBrQ1RGb250QXR0cmlidXRlTmFtZSwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZm9udCgp
KTsKQEAgLTE4Nyw4ICsxODcsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVj
dENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICAg
ICAgUmV0YWluUHRyPENGVHlwZVJlZj4gcnVuRm9udEVxdWFsaXR5T2JqZWN0ID0gRm9udFBsYXRm
b3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhydW5DVEZvbnQpOwogICAgICAgICAgICAg
aWYgKCFXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSwgZm9udC0+
cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpKSkgewogICAgICAg
ICAgICAgICAgIC8vIEJlZ2luIHRyeWluZyB0byBzZWUgaWYgcnVuRm9udCBtYXRjaGVzIGFueSBv
ZiB0aGUgZm9udHMgaW4gdGhlIGZhbGxiYWNrIGxpc3QuCi0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mYWxsYmFja1Jhbmdlc0F0
KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgIW1fZm9udC5mYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250LmZvbnRGb3JDaGFyYWN0ZXIo
aSwgYmFzZUNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcnVuRm9udCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAo
V1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0
eUNoZWNrKCkuZ2V0KCksIHJ1bkZvbnRFcXVhbGl0eU9iamVjdC5nZXQoKSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmlu
ZGV4IDJiNGI1NTcyYTRkODA4YjgzYjRiMGY0YWE2NGY5NmM5NjM4MmY2MTMuLjdmNTcyMzJlMDdk
MjUwN2I0OTRmNjE4OWUxZmJkNGE2ZWI4ZDJlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCkBAIC0zNjIsOSArMzYy
LDkgQEAgYm9vbCBGb250Q2FjaGU6OmlzU3lzdGVtRm9udEZvcmJpZGRlbkZvckVkaXRpbmcoY29u
c3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBjb25zdCBMT0dGT05UJiBmb250LCBBdG9tU3RyaW5nJiBvdXRGb250
RmFtaWx5TmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBM
T0dGT05UJiBmb250LCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQogewotICAgIEF0b21TdHJp
bmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBM
Rl9GQUNFU0laRSkpOworICAgIFN0cmluZyBmYW1pbHlOYW1lKGZvbnQubGZGYWNlTmFtZSwgd2Nz
bmxlbihmb250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CiAgICAgUmVmUHRyPEZvbnQ+IGZv
bnREYXRhID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpOwogICAg
IGlmIChmb250RGF0YSkKICAgICAgICAgb3V0Rm9udEZhbWlseU5hbWUgPSBmYW1pbHlOYW1lOwpA
QCAtMzczLDU2ICszNzMsNTcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNj
cmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb24KIAogUmVmPEZvbnQ+
IEZvbnRDYWNoZTo6bGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbikKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFsmXSgpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVm
YXVsdCBmb250IGhlcmUuIEZvciBub3cgd2UnbGwgcGljaworICAgICAgICAvLyB0aGUgZGVmYXVs
dCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KKwor
ICAgICAgICAvLyBTZWFyY2ggYWxsIHR5cGljYWwgV2luZG93cy1pbnN0YWxsZWQgZnVsbCBVbmlj
b2RlIGZvbnRzLgorICAgICAgICAvLyBTb3J0ZWQgYnkgbW9zdCB0byBsZWFzdCBnbHlwaHMgYWNj
b3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pY29kZV90eXBlZmFjZXMK
KyAgICAgICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0
aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KKyAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZmFsbGJhY2tGb250c1tdID0geworICAg
ICAgICAgICAgU3RyaW5nKCJUaW1lcyBOZXcgUm9tYW4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGFob21hIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIkx1Y2lk
YSBTYW5zIFVuaWNvZGUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
ICAgIFN0cmluZygiQXJpYWwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQorICAgICAg
ICB9OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoZmFs
bGJhY2tGb250cyk7ICsraSkgeworICAgICAgICAgICAgaWYgKGZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ldKSkgeworICAgICAgICAgICAgICAgIGZhbGxiYWNr
Rm9udE5hbWUuZ2V0KCkgPSBmYWxsYmFja0ZvbnRzW2ldOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYgKCFmYWxsYmFja0ZvbnROYW1l
LmdldCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICpmb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CisgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUg
REVGQVVMVF9HVUlfRk9OVCBpZiBubyBrbm93biBVbmljb2RlIGZvbnRzIGFyZSBhdmFpbGFibGUu
CisgICAgICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0PEhGT05UPihH
ZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKKyAgICAgICAgICAgIExPR0ZPTlQg
ZGVmYXVsdEdVSUxvZ0ZvbnQ7CisgICAgICAgICAgICBHZXRPYmplY3QoZGVmYXVsdEdVSUZvbnQs
IHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9nRm9udCk7CisgICAgICAg
ICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBk
ZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CiAKLSAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8g
c29tZWhvdyBnZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gIEZvciBub3cgd2UnbGwg
cGljawotICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQg
Y2hhbmdpbmcgYW55IHByZWZzLgotCi0gICAgLy8gU2VhcmNoIGFsbCB0eXBpY2FsIFdpbmRvd3Mt
aW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KLSAgICAvLyBTb3J0ZWQgYnkgbW9zdCB0byBs
ZWFzdCBnbHlwaHMgYWNjb3JkaW5nIHRvIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5p
Y29kZV90eXBlZmFjZXMKLSAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5ldyBSb21hbiBhbHNvIHNp
bmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2hhbmdlIHByZWZzLgot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZmFs
bGJhY2tGb250c1tdID0gewotICAgICAgICBBdG9tU3RyaW5nKCJUaW1lcyBOZXcgUm9tYW4iLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIk1p
Y3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAot
ICAgICAgICBBdG9tU3RyaW5nKCJUYWhvbWEiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLCBBdG9tU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIkFyaWFsIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpCi0gICAgfTsKLSAgICBSZWZQdHI8Rm9u
dD4gc2ltcGxlRm9udDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5H
VEgoZmFsbGJhY2tGb250cyk7ICsraSkgewotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnRzW2ldKSkgewotICAgICAgICAg
ICAgZmFsbGJhY2tGb250TmFtZS5nZXQoKSA9IGZhbGxiYWNrRm9udHNbaV07Ci0gICAgICAgICAg
ICByZXR1cm4gKnNpbXBsZUZvbnQ7CisgICAgICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50
IG1ldHJpY3MgZm9udHMuCisgICAgICAgIE5PTkNMSUVOVE1FVFJJQ1Mgbm9uQ2xpZW50TWV0cmlj
cyB7IH07CisgICAgICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG5vbkNsaWVu
dE1ldHJpY3MpOworICAgICAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNM
SUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVudE1ldHJpY3Ms
IDApKSB7CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9u
dERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9u
dE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250RnJv
bURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3Mu
bGZNZW51Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlw
dGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250RnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9u
Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
bm9uQ2xpZW50TWV0cmljcy5sZlNtQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0KKyAgICB9KTsKIAotICAgIC8v
IEZhbGwgYmFjayB0byB0aGUgREVGQVVMVF9HVUlfRk9OVCBpZiBubyBrbm93biBVbmljb2RlIGZv
bnRzIGFyZSBhdmFpbGFibGUuCi0gICAgaWYgKEhGT05UIGRlZmF1bHRHVUlGb250ID0gc3RhdGlj
X2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpKSkgewotICAgICAg
ICBMT0dGT05UIGRlZmF1bHRHVUlMb2dGb250OwotICAgICAgICBHZXRPYmplY3QoZGVmYXVsdEdV
SUZvbnQsIHNpemVvZihkZWZhdWx0R1VJTG9nRm9udCksICZkZWZhdWx0R1VJTG9nRm9udCk7Ci0g
ICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9u
dERlc2NyaXB0aW9uLCBkZWZhdWx0R1VJTG9nRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAg
ICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQorICAgIGlmICghZmFsbGJhY2tGb250
TmFtZS5nZXQoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250
RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udE5hbWUpOwogCi0gICAgLy8gRmFsbCBiYWNrIHRvIE5v
bi1jbGllbnQgbWV0cmljcyBmb250cy4KLSAgICBOT05DTElFTlRNRVRSSUNTIG5vbkNsaWVudE1l
dHJpY3MgeyB9OwotICAgIG5vbkNsaWVudE1ldHJpY3MuY2JTaXplID0gc2l6ZW9mKG5vbkNsaWVu
dE1ldHJpY3MpOwotICAgIGlmIChTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUTk9OQ0xJRU5U
TUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpLCAmbm9uQ2xpZW50TWV0cmljcywgMCkp
IHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZNZXNzYWdlRm9udCwgZmFsbGJh
Y2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0
aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAg
ICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZv
bnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0
cmljcy5sZlN0YXR1c0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
ICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZkNhcHRpb25G
b250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsK
LSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChm
b250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFj
a0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAgICB9Ci0gICAg
CiAgICAgYXV0byBoRm9udCA9IGFkb3B0R0RJT2JqZWN0KHN0YXRpY19jYXN0PEhGT05UPihHZXRT
dG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxh
dGZvcm1EYXRhKFdURk1vdmUoaEZvbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNp
emUoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURh
dGEocGxhdGZvcm1EYXRhKTsKQEAgLTUxMiw3ICs1MTMsNyBAQCBzdGF0aWMgaW50IENBTExCQUNL
IG1hdGNoSW1wcm92aW5nRW51bVByb2MoQ09OU1QgTE9HRk9OVCogY2FuZGlkYXRlLCBDT05TVCBU
RVhUTQogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVhdGVH
RElGb250KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0LCBib29s
IGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCitzdGF0aWMg
R0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBMT05H
IGRlc2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJvb2wgc3ludGhl
c2l6ZUl0YWxpYykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC01NzAsMTIgKzU3MSwxMiBA
QCBzdGF0aWMgR0RJT2JqZWN0PEhGT05UPiBjcmVhdGVHRElGb250KGNvbnN0IEF0b21TdHJpbmcm
IGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZwogfQogCiBzdHJ1Y3QgVHJhaXRzSW5GYW1pbHlQcm9j
RGF0YSB7Ci0gICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHlOYW1lKQorICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lKQogICAgICAgICA6IG1fZmFtaWx5TmFtZShmYW1pbHlOYW1lKQogICAgIHsKICAgICB9CiAK
LSAgICBjb25zdCBBdG9tU3RyaW5nJiBtX2ZhbWlseU5hbWU7CisgICAgY29uc3QgU3RyaW5nJiBt
X2ZhbWlseU5hbWU7CiAgICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IG1fY2Fw
YWJpbGl0aWVzOwogfTsKIApAQCAtNjI2LDcgKzYyNyw3IEBAIHN0YXRpYyBpbnQgQ0FMTEJBQ0sg
dHJhaXRzSW5GYW1pbHlFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBsb2dGb250LCBDT05TVCBURVhU
TUVUCiAgICAgcmV0dXJuIDE7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
PiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxG
b250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBh
YmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQogewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAgLTY0Niw3ICs2NDcsNyBAQCBW
ZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0
aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyosIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0
aW5ncyosIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgYm9vbCBp
c0x1Y2lkYUdyYW5kZSA9IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgImx1
Y2lkYSBncmFuZGUiKTsKIApAQCAtNjkyLDExICs2OTMsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNo
ZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5h
bWUpCitPcHRpb25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRo
cmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRpbWVzTmV3Um9tYW4oIlRpbWVz
IE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG1pY3Jvc29mdFNh
bnNTZXJpZigiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0KICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICAvLyBP
biBXaW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250
ZW50IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IFRpbWVzIE5ldyBSb21h
biBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNlcmlmLApAQCAtNzA1
LDcgKzcwMyw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291bGQgbmVlZCBp
dCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgODoKICAgICAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzZXJpZiIpKQotICAgICAg
ICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIE5l
dyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qg
c3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQu
CiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBNaWNyb3NvZnQgU2FucyBTZXJpZiBhcyBhbiBhbHRlcm5h
dGl2ZSBmb3IgdGhlIGJpdG1hcCBmb250IE1TIFNhbnMgU2VyaWYsCkBAIC03MTQsMTAgKzcxMiwx
MCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3Ro
ZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDEzOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1zIHNhbnMgc2VyaWYiKSkKLSAgICAgICAg
ICAgIHJldHVybiBtaWNyb3NvZnRTYW5zU2VyaWY7CisgICAgICAgICAgICByZXR1cm4gIk1pY3Jv
c29mdCBTYW5zIFNlcmlmIl9zOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIG51
bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAppbmRleCBjOWYwZjgxM2JjYjYzNjYx
NTRiYzA0YmVhNTAzYzYyNGZhZWEwMWI1Li41NWYxYjFhZjdmYTFkOWM5MjZhMDE3NjA5MjU0MWJm
YmEwNzZiZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBT
YW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNv
bnRleHQ+IHsKK3N0cnVjdCBTYW1lU2l6ZUFzQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CiAgICAgdWludDMyX3QgYml0Zmll
bGRzIDogMTY7CiAgICAgdm9pZCogcGFyZW50OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuaAppbmRleCBkNGM0ZTU3MDhhMGQ0MmNiOWNiNDcxYTJjMDY5Njcw
ZDM5YmQzNGQxLi41YThkOTA5ZWVhOTFiNjE5ZTUzOTQ2OWZkYWNmYzRmM2EyNjAzZDcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCkBAIC0yMiwxNSArMjIs
MTUgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQmlkaUVtYmVkZGluZ1NvdXJjZSB7IEZyb21TdHlsZU9yRE9NLCBGcm9tVW5pY29kZSB9Owog
CiAvLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZXhwbGljaXQgZW1iZWRkaW5ncy4KLWNsYXNzIEJp
ZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8QmlkaUNvbnRleHQ+IHsKK2NsYXNzIEJpZGlD
b250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CiBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxCaWRpQ29udGV4dD4gY3JlYXRlKHVu
c2lnbmVkIGNoYXIgbGV2ZWwsIFVDaGFyRGlyZWN0aW9uLCBib29sIG92ZXJyaWRlID0gZmFsc2Us
IEJpZGlFbWJlZGRpbmdTb3VyY2UgPSBGcm9tU3R5bGVPckRPTSwgQmlkaUNvbnRleHQqIHBhcmVu
dCA9IG51bGxwdHIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424127</attachid>
            <date>2021-03-24 05:05:46 -0700</date>
            <delta_ts>2021-03-24 06:03:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210324120545.patch</filename>
            <type>text/plain</type>
            <size>85858</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgwOTFhMjdmOTc2OTEz
NWM5MWMzNjZlYjJlZmQ0NmMwYzhjYTg2Yy4uZTdlZTRjMWZmMzA1YTUwZTk4NjcyNGYyOTBiNjNl
MDI0ZmJlNmI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTAzLTI0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGNzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDogUmVtb3ZlIHVzZSBv
ZiBBdG9tU3RyaW5nIGZvciBmYW1pbHkgbmFtZSBpbgorICAgICAgICAgICAgZm9udCByZXNvbHV0
aW9uLgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOiBNb3ZlIHRocmVhZCBhc3Nl
cnRpb24gaW4gZGVzdHJ1Y3RvciB0bworICAgICAgICAgICAgYWZ0ZXIgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBudWxsIGNoZWNrLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
TWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOiBJ
bnRyb2R1Y2UgbG9ja2luZywgcmVwbGFjZSB1c2Ugb2YKKyAgICAgICAgICAgIEF0b21TdHJpbmcg
d2l0aCBTdHJpbmcgYW5kIG1ha2UgaXNvbGF0ZWQgY29waWVzIGluc3RlYWQgb2YgdGFraW5nCisg
ICAgICAgICAgICByZWZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgYWNjZXNzZWQgYWNyb3NzIHRocmVh
ZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4K
KyAgICAgICAgICAgIEZvbnRDYXNjYWRlRm9udHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOiBBZGFwdCB0byBBUEkgY2hhbmdlcworICAgICAg
ICAgICAgYW5kIHJlbW92ZSBDb2NvYSBmYXN0LXBhdGggdGhhdCBpcyBubyBsb25nZXIgdmFsaWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOiBEb24ndCBhc3NlcnQg
bWFpbiB0aHJlYWQgYW5kCisgICAgICAgICAgICBpbnRyb2R1Y2UgbG9ja2luZyBhcm91bmQgbWVt
YmVyIHZhcmlhYmxlIEkvTy4gTG9jay1mcmVlIGFjY2VzcyBpcworICAgICAgICAgICAgbWFpbnRh
aW5lZCB3aGVyZSBwb3NzaWJsZS4KKyAgICAgICAgICAgIFJlbW92ZSBhY2Nlc3MgdG8gRm9udFJh
bmdlcyBhbmQgaW5zdGVhZCBleHBvc2UgdGhlIG1ldGhvZHMgdXNlZCBvbgorICAgICAgICAgICAg
dGhlbSBzbyB0aGF0IHRoZWlyIHJlZmVyZW5jZSByZW1haW5zIGFzc29jaWF0ZWQgb25seSB3aXRo
IHRoZSBwYXJlbnQKKyAgICAgICAgICAgIEZvbnRDYXNjYWRlRm9udHMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmg6IE1ha2UgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmg6IE1ha2UgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYXNj
YWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5oOiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6IEFk
YXB0IHRvIGNoYW5nZXMKKyAgICAgICAgICAgIGluIEZvbnRDYXNjYWRlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbTogQWRhcHQgdG8gY2hh
bmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAg
ICAgIEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmg6IE1ha2UgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDogUmVw
bGFjZSB1c2Ugb2YgcmVtb3ZlZAorICAgICAgICAgICAgQ1NTRm9udFNlbGVjdG9yOjpmYW1pbHlO
YW1lLgorCiAyMDIxLTAzLTEwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3NDE2Ni4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggNzM4ODcxMzkzOGY1M2UyODc4OWM0NmRhYTZm
M2Y5NjBiZDkzYzI3ZS4uMzBjYTFlYzUzZDZiZjc5NWRiYzY2MzJiNGRlMTA3NWRmOTVhMWVlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTU1LDcgKzU1LDYgQEAK
ICNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDIwICs2NywxMCBAQCBDU1NG
b250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KQogICAgICwgbV9jb250ZXh0KG1ha2VXZWFrUHRyKGNvbnRleHQpKQogICAgICwgbV9jc3NG
b250RmFjZVNldChDU1NGb250RmFjZVNldDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9mb250TW9k
aWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250TW9kaWZpZWQoKTsgfSkKLSAgICAsIG1fZm9udExv
YWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZpcmVk
KQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92ZXJzaW9uKDAp
CiB7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkgewotICAgICAgICBtX2ZvbnRGYW1p
bHlOYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZhbWlseU5hbWVzLT5zaXplKCkpOwotICAg
ICAgICBmb3IgKGF1dG8mIGZhbWlseU5hbWUgOiBmYW1pbHlOYW1lcy5nZXQoKSkKLSAgICAgICAg
ICAgIG1fZm9udEZhbWlseU5hbWVzLnVuY2hlY2tlZENvbnN0cnVjdEFuZEFwcGVuZChmYW1pbHlO
YW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnRGYW1pbHlOYW1lcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGZhbWlseU5hbWVzRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRv
JiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXNEYXRhLmdldCgpKQotICAgICAgICAgICAgbV9mb250
RmFtaWx5TmFtZXMudW5jaGVja2VkQXBwZW5kKGZhbWlseU5hbWUpOwotICAgIH0KLQorICAgIG1f
Zm9udExvYWRpbmdUaW1lciA9IG1ha2VVbmlxdWU8VGltZXI+KCp0aGlzLCAmQ1NTRm9udFNlbGVj
dG9yOjpmb250TG9hZGluZ1RpbWVyRmlyZWQpOwogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
YWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRGb250TW9kaWZpZWRP
YnNlcnZlcihtX2ZvbnRNb2RpZmllZE9ic2VydmVyKTsKICAgICBMT0coRm9udHMsICJDU1NGb250
U2VsZWN0b3IgJXAgY3RvciIsIHRoaXMpOwpAQCAtMjgxLDIyICsyNzAsMjEgQEAgdm9pZCBDU1NG
b250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKICAgICBkaXNwYXRjaEludmFsaWRh
dGlvbkNhbGxiYWNrcygpOwogfQogCi1PcHRpb25hbDxBdG9tU3RyaW5nPiBDU1NGb250U2VsZWN0
b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8U3RyaW5nPiBD
U1NGb250U2VsZWN0b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgYXV0
byBwbGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNjcmlwdGlvbjo6cGxhdGZvcm1SZXNvbHZlR2VuZXJp
Y0ZhbWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZExvY2FsZSgpLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoIXBsYXRmb3JtUmVzdWx0LmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gcGxhdGZvcm1SZXN1bHQ7CisgICAgICAgIHJldHVybiBwbGF0Zm9y
bVJlc3VsdC5zdHJpbmcoKTsKIAogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgY29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX2NvbnRleHQtPnNl
dHRpbmdzVmFsdWVzKCk7CiAKLSAgICBVU2NyaXB0Q29kZSBzY3JpcHQgPSBmb250RGVzY3JpcHRp
b24uc2NyaXB0KCk7Ci0gICAgYXV0byBmYW1pbHlOYW1lSW5kZXggPSBtX2ZvbnRGYW1pbHlOYW1l
cy5maW5kKGZhbWlseU5hbWUpOworICAgIGF1dG8gZmFtaWx5TmFtZUluZGV4ID0gZmFtaWx5TmFt
ZXNEYXRhLT5maW5kKGZhbWlseU5hbWUpOwogICAgIGlmIChmYW1pbHlOYW1lSW5kZXggIT0gbm90
Rm91bmQpIHsKLSAgICAgICAgaWYgKGF1dG8gZmFtaWx5U3RyaW5nID0gc2V0dGluZ3MuZm9udEdl
bmVyaWNGYW1pbGllcy5mb250RmFtaWx5KHN0YXRpY19jYXN0PEZhbWlseU5hbWVzSW5kZXg+KGZh
bWlseU5hbWVJbmRleCksIHNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm4gQXRvbVN0cmluZygq
ZmFtaWx5U3RyaW5nKTsKKyAgICAgICAgaWYgKGF1dG8gZmFtaWx5U3RyaW5nID0gc2V0dGluZ3Mu
Zm9udEdlbmVyaWNGYW1pbGllcy5mb250RmFtaWx5KHN0YXRpY19jYXN0PEZhbWlseU5hbWVzSW5k
ZXg+KGZhbWlseU5hbWVJbmRleCksIGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gKmZhbWlseVN0cmluZzsKICAgICB9CiAKICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwpAQCAtMzA4LDkgKzI5Niw5IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250
UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAgQVNT
RVJUKCFtX2J1aWxkSXNVbmRlcndheSB8fCBtX2NvbXB1dGluZ1Jvb3RTdHlsZUZvbnRDb3VudCk7
CiAKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgKGFuZCBGaXJlZm94KSBzYXlzIHVzZXIgc3BlY2lm
aWVkIGdlbmVyaWMgZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRjLikgc2hvdWxkIGJlIHJlc29sdmVk
IGJlZm9yZSB0aGUgQGZvbnQtZmFjZSBsb29rdXAgdG9vLgotICAgIGJvb2wgcmVzb2x2ZUdlbmVy
aWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gbV9mb250RmFtaWx5TmFtZXNbc3RhdGljX2Nh
c3Q8aW50PihGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseSldOworICAgIGJvb2wgcmVz
b2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gZmFtaWx5TmFtZXNEYXRhLT5h
dChzdGF0aWNfY2FzdDxpbnQ+KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5KSk7CiAK
LSAgICBBdG9tU3RyaW5nIGZhbWlseUZvckxvb2t1cCA9IGZhbWlseU5hbWU7CisgICAgU3RyaW5n
IGZhbWlseUZvckxvb2t1cCA9IGZhbWlseU5hbWUuc3RyaW5nKCk7CiAgICAgT3B0aW9uYWw8Rm9u
dERlc2NyaXB0aW9uPiBvdmVycmlkZUZvbnREZXNjcmlwdGlvbjsKICAgICBjb25zdCBGb250RGVz
Y3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCA9ICZmb250RGVzY3JpcHRpb247CiAg
ICAgYXV0byByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSA9IFsmXSgpIHsKQEAgLTMyNCw3
ICszMTIsNyBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWls
eShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogICAgIGF1dG8qIGZhY2UgPSBtX2Nz
c0ZvbnRGYWNlU2V0LT5mb250RmFjZShmb250RGVzY3JpcHRpb25Gb3JMb29rdXAtPmZvbnRTZWxl
Y3Rpb25SZXF1ZXN0KCksIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGZhY2UpIHsKICAgICAg
ICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5z
dHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nRm9udExvYWQoKmRvY3VtZW50LCBmYW1pbHlGb3JMb29rdXAsIHRydWUpOwogICAgICAg
ICByZXR1cm4gZmFjZS0+Zm9udFJhbmdlcygqZm9udERlc2NyaXB0aW9uRm9yTG9va3VwKTsKICAg
ICB9CiAKQEAgLTMzMiwyMCArMzIwLDIwIEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpm
b250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAg
ICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5KCk7CiAgICAgYXV0byBmb250ID0gRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KCpmb250RGVzY3JpcHRpb25Gb3JMb29r
dXAsIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1bWVu
dCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCAhIWZvbnQpOworICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50LCBmYW1pbHlGb3JMb29r
dXAsICEhZm9udCk7CiAgICAgcmV0dXJuIEZvbnRSYW5nZXMgeyBXVEZNb3ZlKGZvbnQpIH07CiB9
CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGluZ0FuZENsZWFyRm9udHMoKQogewog
ICAgIGlmIChtX2lzU3RvcHBlZCkgewotICAgICAgICBBU1NFUlQoIW1fZm9udExvYWRpbmdUaW1l
ci5pc0FjdGl2ZSgpKTsKICAgICAgICAgQVNTRVJUKG1fZm9udHNUb0JlZ2luTG9hZGluZy5pc0Vt
cHR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9pc1N0b3BwZWQgPSB0cnVl
OwotICAgIG1fZm9udExvYWRpbmdUaW1lci5zdG9wKCk7CisgICAgbV9mb250TG9hZGluZ1RpbWVy
LT5zdG9wKCk7CisgICAgbV9mb250TG9hZGluZ1RpbWVyID0gbnVsbHB0cjsKIAogICAgIGlmIChp
czxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkgewogICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKQEAgLTM2Myw3ICszNTEsOCBAQCB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6c3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkKIAogdm9pZCBDU1NG
b250U2VsZWN0b3I6OmJlZ2luTG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQmIGZvbnQpCiB7Ci0g
ICAgaWYgKG1faXNTdG9wcGVkIHx8ICFpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkKKyAg
ICBBU1NFUlQoIW1faXNTdG9wcGVkKTsKKyAgICBpZiAoIWlzPERvY3VtZW50PihtX2NvbnRleHQu
Z2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqbV9jb250ZXh0KTsKQEAgLTM3NCw4ICszNjMsOCBAQCB2b2lkIENTU0ZvbnRT
ZWxlY3Rvcjo6YmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVkRm9udCYgZm9udCkKICAgICAvLyBk
ZWNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBmb250TG9hZGluZ1RpbWVyRmlyZWQoKSBhbmQgaW4g
c3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkuCiAgICAgZG9jdW1lbnQuY2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udCk7CiAKLSAgICBpZiAoIW1faXNGb250
TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9mb250TG9hZGluZ1RpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIG1fZm9udExvYWRpbmdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICBpZiAoIW1faXNG
b250TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9mb250TG9hZGluZ1RpbWVyLT5pc0FjdGl2ZSgpKQor
ICAgICAgICBtX2ZvbnRMb2FkaW5nVGltZXItPnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCiB2b2lk
IENTU0ZvbnRTZWxlY3Rvcjo6c3VzcGVuZEZvbnRMb2FkaW5nVGltZXIoKQpAQCAtNDA0LDExICsz
OTMsNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6bG9hZFBlbmRpbmdGb250cygpCiAgICAgfQog
fQogCi1jb25zdCBBdG9tU3RyaW5nJiBDU1NGb250U2VsZWN0b3I6OmZhbWlseU5hbWUoRmFtaWx5
TmFtZXNJbmRleCBmYW1pbHlOYW1lSW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udEZh
bWlseU5hbWVzW3N0YXRpY19jYXN0PGludD4oZmFtaWx5TmFtZUluZGV4KV07Ci19Ci0KIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGluZ1RpbWVyRmlyZWQoKQogewogICAgIGlmICghaXM8
RG9jdW1lbnQ+KG1fY29udGV4dC5nZXQoKSkpCkBAIC00NTYsNyArNDQwLDggQEAgUmVmUHRyPEZv
bnQ+IENTU0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHQKIAogdm9pZCBDU1NGb250U2VsZWN0b3I6OnN0b3AoKQogewotICAgIG1f
Zm9udExvYWRpbmdUaW1lci5zdG9wKCk7CisgICAgaWYgKCFtX2lzU3RvcHBlZCkKKyAgICAgICAg
bV9mb250TG9hZGluZ1RpbWVyLT5zdG9wKCk7CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpz
dXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCkBAIC00NjUsNyArNDUwLDggQEAgdm9pZCBDU1NG
b250U2VsZWN0b3I6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkID0gdHJ1ZTsKLSAgICBtX2ZvbnRMb2Fk
aW5nVGltZXIuc3RvcCgpOworICAgIGlmICghbV9pc1N0b3BwZWQpCisgICAgICAgIG1fZm9udExv
YWRpbmdUaW1lci0+c3RvcCgpOwogfQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6cmVzdW1lKCkK
QEAgLTQ3Myw4ICs0NTksOSBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6cmVzdW1lKCkKICAgICBp
ZiAoIW1faXNGb250TG9hZGluZ1N1c3BlbmRlZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgQVNT
RVJUKCFtX2lzU3RvcHBlZCk7CiAgICAgaWYgKCFtX2ZvbnRzVG9CZWdpbkxvYWRpbmcuaXNFbXB0
eSgpKQotICAgICAgICBtX2ZvbnRMb2FkaW5nVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CisgICAg
ICAgIG1fZm9udExvYWRpbmdUaW1lci0+c3RhcnRPbmVTaG90KDBfcyk7CiAKICAgICBtX2lzRm9u
dExvYWRpbmdTdXNwZW5kZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuaAppbmRleCAwYjU0ODM2YjYwNzMxN2Q2M2U4NDdiMDRkOGQ5ZjdiMTczY2Y2OTJhLi5jNjFh
NmZkNjhiNmZjZjk1MGI3NmZkNmUwNjlhZGJlYTRlODU2MDEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oCkBAIC05NCw4ICs5NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbG9h
ZFBlbmRpbmdGb250cygpOwogCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZShXZWJL
aXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXgpIGNvbnN0OwotCiAgICAgLy8gQ1NT
Rm9udEZhY2U6OkNsaWVudCBuZWVkcyB0byBiZSBhYmxlIHRvIGJlIGhlbGQgaW4gYSBSZWZQdHIu
CiAgICAgdm9pZCByZWYoKSBmaW5hbCB7IEZvbnRTZWxlY3Rvcjo6cmVmKCk7IH0KICAgICB2b2lk
IGRlcmVmKCkgZmluYWwgeyBGb250U2VsZWN0b3I6OmRlcmVmKCk7IH0KQEAgLTEwNyw3ICsxMDUs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBvcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERhdGFV
UkxMb2FkaW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHkpIGZpbmFsOwogCi0gICAgT3B0aW9uYWw8QXRvbVN0cmluZz4gcmVzb2x2ZUdlbmVy
aWNGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
KTsKKyAgICBPcHRpb25hbDxTdHJpbmc+IHJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYgZmFtaWx5KTsKIAogICAgIC8vIENTU0ZvbnRGYWNl
OjpDbGllbnQKICAgICB2b2lkIGZvbnRMb2FkZWQoQ1NTRm9udEZhY2UmKSBmaW5hbDsKQEAgLTEz
OSw3ICsxMzcsNyBAQCBwcml2YXRlOgogCiAgICAgQ1NTRm9udEZhY2VTZXQ6OkZvbnRNb2RpZmll
ZE9ic2VydmVyIG1fZm9udE1vZGlmaWVkT2JzZXJ2ZXI7CiAKLSAgICBUaW1lciBtX2ZvbnRMb2Fk
aW5nVGltZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPFRpbWVyPiBtX2ZvbnRMb2FkaW5nVGltZXI7
CiAgICAgYm9vbCBtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQgeyBmYWxzZSB9OwogCiAgICAgdW5z
aWduZWQgbV91bmlxdWVJZDsKQEAgLTE0OCw4ICsxNDYsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9jcmVhdGluZ0ZvbnQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9idWlsZElzVW5kZXJ3YXkgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OwotCi0gICAgV1RGOjpWZWN0
b3I8QXRvbVN0cmluZz4gbV9mb250RmFtaWx5TmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCmluZGV4IDg5ZDg5ODIw
YTc2NDc3ZDAxOGYzY2ZlMzQxOWM3MTZkYzY0NTUwYTguLmE4MDdmNThjMGUxYTQzYmI3YzE5ODJk
OGQwMTRmNzgxNWE3YTk3MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVE
T01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3Bw
CkBAIC02Nyw4ICs2Nyw2IEBAIEFjdGl2ZURPTU9iamVjdDo6QWN0aXZlRE9NT2JqZWN0KERvY3Vt
ZW50JiBkb2N1bWVudCkKIAogQWN0aXZlRE9NT2JqZWN0Ojp+QWN0aXZlRE9NT2JqZWN0KCkKIHsK
LSAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2NyZWF0
aW9uVGhyZWFkKSk7Ci0KICAgICAvLyBBY3RpdmVET01PYmplY3QgbWF5IGJlIGluaGVyaXRlZCBi
eSBhIHN1Yi1jbGFzcyB3aG9zZSBsaWZlLWN5Y2xlCiAgICAgLy8gZXhjZWVkcyB0aGF0IG9mIHRo
ZSBhc3NvY2lhdGVkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuIEluIHRob3NlIGNhc2VzLAogICAg
IC8vIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB3b3VsZC9zaG91bGQgaGF2ZSBiZWVuIG51bGxp
ZmllZCBieQpAQCAtNzgsNiArNzYsNyBAQCBBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmpl
Y3QoKQogICAgIGlmICghbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICByZXR1cm47
CiAKKyAgICBBU1NFUlQoY2FuQ3VycmVudFRocmVhZEFjY2Vzc1RocmVhZExvY2FsRGF0YShtX2Ny
ZWF0aW9uVGhyZWFkKSk7CiAgICAgQVNTRVJUKG1fc3VzcGVuZElmTmVlZGVkV2FzQ2FsbGVkKTsK
ICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7
CiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT53aWxsRGVzdHJveUFjdGl2ZURPTU9iamVj
dCgqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggYzdk
YTU0OTNmYzE0NjQwMThhNzFhYjIxODlmYTU1ZjZiNmJiMzJhZi4uYjZlMzBjNWMzZTRkODIxODRm
ZDk0ODQ5YTljMjVkMWI4YmMyNjRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaApAQCAtNzIsNyArNzIsNyBAQCBib29sIGZvbnRIYXNFaXRoZXJUYWJsZShDVEZvbnRS
ZWYsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNlbmRpZgogCiBE
RUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250KTsKLWNsYXNzIEZvbnQg
OiBwdWJsaWMgUmVmQ291bnRlZDxGb250PiB7CitjbGFzcyBGb250IDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPEZvbnQ+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hF
QVBfSURFTlRJRklFUihGb250KTsKIHB1YmxpYzoKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0
Zm9ybSBmb250cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwCmluZGV4IGZiMGY4OGRhNzkxYTNhNjFjNTdiYWNjMWFmNzJiNDZmMGNjOTA5NmQuLjVm
ZDQ1NTVhY2ZjNDQ5YTZmODVhMzIwYjFkZWI1ZGRjMzZhYWY5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtNDYsMTUgKzQ2LDYgQEAK
ICNpbmNsdWRlICJPcGVuVHlwZVZlcnRpY2FsRGF0YS5oIgogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1JlY3Vy
c2l2ZUxvY2tBZGFwdGVyLmg+Ci0KLXN0YXRpYyBSZWN1cnNpdmVMb2NrIGZvbnRMb2NrOwotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC02NSw3ICs1Niw3IEBAIEZvbnRDYWNoZSYgRm9udENh
Y2hlOjpzaW5nbGV0b24oKQogfQogCiBGb250Q2FjaGU6OkZvbnRDYWNoZSgpCi0gICAgOiBtX3B1
cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVk
KQorICAgIDogbV9wdXJnZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkZvbnRDYWNoZTo6
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpCiB7CiB9CiAKQEAgLTczLDcgKzY0LDcgQEAg
c3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KCkgeyB9Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250
RmFjZUNhcGFiaWxpdGllcykKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgU3Ry
aW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZp
ZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCiAgICAgICAgIDogbV9mb250RGVz
Y3JpcHRpb25LZXkoZGVzY3JpcHRpb24pCiAgICAgICAgICwgbV9mYW1pbHkoZmFtaWx5KQogICAg
ICAgICAsIG1fZm9udEZhY2VGZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVh
dHVyZXMgOiBGb250RmVhdHVyZVNldHRpbmdzKCkpCkBAIC05OSw4ICs5MCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVx
dWFsKG1fZmFtaWx5LCBvdGhlci5tX2ZhbWlseSk7CiAgICAgfQogCisgICAgdm9pZCBpc29sYXRl
KCkgeyBtX2ZhbWlseSA9IG1fZmFtaWx5Lmlzb2xhdGVkQ29weSgpOyB9CisKICAgICBGb250RGVz
Y3JpcHRpb25LZXkgbV9mb250RGVzY3JpcHRpb25LZXk7Ci0gICAgQXRvbVN0cmluZyBtX2ZhbWls
eTsKKyAgICBTdHJpbmcgbV9mYW1pbHk7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2ZvbnRG
YWNlRmVhdHVyZXM7CiAgICAgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBtX2Zv
bnRGYWNlQ2FwYWJpbGl0aWVzOwogfTsKQEAgLTE0MSwzOSArMTM0LDMzIEBAIHN0cnVjdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxGb250UGxhCiAKIHR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXks
IHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaFRyYWl0cz4gRm9udFBsYXRmb3Jt
RGF0YUNhY2hlOwogCitzdGF0aWMgUmVjdXJzaXZlTG9jayBnUGxhdGZvcm1EYXRhQ2FjaGVMb2Nr
OworCiBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZvcm1EYXRhQ2FjaGUo
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IGNh
Y2hlOwogICAgIHJldHVybiBjYWNoZTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRp
b25hbDxBU0NJSUxpdGVyYWw+IEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBT
dHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3ll
ZDxjb25zdCBBdG9tU3RyaW5nPiBhcmlhbCgiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBB
dG9tU3RyaW5nPiBjb3VyaWVyKCJDb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gY291cmllck5ldygiQ291cmllciBOZXciLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBoZWx2ZXRpY2EoIkhlbHZldGljYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IHRpbWVzKCJUaW1lcyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
LSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHRp
bWVzTmV3Um9tYW4oIlRpbWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKLQotICAgIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5h
dGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgaWYgKCFw
bGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlLmlzTnVsbCgpKQorICAgIGlmIChhdXRvIHBsYXRmb3Jt
U3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFt
ZSkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlOwogCiAgICAgc3dp
dGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSA1OgogICAgICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImFyaWFsIikpCi0gICAgICAg
ICAgICByZXR1cm4gaGVsdmV0aWNhOworICAgICAgICAgICAgcmV0dXJuICJIZWx2ZXRpY2EiX3M7
CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAi
dGltZXMiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAg
cmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNzoK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllck5ldzsKKyAgICAgICAgICAgIHJl
dHVybiAiQ291cmllciBOZXciX3M7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgOToKICAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJoZWx2ZXRp
Y2EiKSkKLSAgICAgICAgICAgIHJldHVybiBhcmlhbDsKKyAgICAgICAgICAgIHJldHVybiAiQXJp
YWwiX3M7CiAgICAgICAgIGJyZWFrOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8vIE9uIFdpbmRv
d3MsIENvdXJpZXIgTmV3IGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IGlzIGFsd2F5cyBwcmVzZW50
IGFuZApAQCAtMTgzLDMzICsxNzAsMjggQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjph
bHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgLy8g
b25seSBiZSB0cmllZCBpZiBDb3VyaWVyIE5ldyBpcyBub3QgZm91bmQuCiAgICAgY2FzZSAxMToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJj
b3VyaWVyIG5ldyIpKQotICAgICAgICAgICAgcmV0dXJuIGNvdXJpZXI7CisgICAgICAgICAgICBy
ZXR1cm4gIkNvdXJpZXIiX3M7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSAxNToK
ICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUsICJ0
aW1lcyBuZXcgcm9tYW4iKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lczsKKyAgICAgICAgICAg
IHJldHVybiAiVGltZXMiX3M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2VkRmFtaWx5TmFt
ZSwKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXNzZWRGYW1pbHlOYW1lLAogICAgIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LSAgICAKICNpZiBPUyhXSU5ET1dTKSAmJiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAg
Ly8gTGVhZGluZyAiQCIgaW4gdGhlIGZvbnQgbmFtZSBlbmFibGVzIFdpbmRvd3MgdmVydGljYWwg
ZmxvdyBmbGFnIGZvciB0aGUgZm9udC4KICAgICAvLyBCZWNhdXNlIHdlIGRvIHZlcnRpY2FsIGZs
b3cgYnkgb3Vyc2VsdmVzLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgV2luZG93cyBmZWF0dXJl
LgotICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yaWVudGF0b2lu
LCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWls
eU5hbWUgPSAocGFzc2VkRmFtaWx5TmFtZS5pc0VtcHR5KCkgfHwgcGFzc2VkRmFtaWx5TmFtZVsw
XSAhPSAnQCcpID8KLSAgICAgICAgcGFzc2VkRmFtaWx5TmFtZSA6IEF0b21TdHJpbmcocGFzc2Vk
RmFtaWx5TmFtZS5pbXBsKCktPnN1YnN0cmluZygxKSk7CisgICAgLy8gSUUgZGlzcmVnYXJkcyAi
QCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRpb24sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZp
b3IuCisgICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZS5zdWJz
dHJpbmcocGFzc2VkRmFtaWx5TmFtZVswXSA9PSAnQCcgPyAxIDogMCk7CiAjZWxzZQotICAgIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lOworICAgIGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CiAjZW5kaWYKIAogICAgIHN0
YXRpYyBib29sIGluaXRpYWxpemVkOwpAQCAtMjIzLDE0ICsyMDUsMTQgQEAgRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm8KICAgICBhdXRvIGFkZFJlc3VsdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgp
LmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3Ig
aXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7
CisgICAgICAgIGtleS5pc29sYXRlKCk7CiAgICAgICAgIGl0LT52YWx1ZSA9IGNyZWF0ZUZvbnRQ
bGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lLCBmb250RmFjZUZlYXR1cmVz
LCBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAKICAgICAgICAgaWYgKCFpdC0+dmFsdWUgJiYgIWNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSkgewogICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8g
ZmluZCBhIGZvbnQuICBXZSBoYXZlIGEgc21hbGwgc2V0IG9mIGZvbnRzIHRoYXQgd2UgYWxpYXMg
dG8gb3RoZXIgbmFtZXMsCiAgICAgICAgICAgICAvLyBlLmcuLCBBcmlhbC9IZWx2ZXRpY2EsIENv
dXJpZXIvQ291cmllciBOZXcsIGV0Yy4gIFRyeSBsb29raW5nIHVwIHRoZSBmb250IHVuZGVyIHRo
ZSBhbGlhc2VkIG5hbWUuCi0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVO
YW1lID0gYWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICAgICAgICAgIGlmICgh
YWx0ZXJuYXRlTmFtZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEqIGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShmb250RGVzY3JpcHRpb24sIGFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMs
IGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGFsdGVy
bmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNl
RmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAv
LyBMb29rdXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMg
aXRlcmF0b3IgbWF5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5
IHRoZSByZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCiAgICAg
ICAgICAgICAgICAgaXQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CkBAIC0z
MTIsOCArMjk0LDEwIEBAIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0g
MjAwOwogY29uc3QgdW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnRE
YXRhID0gNTA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0
aXZlRm9udERhdGEgPSAzMDsKIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWls
eShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBi
b29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRG
b3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0
cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVz
LCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVz
LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisKICAgICBpZiAoIW1fcHVyZ2VUaW1lci5pc0FjdGl2ZSgpKQogICAgICAg
ICBtX3B1cmdlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAKQEAgLTMyNSwxMCArMzA5LDggQEAg
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2Nr
KTsKLSNlbmRpZgotICAgIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gY2FjaGVkRm9udHMoKS5lbnN1cmUocGxhdGZvcm1EYXRhLCBb
Jl0gewogICAgICAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHBsYXRmb3JtRGF0YSk7CiAgICAgfSk7
CkBAIC0zNDAsNiArMzIyLDggQEAgUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiAKIHZvaWQgRm9udENh
Y2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKwogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNz
dXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7CiAgICAgdW5z
aWduZWQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhV
bmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRh
OwogCkBAIC0zNTcsMTUgKzM0MSwxMyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZv
bnREYXRhSWZOZWVkZWQoKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KHVuc2lnbmVkIHB1cmdlQ291bnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworCiAgICAgTE9HKEZvbnRzLCAiRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEo
JXUpIiwgcHVyZ2VDb3VudCk7CiAKICAgICBwcnVuZVVucmVmZXJlbmNlZEVudHJpZXNGcm9tRm9u
dENhc2NhZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwogCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2Nr
KTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKHB1cmdlQ291bnQpIHsKICAgICAgICAgVmVjdG9yPFJl
ZjxGb250PiwgMjA+IGZvbnRzVG9EZWxldGU7CiAgICAgICAgIGZvciAoYXV0byYgZm9udCA6IGNh
Y2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKQEAgLTQyMSw2ICs0MDMsNyBAQCBzdGF0aWMgYm9vbCBr
ZXlzTWF0Y2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwgY29uc3QgRm9udENhc2NhZGVD
YWNoZUtleSYgYgogCiB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUo
KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtX2ZvbnRDYXNj
YWRlQ2FjaGUuY2xlYXIoKTsKIH0KIApAQCAtNDM3LDEyICs0MjAsMTggQEAgc3RhdGljIEZvbnRD
YXNjYWRlQ2FjaGVLZXkgbWFrZUZvbnRDYXNjYWRlQ2FjaGVLZXkoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYKICAgICB1bnNpZ25lZCBmYW1pbHlDb3VudCA9IGRlc2NyaXB0aW9uLmZhbWls
eUNvdW50KCk7CiAgICAga2V5LmZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmFtaWx5
Q291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmYW1pbHlDb3VudDsgKytpKQot
ICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0
KGkpKTsKKyAgICAgICAga2V5LmZhbWlsaWVzLnVuY2hlY2tlZEFwcGVuZChkZXNjcmlwdGlvbi5m
YW1pbHlBdChpKS5zdHJpbmcoKSk7CiAgICAga2V5LmZvbnRTZWxlY3RvcklkID0gZm9udFNlbGVj
dG9yID8gZm9udFNlbGVjdG9yLT51bmlxdWVJZCgpIDogMDsKICAgICBrZXkuZm9udFNlbGVjdG9y
VmVyc2lvbiA9IGZvbnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMDsKICAg
ICByZXR1cm4ga2V5OwogfQogCitzdGF0aWMgdm9pZCBpc29sYXRlRm9udENhc2NhZGVDYWNoZUtl
eShGb250Q2FzY2FkZUNhY2hlS2V5JiBrZXkpCit7CisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiBr
ZXkuZmFtaWxpZXMpCisgICAgICAgIGZhbWlseSA9IGZhbWlseS5pc29sYXRlZENvcHkoKTsKK30K
Kwogc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVGb250Q2FzY2FkZUNhY2hlSGFzaChjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBrZXkpCiB7CiAgICAgLy8gRklYTUU6IFNob3VsZCBoYXNoIHRoZSBr
ZXkgYW5kIHRoZSBmYW1pbHkgbmFtZSBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuIG1ha2luZyBhIGhh
c2ggb3V0IG9mIG90aGVyIGhhc2hlcy4KQEAgLTQ3OSw2ICs0NjgsNyBAQCBSZWY8Rm9udENhc2Nh
ZGVGb250cz4gRm9udENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENh
c2NhZGVEZXNjcgogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYga2V5c01hdGNoKGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtleSwga2V5KSkKICAgICAgICAgcmV0dXJuIGFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWUtPmZvbnRzLmdldCgpOwogCisgICAgaXNvbGF0ZUZvbnRDYXNj
YWRlQ2FjaGVLZXkoa2V5KTsKICAgICBhdXRvJiBuZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWU7CiAgICAgbmV3RW50cnkgPSBtYWtlVW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVFbnRy
eT4oV1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGUoV1RGTW92ZShmb250U2Vs
ZWN0b3IpKSk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGdseXBocyA9IG5ld0VudHJ5LT5m
b250cy5nZXQoKTsKQEAgLTQ5Nyw2ICs0ODcsNyBAQCBSZWY8Rm9udENhc2NhZGVGb250cz4gRm9u
dENhY2hlOjpyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcgog
CiB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIGZv
bnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9udENhc2NhZGUudXBkYXRlRm9u
dHMocmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
LCBXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKIH0KIApAQCAtNTA3LDkgKzQ5OCw4IEBAIHNpemVf
dCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9u
dENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOworCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwogICAgIGZvciAoYXV0byYgZm9udCA6
IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGZvbnQtPmhhc09uZVJlZigp
KQpAQCAtNTIyLDYgKzUxMiw4IEBAIHN0YXRpYyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+KiBnQ2xp
ZW50czsKIAogdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2spOwor
CiAgICAgaWYgKCFnQ2xpZW50cykKICAgICAgICAgZ0NsaWVudHMgPSBuZXcgSGFzaFNldDxGb250
U2VsZWN0b3IqPjsKIApAQCAtNTMxLDYgKzUyMyw4IEBAIHZvaWQgRm9udENhY2hlOjphZGRDbGll
bnQoRm9udFNlbGVjdG9yJiBjbGllbnQpCiAKIHZvaWQgRm9udENhY2hlOjpyZW1vdmVDbGllbnQo
Rm9udFNlbGVjdG9yJiBjbGllbnQpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnUGxh
dGZvcm1EYXRhQ2FjaGVMb2NrKTsKKwogICAgIEFTU0VSVChnQ2xpZW50cyk7CiAgICAgQVNTRVJU
KGdDbGllbnRzLT5jb250YWlucygmY2xpZW50KSk7CiAKQEAgLTU0Niw2ICs1NDAsOCBAQCB1bnNp
Z25lZCBzaG9ydCBGb250Q2FjaGU6OmdlbmVyYXRpb24oKQogCiB2b2lkIEZvbnRDYWNoZTo6aW52
YWxpZGF0ZSgpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnUGxhdGZvcm1EYXRhQ2Fj
aGVMb2NrKTsKKwogICAgIGlmICghZ0NsaWVudHMpIHsKICAgICAgICAgQVNTRVJUKGZvbnRQbGF0
Zm9ybURhdGFDYWNoZSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU4NSw3ICs1
ODEsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHJld2FybShjb25zdCBQcmV3YXJtSW5mb3JtYXRpb24m
KQogewogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJikKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6
OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IFN0cmluZyYpCiB7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5oCmluZGV4IGRlY2Q2N2VkYWQ2OGM3NzFmMDgyZDhmY2I1NzhjMzEyM2Q1N2Zm
MmUuLjNkZTZhYjI0NDc3MDIwMGViNzZkY2QyNTE1ZDBkMjZiYmJhYWRlZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0zMywxMiArMzMsMTMg
QEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1E
YXRhLmgiCiAjaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWN1cnNpdmVMb2NrQWRhcHRlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
V29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KQEAgLTc5
LDcgKzgwLDcgQEAgc3RydWN0IEZvbnREZXNjcmlwdGlvbktleSB7CiAgICAgICAgIDogbV9zaXpl
KGRlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpCiAgICAgICAgICwgbV9mb250U2VsZWN0
aW9uUmVxdWVzdChkZXNjcmlwdGlvbi5mb250U2VsZWN0aW9uUmVxdWVzdCgpKQogICAgICAgICAs
IG1fZmxhZ3MobWFrZUZsYWdzS2V5KGRlc2NyaXB0aW9uKSkKLSAgICAgICAgLCBtX2xvY2FsZShk
ZXNjcmlwdGlvbi5zcGVjaWZpZWRMb2NhbGUoKSkKKyAgICAgICAgLCBtX2xvY2FsZShkZXNjcmlw
dGlvbi5zcGVjaWZpZWRMb2NhbGUoKS5zdHJpbmcoKSkKICAgICAgICAgLCBtX2ZlYXR1cmVTZXR0
aW5ncyhkZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSkKICAgICAgICAgLCBtX3ZhcmlhdGlv
blNldHRpbmdzKGRlc2NyaXB0aW9uLnZhcmlhdGlvblNldHRpbmdzKCkpCiAgICAgeyB9CkBAIC0x
NTcsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemUgeyAwIH07CiAgICAg
Rm9udFNlbGVjdGlvblJlcXVlc3QgbV9mb250U2VsZWN0aW9uUmVxdWVzdDsKICAgICBzdGQ6OmFy
cmF5PHVuc2lnbmVkLCAyPiBtX2ZsYWdzIHt7IDAsIDAgfX07Ci0gICAgQXRvbVN0cmluZyBtX2xv
Y2FsZTsKKyAgICBTdHJpbmcgbV9sb2NhbGU7CiAgICAgRm9udEZlYXR1cmVTZXR0aW5ncyBtX2Zl
YXR1cmVTZXR0aW5nczsKICAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgbV92YXJpYXRpb25TZXR0
aW5nczsKIH07CkBAIC0xNzgsNyArMTc5LDcgQEAgc3RydWN0IEZvbnREZXNjcmlwdGlvbktleUhh
c2ggewogCiBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtleSB7CiAgICAgRm9udERlc2NyaXB0aW9u
S2V5IGZvbnREZXNjcmlwdGlvbktleTsgLy8gU2hhcmVkIHdpdGggdGhlIGxvd2VyIGxldmVsIEZv
bnRDYWNoZSAoY2FjaGluZyBGb250IG9iamVjdHMpCi0gICAgVmVjdG9yPEF0b21TdHJpbmcsIDM+
IGZhbWlsaWVzOworICAgIFZlY3RvcjxTdHJpbmcsIDM+IGZhbWlsaWVzOwogICAgIHVuc2lnbmVk
IGZvbnRTZWxlY3RvcklkOwogICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvclZlcnNpb247CiB9OwpA
QCAtMjI0LDEyICsyMjUsMTIgQEAgcHVibGljOgogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlz
dHMgc28gQ1NTRm9udFNlbGVjdG9yIGNhbiBoYXZlIGEgdW5pZmllZCBub3Rpb24gb2YgcHJlaW5z
dGFsbGVkIGZvbnRzIGFuZCBAZm9udC1mYWNlLgogICAgIC8vIEl0IGNvbWVzIGludG8gcGxheSB3
aGVuIHlvdSBjcmVhdGUgYW4gQGZvbnQtZmFjZSB3aGljaCBzaGFyZXMgYSBmYW1pbHkgbmFtZSBh
cyBhIHByZWluc3RhbGxlZCBmb250LgotICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0
aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmlu
ZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKKyAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gZ2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0
cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxGb250PiBmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21TdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzID0g
bnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUgPSBmYWxzZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMg
Zm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0g
ZmFsc2UpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250PiBsYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxGb250
PiBmb250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKLSAgICBSZWZQ
dHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5KTsKKyAgICBSZWZQdHI8Rm9udD4gc2ltaWxhckZvbnQoY29uc3QgRm9udERl
c2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHkpOwogCiAgICAgdm9pZCBhZGRDbGllbnQo
Rm9udFNlbGVjdG9yJik7CiAgICAgdm9pZCByZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJik7CkBA
IC0yNDcsNyArMjQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJXaWR0aENhY2hlcygpOwog
CiAjaWYgUExBVEZPUk0oV0lOKQotICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2NyaXB0aW9u
QW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwgQXRvbVN0
cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOworICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwg
U3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUEVOVFlQ
RV9WRVJUSUNBTCkKQEAgLTI4MywxNiArMjg0LDE4IEBAIHByaXZhdGU6CiAgICAgUmVmPEZvbnRD
YXNjYWRlRm9udHM+IHJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAKICAgICAvLyBGSVhNRTogVGhp
cyBtZXRob2Qgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZC4KLSAgICBGb250UGxhdGZvcm1E
YXRhKiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMg
Zm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0g
ZmFsc2UpOworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNo
ZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3Qg
QXRvbVN0cmluZyYgYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJik7Ci0gICAg
c3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBBdG9tU3RyaW5nJik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRG
YWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VD
YXBhYmlsaXRpZXMpOworCisgICAgc3RhdGljIE9wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gYWx0ZXJu
YXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlM
aXRlcmFsPiBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJik7CisKKyAg
ICBSZWN1cnNpdmVMb2NrIG1fbG9jazsKKworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4g
bV9wdXJnZVRpbWVyOwogCi0gICAgVGltZXIgbV9wdXJnZVRpbWVyOwotICAgIAogICAgIGJvb2wg
bV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3NpYmlsaXR5IHsgZmFsc2UgfTsKIAog
ICAgIEZvbnRDYXNjYWRlQ2FjaGUgbV9mb250Q2FzY2FkZUNhY2hlOwpAQCAtMzA5LDcgKzMxMiw3
IEBAIHByaXZhdGU6CiAKIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4g
Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhRm9yVGVzdGluZyhjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQogewot
ICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5
LCBudWxscHRyLCB7IH0pOworICAgIHJldHVybiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5LnN0cmluZygpLCBudWxscHRyLCB7IH0pOwogfQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXggNjZiNmYxM2FkMzMwMmQ2MmRiYzk1MDIz
MDM4ZGJmNDZlMjhjMTkyMC4uOWNlMWE3MmZiMzIzZTkxYTg3ZGVjYTRiMDdmOTUxMWE4NWRiOTc5
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5o
CkBAIC0xNjgsNyArMTY4LDkgQEAgcHVibGljOgogICAgIGludCBlbXBoYXNpc01hcmtIZWlnaHQo
Y29uc3QgQXRvbVN0cmluZyYpIGNvbnN0OwogCiAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQo
KSBjb25zdDsKLSAgICBjb25zdCBGb250UmFuZ2VzJiBmYWxsYmFja1Jhbmdlc0F0KHVuc2lnbmVk
KSBjb25zdDsKKyAgICBib29sIGZhbGxiYWNrUmFuZ2VzQXJlTnVsbCh1bnNpZ25lZCkgY29uc3Q7
CisgICAgY29uc3QgRm9udCogZm9udEZvckNoYXJhY3Rlcih1bnNpZ25lZCBmYWxsYmFja1Jhbmdl
c0luZGV4LCBVQ2hhcjMyKSBjb25zdDsKKyAgICBjb25zdCBGb250JiBmb250Rm9yRmlyc3RSYW5n
ZSgpIGNvbnN0OwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwg
Ym9vbCBtaXJyb3IsIEZvbnRWYXJpYW50ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OwogCiAgICAgY29u
c3QgRm9udCogZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwg
c2l6ZV90IGxlbmd0aCkgY29uc3Q7CkBAIC0zMzYsMTAgKzMzOCwyMiBAQCBpbmxpbmUgY29uc3Qg
Rm9udCYgRm9udENhc2NhZGU6OnByaW1hcnlGb250KCkgY29uc3QKICAgICByZXR1cm4gbV9mb250
cy0+cHJpbWFyeUZvbnQobV9mb250RGVzY3JpcHRpb24pOwogfQogCi1pbmxpbmUgY29uc3QgRm9u
dFJhbmdlcyYgRm9udENhc2NhZGU6OmZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CitpbmxpbmUgYm9vbCBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2ln
bmVkIGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChtX2ZvbnRzKTsKLSAgICByZXR1cm4gbV9m
b250cy0+cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQobV9mb250RGVzY3JpcHRpb24sIGluZGV4KTsK
KyAgICByZXR1cm4gbV9mb250cy0+ZmFsbGJhY2tSYW5nZXNBcmVOdWxsKG1fZm9udERlc2NyaXB0
aW9uLCBpbmRleCk7Cit9CisKK2lubGluZSBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZv
ckNoYXJhY3Rlcih1bnNpZ25lZCBpbmRleCwgVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fZm9udHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5mb250Rm9yQ2hhcmFjdGVy
KG1fZm9udERlc2NyaXB0aW9uLCBpbmRleCwgY2hhcmFjdGVyKTsKK30KKworaW5saW5lIGNvbnN0
IEZvbnQmIEZvbnRDYXNjYWRlOjpmb250Rm9yRmlyc3RSYW5nZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fZm9udHMpOworICAgIHJldHVybiBtX2ZvbnRzLT5mb250Rm9yRmlyc3RSYW5nZShtX2Zv
bnREZXNjcmlwdGlvbik7CiB9CiAKIGlubGluZSBib29sIEZvbnRDYXNjYWRlOjppc0ZpeGVkUGl0
Y2goKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAppbmRleCAxZDI5M2Q3ZjE1OGNkNWMyOWFh
MDJjMzE5MjQ4MDQzZmE3NDY0YWRjLi4xODFhYTNhMzgwM2IyMjk3MWZjMTk4N2VmZDNmYTQwNDgw
ZWNhZTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZURlc2NyaXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcApAQCAtMTAxLDggKzEwMSwxMCBAQCBib29s
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlsaWVzRXF1YWxGb3JUZXh0QXV0b1NpemluZyhj
b25zdCBGb250Q2FzY2FkZURlcwogCiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
IAotYm9vbCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lc0FyZUVxdWFsKGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseTEsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseTIpCitib29sIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgU3RyaW5nJiBm
YW1pbHkxLCBjb25zdCBTdHJpbmcmIGZhbWlseTIpCiB7CisgICAgaWYgKGZhbWlseTEuaXNOdWxs
KCkgfHwgZmFtaWx5Mi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbWlseTEuaXNOdWxsKCkg
JiYgZmFtaWx5Mi5pc051bGwoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZmFtaWx5
MS5zdGFydHNXaXRoKCcuJykpCiAgICAgICAgIHJldHVybiBmYW1pbHkxID09IGZhbWlseTI7CkBA
IC0xMTAsMTcgKzExMiwxNSBAQCBib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5h
bWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29ucwogICAgIHJldHVybiBB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKGZhbWlseTEsIGZhbWlseTIpOwogfQogCi11
bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlOYW1lSGFzaChjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpCit1bnNpZ25lZCBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmYW1pbHlO
YW1lSGFzaChjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5leGlz
dGluZ0hhc2goKTsKLSNlbmRpZgotICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6
Omhhc2goZmFtaWx5KTsKKyAgICByZXR1cm4gQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjpoYXNo
KGZhbWlseS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiBmYW1pbHkpOwogfQogCiBTdHJpbmcg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZh
bWlseSkKIHsKKyAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbWls
eTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZmFtaWx5LnN0YXJ0c1dpdGgoJy4nKSkK
ICAgICAgICAgcmV0dXJuIGZhbWlseTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAppbmRleCAwYTdkZjI1Mjhk
YWM2MmE4YzVhODkwYmQyZGZhNDMwYTIxNGRkN2Y2Li4zNzljYWQ3ZmQ1OGVkMWY3ZDJmMDE1OGE2
ZDMxYTg5MWJjMDYzYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCkBAIC01Nyw4ICs1Nyw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlBdCh1bnNpZ25lZCBpKSBjb25zdCB7
IHJldHVybiBtX2ZhbWlsaWVzW2ldOyB9CiAgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PEF0b21T
dHJpbmc+JiBmYW1pbGllcygpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXM7IH0KIAotICAgIHN0
YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEF0
b21TdHJpbmcmKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhhc2goY29uc3QgQXRv
bVN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGZhbWlseU5hbWVzQXJlRXF1YWwoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHVuc2lnbmVkIGZhbWlseU5hbWVIYXNo
KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBTdHJpbmcgZm9sZGVkRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmKTsKIAogICAgIHVuc2lnbmVkIGVmZmVjdGl2ZUZhbWlseUNvdW50KCkgY29uc3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
Rm9udHMuY3BwCmluZGV4IDJkZGQ2YmRmMTk0Mzg0MTdhZGVhNzExMjQ3ZDIxNzZkNTc2MzUyMzQu
LjZiMjM2NTY4NTBlOGIwMjYxNDRiNzFlZWY5MWU4MWY2YWJkY2I2M2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCkBA
IC0xMDcsMTggKzEwNywyMCBAQCBGb250Q2FzY2FkZUZvbnRzOjpGb250Q2FzY2FkZUZvbnRzKFJl
ZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogfQogCiBGb250Q2FzY2FkZUZvbnRz
OjpGb250Q2FzY2FkZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkK
LSAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQobnVsbHB0cikKKyAgICA6IG1fcmVhbGl6ZWRGYWxs
YmFja1Jhbmdlc1NpemUoMSkKKyAgICAsIG1fY2FjaGVkUHJpbWFyeUZvbnQobnVsbHB0cikKICAg
ICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQogICAgICwgbV9nZW5lcmF0aW9uKEZvbnRDYWNo
ZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQogICAgICwgbV9pc0ZvclBsYXRmb3JtRm9udCh0
cnVlKQogewotICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcyhG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkp
OworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2soRm9udFJhbmdlcyhGb250
Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkpOwog
fQogCiBGb250Q2FzY2FkZUZvbnRzOjp+Rm9udENhc2NhZGVGb250cygpID0gZGVmYXVsdDsKIAog
dm9pZCBGb250Q2FzY2FkZUZvbnRzOjpkZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYo
bV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuZW1wdHkoKSk7CiAgICAgYXV0byYgcHJp
bWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKICAg
ICB1bnNpZ25lZCBudW1SYW5nZXMgPSBwcmltYXJ5UmFuZ2VzLnNpemUoKTsKICAgICBpZiAobnVt
UmFuZ2VzID09IDEpCkBAIC0xMjksNiArMTMxLDcgQEAgdm9pZCBGb250Q2FzY2FkZUZvbnRzOjpk
ZXRlcm1pbmVQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikK
IAogYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0xvYWRpbmdDdXN0b21Gb250cygpIGNvbnN0CiB7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGZvciAoYXV0byYgZm9u
dFJhbmdlcyA6IG1fcmVhbGl6ZWRGYWxsYmFja1JhbmdlcykgewogICAgICAgICBpZiAoZm9udFJh
bmdlcy5pc0xvYWRpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTczLDE0ICsx
NzYsMjEgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwKIAogY29uc3QgRm9udFJhbmdlcyYgRm9u
dENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVkIGluZGV4KQogewotICAgIGlmIChpbmRl
eCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOworICAgIC8vIG1fcmVhbGl6ZWRGYWxsYmFja1Jh
bmdlcyBpcyBhIGxpbmtlZCBsaXN0IGFuZCBpdHMgbGVuZ3RoIG9ubHkgZ3Jvd3MsCisgICAgLy8g
aXQgaXMgbmV2ZXIgb3RoZXJ3aXNlIG1vZGlmaWVkLiBUaGlzIG1lYW5zIHRoYXQgaXQncyBzYWZl
IHRvIGFjY2VzcworICAgIC8vIGV4aXN0aW5nIG5vZGVzIHdpdGhvdXQgdGFraW5nIHRoZSBsb2Nr
LCBzbyB3ZSBhc3NlcnQgdGhhdCB0aGUgbG9jayBpcworICAgIC8vIGhlbGQgYWZ0ZXIgdGhpcyBm
YXN0IHJldHVybiBwYXRoLgorICAgIGlmIChpbmRleCA8IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdl
c1NpemUpIHsKKyAgICAgICAgYXV0byBpdCA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5iZWdp
bigpOworICAgICAgICBzdGQ6OmFkdmFuY2UoaXQsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuICpp
dDsKKyAgICB9CiAKLSAgICBBU1NFUlQoaW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2Vz
LnNpemUoKSk7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CisgICAgQVNTRVJUKGluZGV4
ID09IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1NpemUpOwogICAgIEFTU0VSVChGb250Q2FjaGU6
OnNpbmdsZXRvbigpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwogCi0gICAgbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOwotICAgIGF1dG8mIGZvbnRS
YW5nZXMgPSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOworICAgIGF1dG8gZm9udFJh
bmdlcyA9IEZvbnRSYW5nZXMoKTsKIAogICAgIGlmICghaW5kZXgpIHsKICAgICAgICAgZm9udFJh
bmdlcyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFs
bGJhY2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOwpAQCAtMTg4LDIzICsxOTgsNDIgQEAg
Y29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoY29uc3QgRm9udENhc2NhZGVEZXMKICAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBtX2ZvbnRT
ZWxlY3Rvci0+Zm9udFJhbmdlc0ZvckZhbWlseShkZXNjcmlwdGlvbiwgc3RhbmRhcmRGYW1pbHkp
OwogICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwoKSkKICAgICAgICAgICAgIGZvbnRSYW5n
ZXMgPSBGb250UmFuZ2VzKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkubGFzdFJlc29ydEZhbGxiYWNr
Rm9udChkZXNjcmlwdGlvbikpOwotICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRp
b24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSkKKyAgICAgICAgICAgIGZvbnRSYW5nZXMgPSByZWFs
aXplTmV4dEZhbGxiYWNrKGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgs
IG1fZm9udFNlbGVjdG9yLmdldCgpKTsKKworICAgICAgICBpZiAoZm9udFJhbmdlcy5pc051bGwo
KSAmJiBtX2ZvbnRTZWxlY3RvcikgeworICAgICAgICAgICAgQVNTRVJUKG1fbGFzdFJlYWxpemVk
RmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9IG1fbGFzdFJl
YWxpemVkRmFsbGJhY2tJbmRleCAtIGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCk7
CisgICAgICAgICAgICBpZiAoZm9udFNlbGVjdG9yRmFsbGJhY2tJbmRleCAhPSBtX2ZvbnRTZWxl
Y3Rvci0+ZmFsbGJhY2tGb250Q291bnQoKSkgeworICAgICAgICAgICAgICAgICsrbV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4OworICAgICAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFu
Z2VzKG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVj
dG9yRmFsbGJhY2tJbmRleCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2
ZUZhbWlseUNvdW50KCkpCi0gICAgICAgIGZvbnRSYW5nZXMgPSByZWFsaXplTmV4dEZhbGxiYWNr
KGRlc2NyaXB0aW9uLCBtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXgsIG1fZm9udFNlbGVjdG9y
LmdldCgpKTsKKyAgICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMucHVzaF9iYWNrKFdURk1vdmUo
Zm9udFJhbmdlcykpOworICAgICsrbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZTsKKyAgICBy
ZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmJhY2soKTsKK30KIAotICAgIGlmIChmb250
UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgIEFTU0VSVChtX2xh
c3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPj0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291
bnQoKSk7Citib29sIEZvbnRDYXNjYWRlRm9udHM6OmZhbGxiYWNrUmFuZ2VzQXJlTnVsbChjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lmKG1fbG9jaywgbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzU2l6ZSA8PSBpbmRleCk7CisgICAgcmV0dXJuIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0
KGRlc2NyaXB0aW9uLCBpbmRleCkuaXNOdWxsKCk7Cit9CiAKLSAgICAgICAgdW5zaWduZWQgZm9u
dFNlbGVjdG9yRmFsbGJhY2tJbmRleCA9IG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCAtIGRl
c2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCk7Ci0gICAgICAgIGlmIChmb250U2VsZWN0
b3JGYWxsYmFja0luZGV4ID09IG1fZm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZvbnRSYW5nZXM7Ci0gICAgICAgICsrbV9sYXN0UmVhbGl6ZWRG
YWxsYmFja0luZGV4OwotICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdlcyhtX2ZvbnRTZWxl
Y3Rvci0+ZmFsbGJhY2tGb250QXQoZGVzY3JpcHRpb24sIGZvbnRTZWxlY3RvckZhbGxiYWNrSW5k
ZXgpKTsKLSAgICB9Citjb25zdCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmb250Rm9yQ2hhcmFj
dGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBp
bmRleCwgVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9ja0lm
KG1fbG9jaywgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSA8PSBpbmRleCk7CisgICAgcmV0
dXJuIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRleCkuZm9udEZvckNo
YXJhY3RlcihjaGFyYWN0ZXIpOworfQogCi0gICAgcmV0dXJuIGZvbnRSYW5nZXM7Citjb25zdCBG
b250JiBGb250Q2FzY2FkZUZvbnRzOjpmb250Rm9yRmlyc3RSYW5nZShjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
SWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuZW1wdHkoKSk7CisgICAgcmV0dXJu
IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKS5mb250Rm9yRmlyc3RSYW5n
ZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFyMzIgY2hhcmFjdGVy
LCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKQEAgLTMyMywxMCArMzUy
LDEwIEBAIHN0YXRpYyBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEds
eXBoT3JpZW50YXRpb24oVUNoYXIzMiBjaGFyYWN0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLXN0
YXRpYyBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZvbnRzJiBm
b250Q2FzY2FkZUZvbnRzLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgVUNoYXIzMiBjaGFyYWN0ZXIpCitjb25zdCBGb250KiBGb250Q2FzY2FkZUZvbnRzOjpmaW5k
QmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgVUNoYXIzMiBjaGFyYWN0ZXIpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBmYWxsYmFja0luZGV4
ID0gMDsgOyArK2ZhbGxiYWNrSW5kZXgpIHsKLSAgICAgICAgYXV0byYgZm9udFJhbmdlcyA9IGZv
bnRDYXNjYWRlRm9udHMucmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGZhbGxi
YWNrSW5kZXgpOworICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFu
Z2VzQXQoZGVzY3JpcHRpb24sIGZhbGxiYWNrSW5kZXgpOwogICAgICAgICBpZiAoZm9udFJhbmdl
cy5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBhdXRvKiBjdXJyZW50Rm9u
dCA9IGZvbnRSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgRXh0ZXJuYWxS
ZXNvdXJjZURvd25sb2FkUG9saWN5OjpGb3JiaWQpLmZvbnQ7CkBAIC0zNDIsMTAgKzM3MSwxMCBA
QCBzdGF0aWMgY29uc3QgRm9udCogZmluZEJlc3RGYWxsYmFja0ZvbnQoRm9udENhc2NhZGVGb250
cyYgZm9udENhc2NhZGVGb250cywgY29ucwogCiBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6
Z2x5cGhEYXRhRm9yU3lzdGVtRmFsbGJhY2soVUNoYXIzMiBjaGFyYWN0ZXIsIGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFyaWFudCB2YXJpYW50LCBib29s
IHN5c3RlbUZhbGxiYWNrU2hvdWxkQmVJbnZpc2libGUpCiB7Ci0gICAgY29uc3QgRm9udCogZm9u
dCA9IGZpbmRCZXN0RmFsbGJhY2tGb250KCp0aGlzLCBkZXNjcmlwdGlvbiwgY2hhcmFjdGVyKTsK
KyAgICBjb25zdCBGb250KiBmb250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoZGVzY3JpcHRpb24s
IGNoYXJhY3Rlcik7CiAKICAgICBpZiAoIWZvbnQpCi0gICAgICAgIGZvbnQgPSAmcmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAg
ICAgIGZvbnQgPSAmZm9udEZvckZpcnN0UmFuZ2UoZGVzY3JpcHRpb24pOwogCiAgICAgYXV0byBz
eXN0ZW1GYWxsYmFja0ZvbnQgPSBmb250LT5zeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCBkZXNjcmlwdGlvbiwgbV9pc0ZvclBsYXRmb3JtRm9udCA/IElzRm9yUGxhdGZv
cm1Gb250OjpZZXMgOiBJc0ZvclBsYXRmb3JtRm9udDo6Tm8pOwogICAgIGlmICghc3lzdGVtRmFs
bGJhY2tGb250KQpAQCAtNDg4LDkgKzUxNyw5IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBn
bHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAK
IEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIz
MiBjLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlh
bnQgdmFyaWFudCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCh2
YXJpYW50ICE9IEF1dG9WYXJpYW50KTsKIAorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9s
b2NrKTsKICAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxWYXJpYW50KQogICAgICAgICByZXR1cm4g
Z2x5cGhEYXRhRm9yVmFyaWFudChjLCBkZXNjcmlwdGlvbiwgdmFyaWFudCk7CiAKQEAgLTUxNiw2
ICs1NDUsNyBAQCBHbHlwaERhdGEgRm9udENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYywgY29uc3QgRm9udENhc2NhZGVEZQogCiB2b2lkIEZvbnRDYXNjYWRlRm9u
dHM6OnBydW5lU3lzdGVtRmFsbGJhY2tzKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CiAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tGb250U2V0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIC8vIE11dGFibGUgZ2x5cGggcGFnZXMgbWF5IHJlZmVyZW5jZSBm
YWxsYmFjayBmb250cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRm9udHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlRm9udHMuaAppbmRleCA0NTAxOTQ0NWUzMzM5MGJiODRjYjY2YmE1YzE4M2E1
OGY1YmFkMzhkLi45ODNiMjBmZTE3YmRlYWVmMTU5NmVkYmM2NThlZTMwYjVhYmZkNDMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250
cy5oCkBAIC0yNyw3ICsyNyw5IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAi
V2lkdGhDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaXN0
Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQu
aCIKQEAgLTQzLDcgKzQ1LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIE1peGVkRm9udEdseXBo
UGFnZTsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udENhc2Nh
ZGVGb250cyk7Ci1jbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9u
dENhc2NhZGVGb250cz4geworY2xhc3MgRm9udENhc2NhZGVGb250cyA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoRm9udENhc2NhZGVGb250cyk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9I
RUFQX0lERU5USUZJRVIoRm9udENhc2NhZGVGb250cyk7CiBwdWJsaWM6CkBAIC03MCw3ICs3Miw5
IEBAIHB1YmxpYzoKICAgICBjb25zdCBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aENhY2hlOyB9CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udChjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRm9u
dFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNB
cmVOdWxsKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCB1bnNpZ25lZCk7CisgICAgY29u
c3QgRm9udCogZm9udEZvckNoYXJhY3Rlcihjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwg
dW5zaWduZWQgZmFsbGJhY2tSYW5nZXNJbmRleCwgVUNoYXIzMik7CisgICAgY29uc3QgRm9udCYg
Zm9udEZvckZpcnN0UmFuZ2UoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpOwogCiAgICAg
dm9pZCBwcnVuZVN5c3RlbUZhbGxiYWNrcygpOwogCkBAIC03OCwxMCArODIsMTQgQEAgcHJpdmF0
ZToKICAgICBGb250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYpOwogICAgIEZv
bnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCisgICAgY29uc3QgRm9u
dCogZmluZEJlc3RGYWxsYmFja0ZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIFVD
aGFyMzIpOwogICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMy
LCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlhbnQsIGJvb2wgc3lzdGVt
RmFsbGJhY2tTaG91bGRCZUludmlzaWJsZSk7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclZh
cmlhbnQoVUNoYXIzMiwgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIEZvbnRWYXJpYW50
LCB1bnNpZ25lZCBmYWxsYmFja0luZGV4ID0gMCk7CiAKLSAgICBWZWN0b3I8Rm9udFJhbmdlcywg
MT4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZv
bnRSYW5nZXMmIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja0luZGV4KTsKKworICAgIFN0ZExpc3Q8Rm9udFJhbmdl
cz4gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzOworICAgIHVuc2lnbmVkIG1fcmVhbGl6ZWRGYWxs
YmFja1Jhbmdlc1NpemUgeyAwIH07CiAgICAgdW5zaWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFj
a0luZGV4IHsgMCB9OwogCiAgICAgY2xhc3MgR2x5cGhQYWdlQ2FjaGVFbnRyeSB7CkBAIC0xMTQs
NiArMTIyLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247CiAg
ICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9OwogICAgIGJvb2wgbV9pc0ZvclBsYXRm
b3JtRm9udCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBMb2NrIG1fbG9jazsKIH07CiAKIGlubGlu
ZSBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKQEAgLTEyNSw3ICsxMzQsMTAgQEAgaW5saW5lIGJvb2wg
Rm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mIGRlc2NyaXAKIAogaW5saW5lIGNvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OnByaW1h
cnlGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2FjaGVkUHJpbWFyeUZvbnQpCisg
ICAgICAgIHJldHVybiAqbV9jYWNoZWRQcmltYXJ5Rm9udDsKKworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKICAgICAg
ICAgYXV0byYgcHJpbWFyeVJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0
aW9uLCAwKTsKICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5OjpB
bGxvdykuZm9udDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFhNjM5ODBiNjEwMDZkODVjMmY1MC4u
MWYxZmRiYjBmMWU2YTUwYTQyZjUwNDRlOTIyMDgxN2RlYjJjMGU4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKQEAgLTI3LDcgKzI3LDcg
QEAKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNyArNDMsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0ID0gMDsKIH07CiAKLWNsYXNz
IEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4geworY2xhc3Mg
Rm9udFNlbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4g
ewogcHVibGljOgogICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpID0gZGVmYXVsdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAppbmRleCBjZDBkY2Q0
NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi44Y2Y5Y2RhY2ZiN2FiNGUwZjgxMTE2
OTNiZDU2ZmFjZjVjZDE5NWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAjaW5jbHVkZSAiR2x5cGguaCIKICNp
bmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IEdseXBo
RGF0YSB7CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUgc2V0IG9mIEdseXBo
RGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyByYW5nZSBvZiBjaGFyYWN0ZXJzIGlu
IHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4ZWQKIC8vIHN0YXJ0
aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNoICJzaXplIiBudW1iZXIgb2YgZ2x5
cGhzLgotY2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7Citj
bGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHbHlwaFBhZ2U+IGNyZWF0ZShjb25zdCBGb250JiBm
b250KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggYTA4ODJmN2MyY2Y4
YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZGUxNDcxNmZiMWQ2ZmE1YThhZjU0NTE1Njgw
ZThmZjZmODFhMDE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTEyOSw4ICsx
MjksOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAgICAgICAmJiAoIXByZWZlckNvbG9y
ZWRGb250IHx8IGJhc2VGb250LT5wbGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKSkK
ICAgICAgICAgcmV0dXJuIGJhc2VGb250OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZh
bGxiYWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICBjb25zdCBGb250KiBm
YWxsYmFja0ZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGkp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZmFsbGJhY2tGb250ID0gZm9udEZvckNoYXJh
Y3RlcihpLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZhbGxiYWNrRm9udCB8fCBmYWxsYmFj
a0ZvbnQgPT0gYmFzZUZvbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29y
ZVRleHQuY3BwCmluZGV4IGZhNzdiMzk5NzdkYjk3OGEwNTk3MWI2YzI1YzQxZjM3MmRlNTI0YjEu
LjQwMjkyZjI3MGYyMDk4NzIxNWRlYTZjOThkMzJiMDk5NDZmY2IwYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAKQEAgLTYxOSw3ICs2MTksNyBAQCBSZXRhaW5QdHI8Q1RGb250UmVmPiBwcmVw
YXJlUGxhdGZvcm1Gb250KENURm9udFJlZiBvcmlnaW5hbEZvbnQsIGNvbnN0IEZvbnREZXNjcgog
ICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhvcmlnaW5h
bEZvbnQsIENURm9udEdldFNpemUob3JpZ2luYWxGb250KSwgbnVsbHB0ciwgZGVzY3JpcHRvci5n
ZXQoKSkpOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBBdHRlbXB0IHRv
IGZpbmQgYW4gYXBwcm9wcmlhdGUgZm9udCB1c2luZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBwcmVz
ZW5jZSBvZiBrZXl3b3JkcyBpbgogICAgIC8vIHRoZSByZXF1ZXN0ZWQgbmFtZXMuIEZvciBleGFt
cGxlLCB3ZSdsbCBtYXRjaCBhbnkgbmFtZSB0aGF0IGNvbnRhaW5zICJBcmFiaWMiIHRvIEdlZXph
IFByby4KQEAgLTYyOCwyNyArNjI4LDE5IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0CiAKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFN1YnN0aXR1dGUgdGhlIGRlZmF1bHQgbW9u
b3NwYWNlIGZvbnQgZm9yIHdlbGwta25vd24gbW9ub3NwYWNlIGZvbnRzLgotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKSB7Ci0gICAgICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiY291cmll
ciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuIGZv
bnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGNvdXJpZXIpOwotICAgIH0KKyAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibW9uYWNvIikgfHwgZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibWVubG8iKSkKKyAgICAgICAgcmV0dXJuIGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sICJjb3VyaWVyIl9zKTsKIAogICAgIC8vIFN1YnN0aXR1dGUg
VmVyZGFuYSBmb3IgTHVjaWRhIEdyYW5kZS4KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKSB7Ci0gICAgICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdmVyZGFuYSgidmVyZGFuYSIs
IEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgcmV0dXJuIGZvbnRG
b3JGYW1pbHkoZGVzY3JpcHRpb24sIHZlcmRhbmEpOwotICAgIH0KKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpKQorICAgICAgICBy
ZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgInZlcmRhbmEiX3MpOwogI2VuZGlmCiAK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBhcmFiaWMoTUFLRV9TVEFUSUNfU1RS
SU5HX0lNUEwoIkFyYWJpYyIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBw
YXNodG8oTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlBhc2h0byIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiB1cmR1KE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVcmR1Iikp
OwotICAgIHN0YXRpYyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZw
YXNodG8uZ2V0KCksICZ1cmR1LmdldCgpIH07Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphQm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBmb3IgKFN0cmluZyogbWF0Y2hXb3Jk
IDogbWF0Y2hXb3JkcykgewotICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zSWdub3JpbmdBU0NJ
SUNhc2UoKm1hdGNoV29yZCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPyBnZWV6YUJv
bGQgOiBnZWV6YVBsYWluKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBtYXRj
aFdvcmRzW10gPSB7ICJBcmFiaWMiX3MsICJQYXNodG8iX3MsICJVcmR1Il9zIH07CisgICAgYXV0
byBmYW1pbHlNYXRjaGVyID0gU3RyaW5nVmlldyhmYW1pbHkpOworICAgIGZvciAoYXV0byBtYXRj
aFdvcmQgOiBtYXRjaFdvcmRzKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseU1hdGNoZXIsIFN0cmluZ1ZpZXcobWF0Y2hXb3JkKSkpCisgICAgICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgaXNGb250V2VpZ2h0Qm9sZChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkgPyAiR2VlemFQcm8tQm9sZCJfcyA6ICJHZWV6YVBybyJfcyk7CiAgICAgfQog
ICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMTA4OSwxMCArMTA4MSwxMCBAQCBzdGF0aWMgY29u
c3QgRm9udERhdGFiYXNlOjpJbnN0YWxsZWRGb250KiBmaW5kQ2xvc2VzdEZvbnQoY29uc3QgRm9u
dERhdGFiYXNlOjpJbgogICAgIHJldHVybiAmZmFtaWx5Rm9udHMuaW5zdGFsbGVkRm9udHNbaW5k
ZXhdOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpn
ZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMp
CitWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBhdXRv
JiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0
YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0
YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0
YWxsZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxl
Y3Rpb25Gb3JGYW1pbHkoZmFtaWx5TmFtZS5zdHJpbmcoKSk7CisgICAgY29uc3QgYXV0byYgZm9u
dHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lKTsKICAgICBp
ZiAoZm9udHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4geyB9OwogCkBAIC0xMTA4LDEwICsx
MTAwLDEwIEBAIHN0cnVjdCBGb250TG9va3VwIHsKICAgICBib29sIGNyZWF0ZWRGcm9tUG9zdFNj
cmlwdE5hbWUgeyBmYWxzZSB9OwogfTsKIAotc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250
TG9va3VwV2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWxlY3Rpb25S
ZXF1ZXN0IHJlcXVlc3QsIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93
VXNlckluc3RhbGxlZEZvbnRzKQorc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3Vw
V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVx
dWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCiB7CiAgICAgY29uc3QgYXV0byYgYWxsb3dsaXN0ID0gZm9udEFsbG93bGlzdCgp
OwotICAgIGlmICghaXNTeXN0ZW1Gb250KGZhbWlseS5zdHJpbmcoKSkgJiYgYWxsb3dsaXN0LnNp
emUoKSAmJiAhYWxsb3dsaXN0LmNvbnRhaW5zKGZhbWlseSkpCisgICAgaWYgKCFpc1N5c3RlbUZv
bnQoZmFtaWx5KSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFt
aWx5KSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciB9OwogCiAgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIi5hcHBsZXN5c3RlbXVpZm9udHNlcmlmIikKQEAg
LTExMjMsNyArMTExNSw3IEBAIHN0YXRpYyBGb250TG9va3VwIHBsYXRmb3JtRm9udExvb2t1cFdp
dGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsCiAgICAgfQogCiAgICAg
YXV0byYgZm9udERhdGFiYXNlID0gYWxsb3dVc2VySW5zdGFsbGVkRm9udHMgPT0gQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHM6OlllcyA/IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uQWxsb3dpbmdVc2Vy
SW5zdGFsbGVkRm9udHMoKSA6IEZvbnREYXRhYmFzZTo6c2luZ2xldG9uRGlzYWxsb3dpbmdVc2Vy
SW5zdGFsbGVkRm9udHMoKTsKLSAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRh
YmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseS5zdHJpbmcoKSk7CisgICAgY29uc3QgYXV0
byYgZmFtaWx5Rm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkp
OwogICAgIGlmIChmYW1pbHlGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gVGhlIENTUyBz
cGVjIHN0YXRlcyB0aGF0IGZvbnQtZmFtaWx5IG9ubHkgYWNjZXB0cyBhIG5hbWUgb2YgYW4gYWN0
dWFsIGZvbnQgZmFtaWx5LiBIb3dldmVyLCBpbiBXZWJLaXQsIHdlIGNsYWltIHRvIGFsc28KICAg
ICAgICAgLy8gc3VwcG9ydCBzdXBwbHlpbmcgYSBQb3N0U2NyaXB0IG5hbWUgaW5zdGVhZC4gSG93
ZXZlciwgdGhpcyBjcmVhdGVzIHByb2JsZW1zIHdoZW4gdGhlIG90aGVyIHByb3BlcnRpZXMgKGZv
bnQtd2VpZ2h0LApAQCAtMTE3Nyw3ICsxMTY5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZUZv
bnRDYWNoZSgpCiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5pbnZhbGlkYXRlKCk7CiB9CiAK
LXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxDYXNlKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3Rh
bGxlZEZvbnRzKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3Bl
Y2lhbENhc2UoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cykKIHsKICAgICAvLyBGSVhNRTogU2VlIGNvbW1lbnQgaW4gRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6ZWZmZWN0aXZlRmFtaWx5QXQoKSBpbiBGb250RGVzY3JpcHRpb25D
b2NvYS5jcHAKICAgICBPcHRpb25hbDxTeXN0ZW1Gb250S2luZD4gc3lzdGVtRGVzaWduOwpAQCAt
MTIwNiw3ICsxMTk4LDcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFt
aWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIGlmIChmYW1pbHku
c3RhcnRzV2l0aCgiVUlDVEZvbnRUZXh0U3R5bGUiKSkgewogICAgICAgICBjb25zdCBhdXRvJiBy
ZXF1ZXN0ID0gZm9udERlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCk7CiAgICAgICAg
IENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0cyA9IChpc0ZvbnRXZWlnaHRCb2xkKHJlcXVlc3Qu
d2VpZ2h0KSB8fCBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnNob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHkoKSA/IGtDVEZvbnRUcmFpdEJvbGQgOiAwKSB8IChpc0l0YWxpYyhy
ZXF1ZXN0LnNsb3BlKSA/IGtDVEZvbnRUcmFpdEl0YWxpYyA6IDApOwotICAgICAgICBhdXRvIGRl
c2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZh
bWlseS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNvY29hOjpz
aW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKKyAgICAgICAgYXV0
byBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aFRleHRTdHls
ZShmYW1pbHkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgUmVuZGVyVGhlbWVDb2NvYTo6c2luZ2xl
dG9uKCkuY29udGVudFNpemVDYXRlZ29yeSgpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRMb2Nh
bGUoKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpKSk7CiAgICAgICAgIGlmICh0cmFp
dHMpCiAgICAgICAgICAgICBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3Jl
YXRlQ29weVdpdGhTeW1ib2xpY1RyYWl0cyhkZXNjcmlwdG9yLmdldCgpLCB0cmFpdHMsIHRyYWl0
cykpOwogICAgICAgICByZXR1cm4gY3JlYXRlRm9udEZvckluc3RhbGxlZEZvbnRzKGRlc2NyaXB0
b3IuZ2V0KCksIHNpemUsIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKQEAgLTEyNDAsNyArMTIz
Miw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseVNwZWNpYWxD
YXNlKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCitzdGF0
aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBGb250RmVh
dHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBmbG9hdCBzaXplKQogewogICAgIGlmIChm
YW1pbHkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEyODMsNyArMTI3
NSw3IEBAIHN0YXRpYyB2b2lkIGF1dG9BY3RpdmF0ZUZvbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBD
R0Zsb2F0IHNpemUpCiB9CiAjZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250
RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCiB7CiAgICAgZmxvYXQgc2l6
ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOwogCkBAIC0xMjk2LDcgKzEy
ODgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogCiAgICAgICAgIC8vIEF1dG8gYWN0aXZh
dGUgdGhlIGZvbnQgYmVmb3JlIGxvb2tpbmcgZm9yIGl0IGEgc2Vjb25kIHRpbWUuCiAgICAgICAg
IC8vIElnbm9yZSB0aGUgcmVzdWx0IGJlY2F1c2Ugd2Ugd2FudCB0byB1c2Ugb3VyIG93biBhbGdv
cml0aG0gdG8gYWN0dWFsbHkgZmluZCB0aGUgZm9udC4KLSAgICAgICAgYXV0b0FjdGl2YXRlRm9u
dChmYW1pbHkuc3RyaW5nKCksIHNpemUpOworICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWls
eSwgc2l6ZSk7CiAKICAgICAgICAgZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZhbWlseSwgZm9udERl
c2NyaXB0aW9uLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcywgc2l6ZSk7
CiAgICAgfQpAQCAtMTQyOCw3ICsxNDIwLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lz
dGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3IKICAg
ICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAotY29uc3Qg
QXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hl
OjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQog
ewogICAgIHN0YXRpYyBjb25zdCBVQ2hhciBoZWl0aVN0cmluZ1tdID0geyAweDllZDEsIDB4NGY1
MyB9OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciBzb25ndGlTdHJpbmdbXSA9IHsgMHg1YjhiLCAw
eDRmNTMgfTsKQEAgLTE0MzYsMTAgKzE0MjgsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENh
Y2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwK
ICAgICBzdGF0aWMgY29uc3QgVUNoYXIgd2VpcnVhbllhSGVpU3RyaW5nW10gPSB7IDB4NWZhZSwg
MHg4ZjZmLCAweDk2YzUsIDB4OWVkMSB9OwogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFu
WmhlbmdIZWl0aVN0cmluZ1tdID0geyAweDVmYWUsIDB4OGVkZiwgMHg2YjYzLCAweDllZDEsIDB4
OWFkNCB9OwogCi0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBzb25ndGlTQygiU29uZ3RpIFNDIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gc29uZ3RpVEMoIlNvbmd0aSBUQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJp
bmc+IGhlaXRpU0NSZXBsYWNlbWVudCgiUGluZ0ZhbmcgU0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBoZWl0aVRDUmVwbGFjZW1lbnQoIlBpbmdGYW5nIFRDIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRl
cmFsIHNvbmd0aVNDID0gIlNvbmd0aSBTQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJ
TGl0ZXJhbCBzb25ndGlUQyA9ICJTb25ndGkgVEMiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBB
U0NJSUxpdGVyYWwgaGVpdGlTQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFNDIl9zOworICAgIHN0
YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIGhlaXRpVENSZXBsYWNlbWVudCA9ICJQaW5nRmFu
ZyBUQyJfczsKIAogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgoKSkgewogICAgIGNhc2Ug
MjoKQEAgLTE0NzQsNyArMTQ2Niw3IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxh
dGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CiAKIHZvaWQgYWRkQXR0cmlidXRlc0Zvckluc3RhbGxlZEZvbnRzKENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0cmlidXRlcywgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpCkBAIC0xNTQ3LDcgKzE1MzksNyBAQCBSZWY8Rm9udD4gRm9u
dENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aQogewogICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21l
aG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiAgRm9yIG5vdyB3ZSdsbCBwaWNr
CiAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFu
Z2luZyBhbnkgcHJlZnMuCi0gICAgaWYgKGF1dG8gcmVzdWx0ID0gZm9udEZvckZhbWlseShmb250
RGVzY3JpcHRpb24sIEF0b21TdHJpbmcoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpKSkKKyAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgIlRpbWVzIl9zKSkKICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CiAKICAgICAvLyBM
YXN0UmVzb3J0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQu
aAppbmRleCA5YWJhODlmMjEzNzA3MmQ0M2E4Zjg5OGFkZGQxOGRhZDYyNDkwMzk1Li5lODdiOTYx
N2VkZjkwMjRiNDBkMDdjODExODBmYmQwMDRjZjEzZjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgK
QEAgLTYyLDcgKzYyLDcgQEAgdHlwZWRlZiBIYXNoTWFwPEZvbnRUYWcsIFZhcmlhdGlvbkRlZmF1
bHRzLCBGb3VyQ2hhcmFjdGVyVGFnSGFzaCwgRm91ckNoYXJhY3RlclQKIFJldGFpblB0cjxDVEZv
bnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmLCBjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGFw
cGx5V2VpZ2h0V2lkdGhTbG9wZVZhcmlhdGlvbnMgPSB0cnVlKTsKIGVudW0gY2xhc3MgU2hvdWxk
Q29tcHV0ZVBoeXNpY2FsVHJhaXRzIDogYm9vbCB7IE5vLCBZZXMgfTsKIFN5bnRoZXNpc1BhaXIg
Y29tcHV0ZU5lY2Vzc2FyeVN5bnRoZXNpcyhDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYsIFNob3VsZENvbXB1dGVQaHlzaWNhbFRyYWl0cyA9IFNob3VsZENvbXB1dGVQaHlzaWNhbFRy
YWl0czo6Tm8sIGJvb2wgaXNQbGF0Zm9ybUZvbnQgPSBmYWxzZSk7Ci1SZXRhaW5QdHI8Q1RGb250
UmVmPiBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9u
dFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKK1JldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1p
bHksIEZvbnRTZWxlY3Rpb25SZXF1ZXN0LCBUZXh0UmVuZGVyaW5nTW9kZSwgZmxvYXQgc2l6ZSk7
CiBGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllc0ZvckZvbnREZXNjcmlwdG9y
KENURm9udERlc2NyaXB0b3JSZWYpOwogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9u
dHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRG
b250cyk7CiBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9udHMo
Q1RGb250RGVzY3JpcHRvclJlZiwgQ0dGbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4
dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDZmZjAwYmZiZDU0YTJi
OGExOGVlYzA1ODQ5MDc5MzU0YzAyMTJkYjAuLjJiYjcxMDE1OTBlZWIxNGRlMTRmOTUxYzZiM2Ew
YTNjYTg0MmMyYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0zMTYs
OCArMzE2LDggQEAgY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGUKIAogICAgIGJvb2wgdHJpZWRCYXNl
Q2hhcmFjdGVyRm9udCA9IGZhbHNlOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxi
YWNrUmFuZ2VzQXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICBjb25zdCBGb250KiBmb250
ID0gZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkg
eworICAgICAgICBjb25zdCBGb250KiBmb250ID0gZm9udEZvckNoYXJhY3RlcihpLCBiYXNlQ2hh
cmFjdGVyKTsKICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgY29udGludWU7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBm
MDI3ZWVkMzE3MTQ0NGJjMzZhNDM0NDc2M2I3M2UxMmRiMmEwMjY3Li45YjkwYjA3MjE1NjZkZDQy
ZThlZmVkNDFlNzEzZGY5NDJlMTZmMjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3Bw
CkBAIC0zMTksMzkgKzMxOSwzOCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFs
bGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aQogewogICAgIC8v
IFdlIHdhbnQgdG8gcmV0dXJuIGEgZmFsbGJhY2sgZm9udCBoZXJlLCBvdGhlcndpc2UgdGhlIGxv
Z2ljIHByZXZlbnRpbmcgRm9udENvbmZpZwogICAgIC8vIG1hdGNoZXMgZm9yIG5vbi1mYWxsYmFj
ayBmb250cyBtaWdodCByZXR1cm4gMC4gU2VlIGlzRmFsbGJhY2tGb250QWxsb3dlZC4KLSAgICBz
dGF0aWMgQXRvbVN0cmluZyB0aW1lc1N0cigic2VyaWYiKTsKLSAgICBpZiAoUmVmUHRyPEZvbnQ+
IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgdGltZXNTdHIpKQotICAgICAg
ICByZXR1cm4gKmZvbnQ7CisgICAgaWYgKFJlZlB0cjxGb250PiBmb250ID0gZm9udEZvckZhbWls
eShmb250RGVzY3JpcHRpb24sICJzZXJpZiJfcykpCisgICAgICAgIHJldHVybiBmb250LnJlbGVh
c2VOb25OdWxsKCk7CiAKICAgICAvLyBUaGlzIGNvdWxkIGJlIHJlYWNoZWQgZHVlIHRvIGltcHJv
cGVybHktaW5zdGFsbGVkIG9yIG1pc2NvbmZpZ3VyZWQgZm9udGNvbmZpZy4KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
c0luRmFtaWx5KGNvbnN0IFN0cmluZyYsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAg
IHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0RmFtaWx5TmFtZVN0cmluZ0Zyb21G
YW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KQorc3RhdGljIFN0cmluZyBnZXRGYW1pbHlO
YW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSkKIHsKICAgICAvLyBJZiB3
ZSdyZSBjcmVhdGluZyBhIGZhbGxiYWNrIGZvbnQgKGUuZy4gIi13ZWJraXQtbW9ub3NwYWNlIiks
IGNvbnZlcnQgdGhlIG5hbWUgaW50bwogICAgIC8vIHRoZSBmYWxsYmFjayBuYW1lIChsaWtlICJt
b25vc3BhY2UiKSB0aGF0IGZvbnRjb25maWcgdW5kZXJzdGFuZHMuCiAgICAgaWYgKGZhbWlseS5s
ZW5ndGgoKSAmJiAhZmFtaWx5LnN0YXJ0c1dpdGgoIi13ZWJraXQtIikpCi0gICAgICAgIHJldHVy
biBmYW1pbHkuc3RyaW5nKCk7CisgICAgICAgIHJldHVybiBmYW1pbHk7CiAKLSAgICBpZiAoZmFt
aWx5ID09IHN0YW5kYXJkRmFtaWx5IHx8IGZhbWlseSA9PSBzZXJpZkZhbWlseSkKKyAgICBpZiAo
ZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWls
eU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5KSkgfHwgZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0
YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6OlNlcmlmRmFtaWx5
KSkpCiAgICAgICAgIHJldHVybiAic2VyaWYiOwotICAgIGlmIChmYW1pbHkgPT0gc2Fuc1Nlcmlm
RmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U2Fuc1NlcmlmRmFtaWx5KSkpCiAgICAgICAg
IHJldHVybiAic2Fucy1zZXJpZiI7Ci0gICAgaWYgKGZhbWlseSA9PSBtb25vc3BhY2VGYW1pbHkp
CisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2ln
bmVkPihGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VGYW1pbHkpKSkKICAgICAgICAgcmV0dXJu
ICJtb25vc3BhY2UiOwotICAgIGlmIChmYW1pbHkgPT0gY3Vyc2l2ZUZhbWlseSkKKyAgICBpZiAo
ZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWls
eU5hbWVzSW5kZXg6OkN1cnNpdmVGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJjdXJzaXZlIjsK
LSAgICBpZiAoZmFtaWx5ID09IGZhbnRhc3lGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1p
bHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpG
YW50YXN5RmFtaWx5KSkpCiAgICAgICAgIHJldHVybiAiZmFudGFzeSI7CiAKICNpZiBQTEFURk9S
TShHVEspCi0gICAgaWYgKGZhbWlseSA9PSBzeXN0ZW1VaUZhbWlseSB8fCBmYW1pbHkgPT0gIi13
ZWJraXQtc3lzdGVtLWZvbnQiKQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5h
dChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U3lzdGVtVWlGYW1pbHkp
KSB8fCBmYW1pbHkgPT0gIi13ZWJraXQtc3lzdGVtLWZvbnQiKQogICAgICAgICByZXR1cm4gZGVm
YXVsdEd0a1N5c3RlbUZvbnQoKTsKICNlbmRpZgogCkBAIC01MDAsNyArNDk5LDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzQ29tbW9ubHlVc2VkR2VuZXJpY0ZhbWlseShjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWVTdHJpbmcpCiAgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KGZhbWlseU5hbWVTdHJpbmcsICJjdXJzaXZlIik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxGb250
UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRh
PiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVy
ZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJp
bGl0aWVzKQogewogICAgIC8vIFRoZSBDU1MgZm9udCBtYXRjaGluZyBhbGdvcml0aG0gKGh0dHA6
Ly93d3cudzMub3JnL1RSL2NzczMtZm9udHMvI2ZvbnQtbWF0Y2hpbmctYWxnb3JpdGhtKQogICAg
IC8vIHNheXMgdGhhdCB3ZSBtdXN0IGZpbmQgYW4gZXhhY3QgbWF0Y2ggZm9yIGZvbnQgZmFtaWx5
LCBzbGFudCAoaXRhbGljIG9yIG9ibGlxdWUgY2FuIGJlIHVzZWQpCkBAIC01OTksOSArNTk4LDkg
QEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhOwogfQog
Ci1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBBdG9tU3RyaW5nJikKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpw
bGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJikKIHsKLSAgICByZXR1cm4g
bnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiAjaWYgRU5BQkxFKFZB
UklBVElPTl9GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpp
bmRleCA0NTExMDdiYmI0NjViZGUzOTU0NDlkYzA3OGQ4MDVhOGUxNjRmOGE0Li5jOGMxODEwNDgz
NGJiYzNkYWM1YWUzNmM2MzBlNGM1Mzc0OGM3NTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlckNvcmVUZXh0Lm1tCkBAIC0xMjUsOSArMTI1LDkgQEAgdm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjcCwKICAgICAgICAgaXNTeXN0ZW1GYWxsYmFjayA9IHRydWU7CiAKICAgICAgICAgVTE2X0dF
VChjcCwgMCwgMCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgZm9udCA9IG1fZm9u
dC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Cisg
ICAgICAgIGZvbnQgPSBtX2ZvbnQuZm9udEZvckNoYXJhY3RlcigwLCBiYXNlQ2hhcmFjdGVyKTsK
ICAgICAgICAgaWYgKCFmb250KQotICAgICAgICAgICAgZm9udCA9ICZtX2ZvbnQuZmFsbGJhY2tS
YW5nZXNBdCgwKS5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgICAgICAgICAgZm9udCA9ICZtX2Zv
bnQuZm9udEZvckZpcnN0UmFuZ2UoKTsKICAgICAgICAgc3RyaW5nQXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZUNvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwg
Zm9udC0+Z2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKG1fZm9udC5lbmFibGVLZXJuaW5nKCksIGZvbnQt
PnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCksIG1fZm9udC5mb250RGVzY3JpcHRpb24oKS5j
b21wdXRlZExvY2FsZSgpKS5nZXQoKSkpOwogICAgICAgICAvLyBXZSBkb24ndCBrbm93IHdoaWNo
IGZvbnQgc2hvdWxkIGJlIHVzZWQgdG8gcmVuZGVyIHRoaXMgZ3JhcGhlbWUgY2x1c3Rlciwgc28g
ZW5hYmxlIENvcmVUZXh0J3MgZmFsbGJhY2sgbWVjaGFuaXNtIGJ5IHVzaW5nIHRoZSBDVEZvbnQg
d2hpY2ggZG9lc24ndCBoYXZlIENvcmVUZXh0J3MgZmFsbGJhY2sgZGlzYWJsZWQuCiAgICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGNvbnN0X2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4o
c3RyaW5nQXR0cmlidXRlcy5nZXQoKSksIGtDVEZvbnRBdHRyaWJ1dGVOYW1lLCBmb250LT5wbGF0
Zm9ybURhdGEoKS5mb250KCkpOwpAQCAtMTg3LDggKzE4Nyw4IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY3AsCiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBydW5Gb250RXF1YWxpdHlP
YmplY3QgPSBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKHJ1bkNURm9u
dCk7CiAgICAgICAgICAgICBpZiAoIVdURjo6c2FmZUNGRXF1YWwocnVuRm9udEVxdWFsaXR5T2Jq
ZWN0LmdldCgpLCBmb250LT5wbGF0Zm9ybURhdGEoKS5vYmplY3RGb3JFcXVhbGl0eUNoZWNrKCku
Z2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQmVnaW4gdHJ5aW5nIHRvIHNlZSBpZiBydW5G
b250IG1hdGNoZXMgYW55IG9mIHRoZSBmb250cyBpbiB0aGUgZmFsbGJhY2sgbGlzdC4KLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQo
aSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBydW5Gb250ID0gbV9mb250
LmZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhbV9mb250LmZhbGxiYWNrUmFuZ2Vz
QXJlTnVsbChpKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQu
Zm9udEZvckNoYXJhY3RlcihpLCBiYXNlQ2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFydW5Gb250KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChXVEY6OnNhZmVDRkVxdWFsKHJ1bkZvbnQtPnBsYXRmb3JtRGF0YSgp
Lm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSwgcnVuRm9udEVxdWFsaXR5T2JqZWN0Lmdl
dCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDYWNoZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2Mzgy
ZjYxMy4uN2Y1NzIzMmUwN2QyNTA3YjQ5NGY2MTg5ZTFmYmQ0YTZlYjhkMmU4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5j
cHAKQEAgLTM2Miw5ICszNjIsOSBAQCBib29sIEZvbnRDYWNoZTo6aXNTeXN0ZW1Gb250Rm9yYmlk
ZGVuRm9yRWRpdGluZyhjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVm
UHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIEF0
b21TdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9u
dEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IExPR0ZPTlQmIGZvbnQsIFN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUp
CiB7Ci0gICAgQXRvbVN0cmluZyBmYW1pbHlOYW1lKGZvbnQubGZGYWNlTmFtZSwgd2Nzbmxlbihm
b250LmxmRmFjZU5hbWUsIExGX0ZBQ0VTSVpFKSk7CisgICAgU3RyaW5nIGZhbWlseU5hbWUoZm9u
dC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKICAg
ICBSZWZQdHI8Rm9udD4gZm9udERhdGEgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwg
ZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZvbnREYXRhKQogICAgICAgICBvdXRGb250RmFtaWx5TmFt
ZSA9IGZhbWlseU5hbWU7CkBAIC0zNzMsNTYgKzM3Myw1NyBAQCBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbgogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQogewotICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gZmFsbGJhY2tGb250TmFtZTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBmYWxsYmFja0ZvbnROYW1lOworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZd
KCkgeworICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBn
ZXQgdGhlIHVzZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4gRm9yIG5vdyB3ZSdsbCBwaWNrCisgICAg
ICAgIC8vIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdp
bmcgYW55IHByZWZzLgorCisgICAgICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWlu
c3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMuCisgICAgICAgIC8vIFNvcnRlZCBieSBtb3N0IHRv
IGxlYXN0IGdseXBocyBhY2NvcmRpbmcgdG8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9V
bmljb2RlX3R5cGVmYWNlcworICAgICAgICAvLyBTdGFydCB3aXRoIFRpbWVzIE5ldyBSb21hbiBh
bHNvIHNpbmNlIGl0IGlzIHRoZSBkZWZhdWx0IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2hhbmdlIHBy
ZWZzLgorICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBmYWxsYmFj
a0ZvbnRzW10gPSB7CisgICAgICAgICAgICBTdHJpbmcoIlRpbWVzIE5ldyBSb21hbiIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJNaWNyb3NvZnQg
U2FucyBTZXJpZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAg
U3RyaW5nKCJUYWhvbWEiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
ICAgIFN0cmluZygiTHVjaWRhIFNhbnMgVW5pY29kZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJBcmlhbCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpCisgICAgICAgIH07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RG
X0FSUkFZX0xFTkdUSChmYWxsYmFja0ZvbnRzKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoZm9u
dEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udHNbaV0pKSB7CisgICAgICAg
ICAgICAgICAgZmFsbGJhY2tGb250TmFtZS5nZXQoKSA9IGZhbGxiYWNrRm9udHNbaV07CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICBpZiAo
IWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gKmZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnROYW1lKTsKKyAgICAgICAgLy8g
RmFsbCBiYWNrIHRvIHRoZSBERUZBVUxUX0dVSV9GT05UIGlmIG5vIGtub3duIFVuaWNvZGUgZm9u
dHMgYXJlIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKEhGT05UIGRlZmF1bHRHVUlGb250ID0gc3Rh
dGljX2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpKSkgeworICAg
ICAgICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJTG9nRm9udDsKKyAgICAgICAgICAgIEdldE9iamVj
dChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1bHRHVUlM
b2dGb250KTsKKyAgICAgICAgICAgIGlmIChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChm
b250RGVzY3JpcHRpb24sIGRlZmF1bHRHVUlMb2dGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJl
LiAgRm9yIG5vdyB3ZSdsbCBwaWNrCi0gICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3
b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCi0KLSAgICAvLyBTZWFyY2ggYWxs
IHR5cGljYWwgV2luZG93cy1pbnN0YWxsZWQgZnVsbCBVbmljb2RlIGZvbnRzLgotICAgIC8vIFNv
cnRlZCBieSBtb3N0IHRvIGxlYXN0IGdseXBocyBhY2NvcmRpbmcgdG8gaHR0cDovL2VuLndpa2lw
ZWRpYS5vcmcvd2lraS9Vbmljb2RlX3R5cGVmYWNlcwotICAgIC8vIFN0YXJ0IHdpdGggVGltZXMg
TmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIHVzZXIgZG9lc24n
dCBjaGFuZ2UgcHJlZnMuCi0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnRzW10gPSB7Ci0gICAgICAgIEF0b21TdHJpbmcoIlRp
bWVzIE5ldyBSb21hbiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAg
ICAgQXRvbVN0cmluZygiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCi0gICAgICAgIEF0b21TdHJpbmcoIlRhaG9tYSIsIEF0b21TdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiTHVjaWRhIFNhbnMg
VW5pY29kZSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRv
bVN0cmluZygiQXJpYWwiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKLSAgICB9
OwotICAgIFJlZlB0cjxGb250PiBzaW1wbGVGb250OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgV1RGX0FSUkFZX0xFTkdUSChmYWxsYmFja0ZvbnRzKTsgKytpKSB7Ci0gICAgICAgIGlmIChz
aW1wbGVGb250ID0gZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udHNb
aV0pKSB7Ci0gICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lLmdldCgpID0gZmFsbGJhY2tGb250
c1tpXTsKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKKyAgICAgICAgLy8gRmFsbCBi
YWNrIHRvIE5vbi1jbGllbnQgbWV0cmljcyBmb250cy4KKyAgICAgICAgTk9OQ0xJRU5UTUVUUklD
UyBub25DbGllbnRNZXRyaWNzIHsgfTsKKyAgICAgICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUg
PSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7CisgICAgICAgIGlmIChTeXN0ZW1QYXJhbWV0ZXJz
SW5mbyhTUElfR0VUTk9OQ0xJRU5UTUVUUklDUywgc2l6ZW9mKG5vbkNsaWVudE1ldHJpY3MpLCAm
bm9uQ2xpZW50TWV0cmljcywgMCkpIHsKKyAgICAgICAgICAgIGlmIChmb250RnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZNZXNzYWdl
Rm9udCwgZmFsbGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
bm9uQ2xpZW50TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFs
bGJhY2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYg
KGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50
TWV0cmljcy5sZkNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQo
Zm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJh
Y2tGb250TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfQor
ICAgIH0pOwogCi0gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBERUZBVUxUX0dVSV9GT05UIGlmIG5v
IGtub3duIFVuaWNvZGUgZm9udHMgYXJlIGF2YWlsYWJsZS4KLSAgICBpZiAoSEZPTlQgZGVmYXVs
dEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlf
Rk9OVCkpKSB7Ci0gICAgICAgIExPR0ZPTlQgZGVmYXVsdEdVSUxvZ0ZvbnQ7Ci0gICAgICAgIEdl
dE9iamVjdChkZWZhdWx0R1VJRm9udCwgc2l6ZW9mKGRlZmF1bHRHVUlMb2dGb250KSwgJmRlZmF1
bHRHVUlMb2dGb250KTsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIGRlZmF1bHRHVUlMb2dGb250LCBmYWxsYmFj
a0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAgICB9CisgICAg
aWYgKCFmYWxsYmFja0ZvbnROYW1lLmdldCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICpm
b250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250TmFtZSk7CiAKLSAgICAv
LyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRzLgotICAgIE5PTkNMSUVOVE1F
VFJJQ1Mgbm9uQ2xpZW50TWV0cmljcyB7IH07Ci0gICAgbm9uQ2xpZW50TWV0cmljcy5jYlNpemUg
PSBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyk7Ci0gICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZv
KFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25D
bGllbnRNZXRyaWNzLCAwKSkgewotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1l
c3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxl
Rm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZNZW51Rm9udCwgZmFsbGJh
Y2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0
aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU3RhdHVzRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0g
ICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0g
Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRN
ZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0
dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZlNtQ2Fw
dGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVG
b250OwotICAgIH0KLSAgICAKICAgICBhdXRvIGhGb250ID0gYWRvcHRHRElPYmplY3Qoc3RhdGlj
X2Nhc3Q8SEZPTlQ+KEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpKSk7CiAgICAgRm9u
dFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoV1RGTW92ZShoRm9udCksIGZvbnREZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICByZXR1cm4g
Zm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpOwpAQCAtNTEyLDcgKzUxMyw3IEBAIHN0
YXRpYyBpbnQgQ0FMTEJBQ0sgbWF0Y2hJbXByb3ZpbmdFbnVtUHJvYyhDT05TVCBMT0dGT05UKiBj
YW5kaWRhdGUsIENPTlNUIFRFWFRNCiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBHRElPYmpl
Y3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRl
c2lyZWRXZWlnaHQsIGJvb2wgZGVzaXJlZEl0YWxpYywgaW50IHNpemUsIGJvb2wgc3ludGhlc2l6
ZUl0YWxpYykKK3N0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQoY29uc3QgU3Ry
aW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRhbGljLCBpbnQg
c2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQogewogICAgIEhXbmREQyBoZGMoMCk7CiAKQEAg
LTU3MCwxMiArNTcxLDEyIEBAIHN0YXRpYyBHRElPYmplY3Q8SEZPTlQ+IGNyZWF0ZUdESUZvbnQo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBMT05HIGRlc2lyZWRXZWlnCiB9CiAKIHN0cnVjdCBU
cmFpdHNJbkZhbWlseVByb2NEYXRhIHsKLSAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0
IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCisgICAgVHJhaXRzSW5GYW1pbHlQcm9jRGF0YShjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgICAgIDogbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUp
CiAgICAgewogICAgIH0KIAotICAgIGNvbnN0IEF0b21TdHJpbmcmIG1fZmFtaWx5TmFtZTsKKyAg
ICBjb25zdCBTdHJpbmcmIG1fZmFtaWx5TmFtZTsKICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CiB9OwogCkBAIC02MjYsNyArNjI3LDcgQEAgc3Rh
dGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGxv
Z0ZvbnQsIENPTlNUIFRFWFRNRVQKICAgICByZXR1cm4gMTsKIH0KIAotVmVjdG9yPEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
c0luRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKQorVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0
Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFt
ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAt
NjQ2LDcgKzY0Nyw3IEBAIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2Fj
aGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlsCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiwg
Rm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcykKK3N0ZDo6dW5pcXVlX3B0cjxGb250
UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RmVhdHVyZVNldHRpbmdzKiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cykKIHsKICAgICBib29sIGlzTHVjaWRhR3JhbmRlID0gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAibHVjaWRhIGdyYW5kZSIpOwogCkBAIC02OTIsMTEgKzY5Myw4IEBAIHN0
ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY29uc3QgQXRv
bVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWx5TmFtZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjpw
bGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gdGlt
ZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gbWljcm9zb2Z0U2Fuc1NlcmlmKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLQogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5n
dGgoKSkgewogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRz
LCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxs
b3cgVGltZXMgTmV3IFJvbWFuIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQg
TVMgU2VyaWYsCkBAIC03MDUsNyArNzAzLDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hl
OjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAg
ICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSA4Ogog
ICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgIm1z
IHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAg
IHJldHVybiAiVGltZXMgTmV3IFJvbWFuIl9zOwogICAgICAgICBicmVhazsKICAgICAvLyBPbiBX
aW5kb3dzLCB3ZSBkb24ndCBzdXBwb3J0IGJpdG1hcCBmb250cywgYnV0IGxlZ2FjeSBjb250ZW50
IGV4cGVjdHMgc3VwcG9ydC4KICAgICAvLyBUaHVzIHdlIGFsbG93IE1pY3Jvc29mdCBTYW5zIFNl
cmlmIGFzIGFuIGFsdGVybmF0aXZlIGZvciB0aGUgYml0bWFwIGZvbnQgTVMgU2FucyBTZXJpZiwK
QEAgLTcxNCwxMCArNzEyLDEwIEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZv
cm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlsCiAgICAgLy8gd291
bGQgbmVlZCBpdCBvbiBvdGhlciBwbGF0Zm9ybXMgdG9vLgogICAgIGNhc2UgMTM6CiAgICAgICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2FucyBz
ZXJpZiIpKQotICAgICAgICAgICAgcmV0dXJuIG1pY3Jvc29mdFNhbnNTZXJpZjsKKyAgICAgICAg
ICAgIHJldHVybiAiTWljcm9zb2Z0IFNhbnMgU2VyaWYiX3M7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCmluZGV4
IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1MDNjNjI0ZmFlYTAxYjUuLjU1ZjFiMWFmN2ZhMWQ5
YzkyNmEwMTc2MDkyNTQxYmZiYTA3NmJkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVk
PFNhbWVTaXplQXNCaWRpQ29udGV4dD4geworc3RydWN0IFNhbWVTaXplQXNCaWRpQ29udGV4dCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTYW1lU2l6ZUFzQmlkaUNvbnRleHQ+IHsKICAg
ICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxNjsKICAgICB2b2lkKiBwYXJlbnQ7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCmluZGV4IGQ0YzRlNTcwOGEwZDQy
Y2I5Y2I0NzFhMmMwNjk2NzBkMzliZDM0ZDEuLjVhOGQ5MDllZWE5MWI2MTllNTM5NDY5ZmRhY2Zj
NGYzYTI2MDNkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmgKQEAgLTIyLDE1ICsyMiwxNSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogZW51bSBCaWRpRW1iZWRkaW5nU291cmNlIHsgRnJvbVN0eWxlT3JET00s
IEZyb21Vbmljb2RlIH07CiAKIC8vIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBleHBsaWNpdCBlbWJl
ZGRpbmdzLgotY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxCaWRpQ29udGV4
dD4geworY2xhc3MgQmlkaUNvbnRleHQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Qmlk
aUNvbnRleHQ+IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEJpZGlD
b250ZXh0PiBjcmVhdGUodW5zaWduZWQgY2hhciBsZXZlbCwgVUNoYXJEaXJlY3Rpb24sIGJvb2wg
b3ZlcnJpZGUgPSBmYWxzZSwgQmlkaUVtYmVkZGluZ1NvdXJjZSA9IEZyb21TdHlsZU9yRE9NLCBC
aWRpQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAKaW5kZXggMWFmM2M5MjA3MWI4ZTA0MzNkNWIw
OTcyZGM1ZDgyNTk2MzgwM2RkZi4uZDJhZmQ4YzJjNDdjNzI3NTRiM2Q2YjZiNWQ2NzkyOWUzNDI5
NjQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJh
dy5jcHAKQEAgLTQ4LDEwICs0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2Ug
U3R5bGUgewogCiB1c2luZyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1lczsKIAotc3RhdGljIGJvb2wgdXNlRml4
ZWREZWZhdWx0U2l6ZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKQorc3RhdGljIGJvb2wgdXNl
Rml4ZWREZWZhdWx0U2l6ZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24pCiB7Ci0gICAgcmV0dXJuIGZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpID09IDEg
JiYgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkgPT0gZm9udFNlbGVjdG9yLmZhbWlseU5h
bWUoV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VGYW1p
bHkpOworICAgIHJldHVybiBmb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSA9PSAxICYmIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpOwogfQog
CiBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYg
Zm9udFJhdywgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKQEAgLTYxLDcgKzYyLDcgQEAgT3B0aW9uYWw8Rm9u
dENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRD
YXNjYWRlRGVzY3IKIAogICAgIC8vIEZvbnQgZmFtaWx5IGFwcGxpZWQgaW4gdGhlIHNhbWUgd2F5
IGFzIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkKICAgICAvLyBCZWZv
cmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0
IHRoZSBnZW5lcmljIGZhbWlseS4KLSAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRT
aXplID0gdXNlRml4ZWREZWZhdWx0U2l6ZShmb250RGVzY3JpcHRpb24sICpjb250ZXh0LmZvbnRT
ZWxlY3RvcigpKTsKKyAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0gdXNl
Rml4ZWREZWZhdWx0U2l6ZShmb250RGVzY3JpcHRpb24pOwogCiAgICAgVmVjdG9yPEF0b21TdHJp
bmc+IGZhbWlsaWVzOwogICAgIGZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFJh
dy5mYW1pbHkuc2l6ZSgpKTsKQEAgLTcyLDcgKzczLDcgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+
IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVz
Y3IKICAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CiAgICAg
ICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7CiAg
ICAgICAgICAgICBpZiAoaXNHZW5lcmljRmFtaWx5KQotICAgICAgICAgICAgICAgIGZhbWlseSA9
IGNvbnRleHQuZm9udFNlbGVjdG9yKCktPmZhbWlseU5hbWUoQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzOjpnZW5lcmljRm9udEZhbWlseUluZGV4RnJvbVZhbHVlSUQoaWRlbnQpKTsKKyAgICAgICAg
ICAgICAgICBmYW1pbHkgPSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVk
PihDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5SW5kZXhGcm9tVmFs
dWVJRChpZGVudCkpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmYW1pbHkg
PSBBdG9tU3RyaW5nKGNvbnRleHQuc2V0dGluZ3NWYWx1ZXMoKS5mb250R2VuZXJpY0ZhbWlsaWVz
LnN0YW5kYXJkRm9udEZhbWlseSgpKTsKICAgICAgICAgfSwgWyZdIChjb25zdCBTdHJpbmcmIGZh
bWlseVN0cmluZykgewpAQCAtOTAsNyArOTEsNyBAQCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVz
b2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNjcgog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1p
bGllcyhmYW1pbGllcyk7CiAKLSAgICBpZiAodXNlRml4ZWREZWZhdWx0U2l6ZShmb250RGVzY3Jp
cHRpb24sICpjb250ZXh0LmZvbnRTZWxlY3RvcigpKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSkgeworICAgIGlmICh1c2VGaXhlZERlZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbikg
IT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKICAgICAgICAgaWYgKENTU1ZhbHVl
SUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZp
ZXIoKSkgewogICAgICAgICAgICAgYXV0byBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29y
ZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplLCBjb250ZXh0
LnNldHRpbmdzVmFsdWVzKCkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424128</attachid>
            <date>2021-03-24 06:03:21 -0700</date>
            <delta_ts>2021-03-24 06:09:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210324130320.patch</filename>
            <type>text/plain</type>
            <size>85491</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ5YTY5YjI4NWQ2ZTFj
MTE3ZmYwN2FlYTY4ZTIyZTg1MTVjNWVhNi4uNGMxMDA4ZTA0ZWMxZDU2ZGE1MDZhMDljMDc3NTdh
ZDRkYmU4MDU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTAzLTI0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGNzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDogUmVtb3ZlIHVzZSBv
ZiBBdG9tU3RyaW5nIGZvciBmYW1pbHkgbmFtZSBpbgorICAgICAgICAgICAgZm9udCByZXNvbHV0
aW9uLgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOiBNb3ZlIHRocmVhZCBhc3Nl
cnRpb24gaW4gZGVzdHJ1Y3RvciB0bworICAgICAgICAgICAgYWZ0ZXIgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBudWxsIGNoZWNrLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
TWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOiBJ
bnRyb2R1Y2UgbG9ja2luZywgcmVwbGFjZSB1c2Ugb2YKKyAgICAgICAgICAgIEF0b21TdHJpbmcg
d2l0aCBTdHJpbmcgYW5kIG1ha2UgaXNvbGF0ZWQgY29waWVzIGluc3RlYWQgb2YgdGFraW5nCisg
ICAgICAgICAgICByZWZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgYWNjZXNzZWQgYWNyb3NzIHRocmVh
ZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4K
KyAgICAgICAgICAgIEZvbnRDYXNjYWRlRm9udHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOiBBZGFwdCB0byBBUEkgY2hhbmdlcworICAgICAg
ICAgICAgYW5kIHJlbW92ZSBDb2NvYSBmYXN0LXBhdGggdGhhdCBpcyBubyBsb25nZXIgdmFsaWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOiBEb24ndCBhc3NlcnQg
bWFpbiB0aHJlYWQgYW5kCisgICAgICAgICAgICBpbnRyb2R1Y2UgbG9ja2luZyBhcm91bmQgbWVt
YmVyIHZhcmlhYmxlIEkvTy4gTG9jay1mcmVlIGFjY2VzcyBpcworICAgICAgICAgICAgbWFpbnRh
aW5lZCB3aGVyZSBwb3NzaWJsZS4KKyAgICAgICAgICAgIFJlbW92ZSBhY2Nlc3MgdG8gRm9udFJh
bmdlcyBhbmQgaW5zdGVhZCBleHBvc2UgdGhlIG1ldGhvZHMgdXNlZCBvbgorICAgICAgICAgICAg
dGhlbSBzbyB0aGF0IHRoZWlyIHJlZmVyZW5jZSByZW1haW5zIGFzc29jaWF0ZWQgb25seSB3aXRo
IHRoZSBwYXJlbnQKKyAgICAgICAgICAgIEZvbnRDYXNjYWRlRm9udHMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmg6IE1ha2UgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmg6IE1ha2UgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYXNj
YWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5oOiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6IEFk
YXB0IHRvIGNoYW5nZXMKKyAgICAgICAgICAgIGluIEZvbnRDYXNjYWRlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbTogQWRhcHQgdG8gY2hh
bmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAg
ICAgIEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmg6IE1ha2UgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDogUmVw
bGFjZSB1c2Ugb2YgcmVtb3ZlZAorICAgICAgICAgICAgQ1NTRm9udFNlbGVjdG9yOjpmYW1pbHlO
YW1lLgorCiAyMDIxLTAzLTI0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW2Nzcy1ncmlkXSBEbyBub3QgYWxsb3cgbmVnYXRpdmUgaGVpZ2h0cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udFNlbGVjdG9yLmNwcAppbmRleCA3Mzg4NzEzOTM4ZjUzZTI4Nzg5YzQ2ZGFhNmYz
Zjk2MGJkOTNjMjdlLi43Mjg0MjdlMWY3NTFkZmQwZDRhMmU1MWFlNTJiYmUwNmI1YTZlZjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcApAQCAtNTUsNyArNTUsNiBAQAog
I2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
ICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjgsMjAgKzY3LDEwIEBAIENTU0Zv
bnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQpCiAgICAgLCBtX2NvbnRleHQobWFrZVdlYWtQdHIoY29udGV4dCkpCiAgICAgLCBtX2Nzc0Zv
bnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUodGhpcykpCiAgICAgLCBtX2ZvbnRNb2Rp
ZmllZE9ic2VydmVyKFt0aGlzXSB7IGZvbnRNb2RpZmllZCgpOyB9KQotICAgICwgbV9mb250TG9h
ZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGluZ1RpbWVyRmlyZWQp
CiAgICAgLCBtX3VuaXF1ZUlkKCsrZm9udFNlbGVjdG9ySWQpCiAgICAgLCBtX3ZlcnNpb24oMCkK
IHsKLSAgICBpZiAoaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7Ci0gICAgICAgIG1fZm9udEZhbWls
eU5hbWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmFtaWx5TmFtZXMtPnNpemUoKSk7Ci0gICAg
ICAgIGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IGZhbWlseU5hbWVzLmdldCgpKQotICAgICAgICAg
ICAgbV9mb250RmFtaWx5TmFtZXMudW5jaGVja2VkQ29uc3RydWN0QW5kQXBwZW5kKGZhbWlseU5h
bWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZm9udEZhbWlseU5hbWVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoZmFtaWx5TmFtZXNEYXRhLT5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8m
IGZhbWlseU5hbWUgOiBmYW1pbHlOYW1lc0RhdGEuZ2V0KCkpCi0gICAgICAgICAgICBtX2ZvbnRG
YW1pbHlOYW1lcy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5TmFtZSk7Ci0gICAgfQotCisgICAgbV9m
b250TG9hZGluZ1RpbWVyID0gbWFrZVVuaXF1ZTxUaW1lcj4oKnRoaXMsICZDU1NGb250U2VsZWN0
b3I6OmZvbnRMb2FkaW5nVGltZXJGaXJlZCk7CiAgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5h
ZGRDbGllbnQoKnRoaXMpOwogICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZEZvbnRNb2RpZmllZE9i
c2VydmVyKG1fZm9udE1vZGlmaWVkT2JzZXJ2ZXIpOwogICAgIExPRyhGb250cywgIkNTU0ZvbnRT
ZWxlY3RvciAlcCBjdG9yIiwgdGhpcyk7CkBAIC0yODEsMjIgKzI3MCwyMSBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQogICAgIGRpc3BhdGNoSW52YWxpZGF0
aW9uQ2FsbGJhY2tzKCk7CiB9CiAKLU9wdGlvbmFsPEF0b21TdHJpbmc+IENTU0ZvbnRTZWxlY3Rv
cjo6cmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCitPcHRpb25hbDxTdHJpbmc+IENT
U0ZvbnRTZWxlY3Rvcjo6cmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBhdXRv
IHBsYXRmb3JtUmVzdWx0ID0gRm9udERlc2NyaXB0aW9uOjpwbGF0Zm9ybVJlc29sdmVHZW5lcmlj
RmFtaWx5KGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
TG9jYWxlKCksIGZhbWlseU5hbWUpOwogICAgIGlmICghcGxhdGZvcm1SZXN1bHQuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
UmVzdWx0LnN0cmluZygpOwogCiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBjb25zdCBhdXRvJiBzZXR0aW5ncyA9IG1fY29udGV4dC0+c2V0
dGluZ3NWYWx1ZXMoKTsKIAotICAgIFVTY3JpcHRDb2RlIHNjcmlwdCA9IGZvbnREZXNjcmlwdGlv
bi5zY3JpcHQoKTsKLSAgICBhdXRvIGZhbWlseU5hbWVJbmRleCA9IG1fZm9udEZhbWlseU5hbWVz
LmZpbmQoZmFtaWx5TmFtZSk7CisgICAgYXV0byBmYW1pbHlOYW1lSW5kZXggPSBmYW1pbHlOYW1l
c0RhdGEtPmZpbmQoZmFtaWx5TmFtZSk7CiAgICAgaWYgKGZhbWlseU5hbWVJbmRleCAhPSBub3RG
b3VuZCkgewotICAgICAgICBpZiAoYXV0byBmYW1pbHlTdHJpbmcgPSBzZXR0aW5ncy5mb250R2Vu
ZXJpY0ZhbWlsaWVzLmZvbnRGYW1pbHkoc3RhdGljX2Nhc3Q8RmFtaWx5TmFtZXNJbmRleD4oZmFt
aWx5TmFtZUluZGV4KSwgc2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVybiBBdG9tU3RyaW5nKCpm
YW1pbHlTdHJpbmcpOworICAgICAgICBpZiAoYXV0byBmYW1pbHlTdHJpbmcgPSBzZXR0aW5ncy5m
b250R2VuZXJpY0ZhbWlsaWVzLmZvbnRGYW1pbHkoc3RhdGljX2Nhc3Q8RmFtaWx5TmFtZXNJbmRl
eD4oZmFtaWx5TmFtZUluZGV4KSwgZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpKSkKKyAgICAgICAg
ICAgIHJldHVybiAqZmFtaWx5U3RyaW5nOwogICAgIH0KIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CkBAIC0zMDgsOSArMjk2LDkgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRS
YW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKICAgICBBU1NF
UlQoIW1fYnVpbGRJc1VuZGVyd2F5IHx8IG1fY29tcHV0aW5nUm9vdFN0eWxlRm9udENvdW50KTsK
IAogICAgIC8vIEZJWE1FOiBUaGUgc3BlYyAoYW5kIEZpcmVmb3gpIHNheXMgdXNlciBzcGVjaWZp
ZWQgZ2VuZXJpYyBmYW1pbGllcyAoc2Fucy1zZXJpZiBldGMuKSBzaG91bGQgYmUgcmVzb2x2ZWQg
YmVmb3JlIHRoZSBAZm9udC1mYWNlIGxvb2t1cCB0b28uCi0gICAgYm9vbCByZXNvbHZlR2VuZXJp
Y0ZhbWlseUZpcnN0ID0gZmFtaWx5TmFtZSA9PSBtX2ZvbnRGYW1pbHlOYW1lc1tzdGF0aWNfY2Fz
dDxpbnQ+KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5KV07CisgICAgYm9vbCByZXNv
bHZlR2VuZXJpY0ZhbWlseUZpcnN0ID0gZmFtaWx5TmFtZSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0
KHN0YXRpY19jYXN0PGludD4oRmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRGYW1pbHkpKTsKIAot
ICAgIEF0b21TdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gZmFtaWx5TmFtZTsKKyAgICBTdHJpbmcg
ZmFtaWx5Rm9yTG9va3VwID0gZmFtaWx5TmFtZS5zdHJpbmcoKTsKICAgICBPcHRpb25hbDxGb250
RGVzY3JpcHRpb24+IG92ZXJyaWRlRm9udERlc2NyaXB0aW9uOwogICAgIGNvbnN0IEZvbnREZXNj
cmlwdGlvbiogZm9udERlc2NyaXB0aW9uRm9yTG9va3VwID0gJmZvbnREZXNjcmlwdGlvbjsKICAg
ICBhdXRvIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5ID0gWyZdKCkgewpAQCAtMzI0LDcg
KzMxMiw3IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAgYXV0byogZmFjZSA9IG1fY3Nz
Rm9udEZhY2VTZXQtPmZvbnRGYWNlKGZvbnREZXNjcmlwdGlvbkZvckxvb2t1cC0+Zm9udFNlbGVj
dGlvblJlcXVlc3QoKSwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoZmFjZSkgewogICAgICAg
ICBpZiAoZG9jdW1lbnQgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQotICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0
cmluZygpLCB0cnVlKTsKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cCwgdHJ1ZSk7CiAgICAgICAg
IHJldHVybiBmYWNlLT5mb250UmFuZ2VzKCpmb250RGVzY3JpcHRpb25Gb3JMb29rdXApOwogICAg
IH0KIApAQCAtMzMyLDIwICszMjAsMjAgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZv
bnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKICAgICAg
ICAgcmVzb2x2ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHkoKTsKICAgICBhdXRvIGZvbnQgPSBGb250
Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1
cCwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoZG9jdW1lbnQgJiYgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQotICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50
LCBmYW1pbHlGb3JMb29rdXAuc3RyaW5nKCksICEhZm9udCk7CisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1
cCwgISFmb250KTsKICAgICByZXR1cm4gRm9udFJhbmdlcyB7IFdURk1vdmUoZm9udCkgfTsKIH0K
IAogdm9pZCBDU1NGb250U2VsZWN0b3I6OnN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpCiB7CiAg
ICAgaWYgKG1faXNTdG9wcGVkKSB7Ci0gICAgICAgIEFTU0VSVCghbV9mb250TG9hZGluZ1RpbWVy
LmlzQWN0aXZlKCkpOwogICAgICAgICBBU1NFUlQobV9mb250c1RvQmVnaW5Mb2FkaW5nLmlzRW1w
dHkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX2lzU3RvcHBlZCA9IHRydWU7
Ci0gICAgbV9mb250TG9hZGluZ1RpbWVyLnN0b3AoKTsKKyAgICBtX2ZvbnRMb2FkaW5nVGltZXIt
PnN0b3AoKTsKKyAgICBtX2ZvbnRMb2FkaW5nVGltZXIgPSBudWxscHRyOwogCiAgICAgaWYgKGlz
PERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOwpAQCAtMzc0LDggKzM2Miw4IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRpbmdGb250U29vbihDYWNoZWRGb250JiBmb250KQog
ICAgIC8vIGRlY3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGZvbnRMb2FkaW5nVGltZXJGaXJlZCgp
IGFuZCBpbiBzdG9wTG9hZGluZ0FuZENsZWFyRm9udHMoKS4KICAgICBkb2N1bWVudC5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpLmluY3JlbWVudFJlcXVlc3RDb3VudChmb250KTsKIAotICAgIGlmICgh
bV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkICYmICFtX2ZvbnRMb2FkaW5nVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV9mb250TG9hZGluZ1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgIGlm
ICghbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkICYmICFtX2ZvbnRMb2FkaW5nVGltZXItPmlzQWN0
aXZlKCkpCisgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci0+c3RhcnRPbmVTaG90KDBfcyk7CiB9
CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdXNwZW5kRm9udExvYWRpbmdUaW1lcigpCkBAIC00
MDQsMTEgKzM5Miw2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpsb2FkUGVuZGluZ0ZvbnRzKCkK
ICAgICB9CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIENTU0ZvbnRTZWxlY3Rvcjo6ZmFtaWx5TmFt
ZShGYW1pbHlOYW1lc0luZGV4IGZhbWlseU5hbWVJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9mb250RmFtaWx5TmFtZXNbc3RhdGljX2Nhc3Q8aW50PihmYW1pbHlOYW1lSW5kZXgpXTsKLX0K
LQogdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkaW5nVGltZXJGaXJlZCgpCiB7CiAgICAg
aWYgKCFpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkKQEAgLTQ1Niw3ICs0MzksOCBAQCBS
ZWZQdHI8Rm9udD4gQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdAogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3RvcCgpCiB7
Ci0gICAgbV9mb250TG9hZGluZ1RpbWVyLnN0b3AoKTsKKyAgICBpZiAoIW1faXNTdG9wcGVkKQor
ICAgICAgICBtX2ZvbnRMb2FkaW5nVGltZXItPnN0b3AoKTsKIH0KIAogdm9pZCBDU1NGb250U2Vs
ZWN0b3I6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKQEAgLTQ2NSw3ICs0NDksOCBAQCB2
b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQgPSB0cnVlOwotICAgIG1f
Zm9udExvYWRpbmdUaW1lci5zdG9wKCk7CisgICAgaWYgKCFtX2lzU3RvcHBlZCkKKyAgICAgICAg
bV9mb250TG9hZGluZ1RpbWVyLT5zdG9wKCk7CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpy
ZXN1bWUoKQpAQCAtNDczLDggKzQ1OCw5IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZXN1bWUo
KQogICAgIGlmICghbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkKQogICAgICAgICByZXR1cm47CiAK
KyAgICBBU1NFUlQoIW1faXNTdG9wcGVkKTsKICAgICBpZiAoIW1fZm9udHNUb0JlZ2luTG9hZGlu
Zy5pc0VtcHR5KCkpCi0gICAgICAgIG1fZm9udExvYWRpbmdUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKKyAgICAgICAgbV9mb250TG9hZGluZ1RpbWVyLT5zdGFydE9uZVNob3QoMF9zKTsKIAogICAg
IG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5oCmluZGV4IDBiNTQ4MzZiNjA3MzE3ZDYzZTg0N2IwNGQ4ZDlmN2IxNzNjZjY5
MmEuLmM2MWE2ZmQ2OGI2ZmNmOTUwYjc2ZmQ2ZTA2OWFkYmVhNGU4NTYwMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTk0LDggKzk0LDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBsb2FkUGVuZGluZ0ZvbnRzKCk7CiAKLSAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lKFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleCkgY29uc3Q7Ci0KICAg
ICAvLyBDU1NGb250RmFjZTo6Q2xpZW50IG5lZWRzIHRvIGJlIGFibGUgdG8gYmUgaGVsZCBpbiBh
IFJlZlB0ci4KICAgICB2b2lkIHJlZigpIGZpbmFsIHsgRm9udFNlbGVjdG9yOjpyZWYoKTsgfQog
ICAgIHZvaWQgZGVyZWYoKSBmaW5hbCB7IEZvbnRTZWxlY3Rvcjo6ZGVyZWYoKTsgfQpAQCAtMTA3
LDcgKzEwNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG9wcG9ydHVuaXN0aWNhbGx5U3RhcnRG
b250RGF0YVVSTExvYWRpbmcoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseSkgZmluYWw7CiAKLSAgICBPcHRpb25hbDxBdG9tU3RyaW5nPiByZXNv
bHZlR2VuZXJpY0ZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHkpOworICAgIE9wdGlvbmFsPFN0cmluZz4gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHkpOwogCiAgICAgLy8gQ1NT
Rm9udEZhY2U6OkNsaWVudAogICAgIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSYpIGZpbmFs
OwpAQCAtMTM5LDcgKzEzNyw3IEBAIHByaXZhdGU6CiAKICAgICBDU1NGb250RmFjZVNldDo6Rm9u
dE1vZGlmaWVkT2JzZXJ2ZXIgbV9mb250TW9kaWZpZWRPYnNlcnZlcjsKIAotICAgIFRpbWVyIG1f
Zm9udExvYWRpbmdUaW1lcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+IG1fZm9udExvYWRp
bmdUaW1lcjsKICAgICBib29sIG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCB7IGZhbHNlIH07CiAK
ICAgICB1bnNpZ25lZCBtX3VuaXF1ZUlkOwpAQCAtMTQ4LDggKzE0Niw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2NyZWF0aW5nRm9udCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2J1aWxkSXNVbmRl
cndheSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Ci0KLSAgICBX
VEY6OlZlY3RvcjxBdG9tU3RyaW5nPiBtX2ZvbnRGYW1pbHlOYW1lczsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01P
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXgg
ODlkODk4MjBhNzY0NzdkMDE4ZjNjZmUzNDE5YzcxNmRjNjQ1NTBhOC4uYTgwN2Y1OGMwZTFhNDNi
YjdjMTk4MmQ4ZDAxNGY3ODE1YTdhOTcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0FjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9i
amVjdC5jcHAKQEAgLTY3LDggKzY3LDYgQEAgQWN0aXZlRE9NT2JqZWN0OjpBY3RpdmVET01PYmpl
Y3QoRG9jdW1lbnQmIGRvY3VtZW50KQogCiBBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmpl
Y3QoKQogewotICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRh
KG1fY3JlYXRpb25UaHJlYWQpKTsKLQogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBtYXkgYmUgaW5o
ZXJpdGVkIGJ5IGEgc3ViLWNsYXNzIHdob3NlIGxpZmUtY3ljbGUKICAgICAvLyBleGNlZWRzIHRo
YXQgb2YgdGhlIGFzc29jaWF0ZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4gSW4gdGhvc2UgY2Fz
ZXMsCiAgICAgLy8gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHdvdWxkL3Nob3VsZCBoYXZlIGJl
ZW4gbnVsbGlmaWVkIGJ5CkBAIC03OCw2ICs3Niw3IEBAIEFjdGl2ZURPTU9iamVjdDo6fkFjdGl2
ZURPTU9iamVjdCgpCiAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAorICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxE
YXRhKG1fY3JlYXRpb25UaHJlYWQpKTsKICAgICBBU1NFUlQobV9zdXNwZW5kSWZOZWVkZWRXYXND
YWxsZWQpOwogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRo
cmVhZCgpKTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxEZXN0cm95QWN0aXZl
RE9NT2JqZWN0KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApp
bmRleCBjN2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNl
NGQ4MjE4NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxl
KENURm9udFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2Vu
ZGlmCiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xh
c3MgRm9udCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
X1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3Jl
YXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5
MDk2ZC4uNWZkNDU1NWFjZmM0NDlhNmY4NWEzMjBiMWRlYjVkZGMzNmFhZjljYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSAr
NDYsNiBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3
dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExv
Y2s7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hl
JiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAg
ICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
SWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsNyAr
NjQsNyBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7
IH0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNl
dHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBt
X2ZvbnREZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWlseShmYW1p
bHkpCiAgICAgICAgICwgbV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9u
dEZhY2VGZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTk5LDggKzkwLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5h
bWVzQXJlRXF1YWwobV9mYW1pbHksIG90aGVyLm1fZmFtaWx5KTsKICAgICB9CiAKKyAgICB2b2lk
IGlzb2xhdGUoKSB7IG1fZmFtaWx5ID0gbV9mYW1pbHkuaXNvbGF0ZWRDb3B5KCk7IH0KKwogICAg
IEZvbnREZXNjcmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5n
IG1fZmFtaWx5OworICAgIFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250RmVhdHVyZVNldHRpbmdz
IG1fZm9udEZhY2VGZWF0dXJlczsKICAgICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzIG1fZm9udEZhY2VDYXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQxLDM5ICsxMzQsMzMgQEAgc3Ry
dWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEZvbnRQbGEKIAogdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250
UGxhdGZvcm1EYXRhQ2FjaGU7CiAKK3N0YXRpYyBSZWN1cnNpdmVMb2NrIGdQbGF0Zm9ybURhdGFD
YWNoZUxvY2s7CisKIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURh
dGFDYWNoZSgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFD
YWNoZT4gY2FjaGU7CiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBG
b250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFt
ZSkKK09wdGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1l
KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9tU3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNv
bnN0IEF0b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0
cmluZz4gdGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZp
Y0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAg
ICBpZiAoIXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8g
cGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShm
YW1pbHlOYW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAK
ICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkK
LSAgICAgICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZl
dGljYSJfczsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWls
eU5hbWUsICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAg
ICAgICAgICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSA3OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAg
ICAgICAgcmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5
OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
ImhlbHZldGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0
dXJuICJBcmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8g
T24gV2luZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlz
IHByZXNlbnQgYW5kCkBAIC0xODMsMzMgKzE3MCwyOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250
Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkK
ICAgICAvLyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBj
YXNlIDExOgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAg
ICAgICAgIHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBj
YXNlIDE1OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5
TmFtZSwgInRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAg
ICAgICAgICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
cmV0dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRG
YW1pbHlOYW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBT
dHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250
RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsK
LSNlbmRpZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNB
TCkKICAgICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2
ZXJ0aWNhbCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVy
dGljYWwgZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dz
IGZlYXR1cmUuCi0gICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0aGUgb3Jp
ZW50YXRvaW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1p
bHlOYW1lWzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRvbVN0cmlu
ZyhwYXNzZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICAvLyBJRSBkaXNy
ZWdhcmRzICJAIiByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRhdGlvbiwgc28gd2UgZm9sbG93IHRo
ZSBiZWhhdmlvci4KKyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlO
YW1lLnN1YnN0cmluZyhwYXNzZWRGYW1pbHlOYW1lWzBdID09ICdAJyA/IDEgOiAwKTsKICNlbHNl
Ci0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7Cisg
ICAgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgog
CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjMsMTQgKzIwNSwxNCBAQCBGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmbwogICAgIGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0
YUNhY2hlKCkuYWRkKGtleSwgbnVsbHB0cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjpp
dGVyYXRvciBpdCA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAga2V5Lmlzb2xhdGUoKTsKICAgICAgICAgaXQtPnZhbHVlID0gY3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNl
RmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKIAogICAgICAgICBpZiAoIWl0LT52YWx1
ZSAmJiAhY2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVu
YWJsZSB0byBmaW5kIGEgZm9udC4gIFdlIGhhdmUgYSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3
ZSBhbGlhcyB0byBvdGhlciBuYW1lcywKICAgICAgICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZl
dGljYSwgQ291cmllci9Db3VyaWVyIE5ldywgZXRjLiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQg
dW5kZXIgdGhlIGFsaWFzZWQgbmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGFs
dGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICAg
ICAgaWYgKCFhbHRlcm5hdGVOYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgRm9udFBs
YXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VG
ZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOworICAgICAgICAgICAgaWYgKGF1
dG8gYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdl
dENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAg
ICAgICAgIC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBw
cmV2aW91cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxp
ZGF0ZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEo
KS4KICAgICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5
KTsKQEAgLTMxMiw4ICsyOTQsMTAgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9u
dERhdGEgPSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0
aXZlRm9udERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250
Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmls
aXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogeworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIApAQCAtMzI1LDEwICsz
MDksOCBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjbwogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpm
b250Rm9yUGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkK
IHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
Zm9udExvY2spOwotI2VuZGlmCi0gICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworCiAgICAgYXV0byBhZGRSZXN1bHQgPSBjYWNoZWRGb250cygpLmVuc3VyZShwbGF0Zm9y
bURhdGEsIFsmXSB7CiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsK
ICAgICB9KTsKQEAgLTM0MCw2ICszMjIsOCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9y
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIAogdm9p
ZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gTWVt
b3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsK
ICAgICB1bnNpZ25lZCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJl
ID8gY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZl
Rm9udERhdGE7CiAKQEAgLTM1NywxNSArMzQxLDEzIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKG1fbG9jayk7CisKICAgICBMT0coRm9udHMsICJGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVG
b250RGF0YSgldSkiLCBwdXJnZUNvdW50KTsKIAogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmll
c0Zyb21Gb250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7
CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
Zm9udExvY2spOwotI2VuZGlmCi0KICAgICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBW
ZWN0b3I8UmVmPEZvbnQ+LCAyMD4gZm9udHNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBm
b250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewpAQCAtNDIxLDYgKzQwMyw3IEBAIHN0YXRp
YyBib29sIGtleXNNYXRjaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250
Q2FzY2FkZUNhY2hlS2V5JiBiCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2Nh
ZGVDYWNoZSgpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1f
Zm9udENhc2NhZGVDYWNoZS5jbGVhcigpOwogfQogCkBAIC00MzcsMTIgKzQyMCwxOCBAQCBzdGF0
aWMgRm9udENhc2NhZGVDYWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJgogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRp
b24uZmFtaWx5Q291bnQoKTsKICAgICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShmYW1pbHlDb3VudCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50
OyArK2kpCi0gICAgICAgIGtleS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24u
ZmFtaWx5QXQoaSkpOworICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2Ny
aXB0aW9uLmZhbWlseUF0KGkpLnN0cmluZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBm
b250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250
U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkg
OiAwOwogICAgIHJldHVybiBrZXk7CiB9CiAKK3N0YXRpYyB2b2lkIGlzb2xhdGVGb250Q2FzY2Fk
ZUNhY2hlS2V5KEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBmb3IgKGF1dG8mIGZh
bWlseSA6IGtleS5mYW1pbGllcykKKyAgICAgICAgZmFtaWx5ID0gZmFtaWx5Lmlzb2xhdGVkQ29w
eSgpOworfQorCiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNv
bnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGhh
c2ggdGhlIGtleSBhbmQgdGhlIGZhbWlseSBuYW1lIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gbWFr
aW5nIGEgaGFzaCBvdXQgb2Ygb3RoZXIgaGFzaGVzLgpAQCAtNDc5LDYgKzQ2OCw3IEBAIFJlZjxG
b250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25z
dCBGb250Q2FzY2FkZURlc2NyCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlz
TWF0Y2goYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1
cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpc29sYXRl
Rm9udENhc2NhZGVDYWNoZUtleShrZXkpOwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVD
YWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpKTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3
RW50cnktPmZvbnRzLmdldCgpOwpAQCAtNDk3LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZv
bnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2Fk
ZURlc2NyCiAKIHZvaWQgRm9udENhY2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udENhc2NhZGUsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQog
eworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51
cGRhdGVGb250cyhyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2Ny
aXB0aW9uKCksIFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDgg
QEAgc2l6ZV90IEZvbnRDYWNoZTo6Zm9udENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5h
Y3RpdmVGb250Q291bnQoKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRv
JiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFz
T25lUmVmKCkpCkBAIC01MjIsNiArNTEyLDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9y
Kj4qIGdDbGllbnRzOwogCiB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYg
Y2xpZW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hl
TG9jayk7CisKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNo
U2V0PEZvbnRTZWxlY3Rvcio+OwogCkBAIC01MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6
OmFkZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92
ZUNsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2spOworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAg
ICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4
IEBAIHVuc2lnbmVkIHNob3J0IEZvbnRDYWNoZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENh
Y2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9y
bURhdGFDYWNoZUxvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQo
Zm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
NTg1LDcgKzU4MSw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZv
cm1hdGlvbiYpCiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZv
bnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5n
JikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMz
MTIzZDU3ZmYyZS4uM2RlNmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEy
ICszMywxMyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5o
PgpAQCAtNzksNyArODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAg
OiBtX3NpemUoZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2Zv
bnRTZWxlY3Rpb25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAg
ICAgICAgICwgbV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1f
bG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxl
KGRlc2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVh
dHVyZVNldHRpbmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1f
dmFyaWF0aW9uU2V0dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7
IH0KQEAgLTE1Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAg
fTsKICAgICBGb250U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAg
IHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3Ry
aW5nIG1fbG9jYWxlOworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRp
bmdzIG1fZmVhdHVyZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3Zhcmlh
dGlvblNldHRpbmdzOwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0
aW9uS2V5SGFzaCB7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVz
Y3JpcHRpb25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIg
bGV2ZWwgRm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0
cmluZywgMz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAg
dW5zaWduZWQgZm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lv
bjsKIH07CkBAIC0yMjQsMTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGV4aXN0cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBv
ZiBwcmVpbnN0YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50
byBwbGF5IHdoZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWls
eSBuYW1lIGFzIGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHko
Y29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNl
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwot
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFk
ZENsaWVudChGb250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0
b3ImKTsKQEAgLTI0Nyw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2Fj
aGVzKCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQm
LCBBdG9tU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExP
R0ZPTlQmLCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE9QRU5UWVBFX1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBS
ZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0s
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5n
cyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
KTsKKworICAgIFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9u
dENhY2hlPiBtX3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAg
ICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxz
ZSB9OwogCiAgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDks
NyArMzEyLDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHkpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBmYW1pbHksIG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYy
ZGJjOTUwMjMwMzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTEx
YTg1ZGI5Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmgKQEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFy
a0hlaWdodChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmlt
YXJ5Rm9udCgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQo
dW5zaWduZWQpIGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVk
KSBjb25zdDsKKyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxi
YWNrUmFuZ2VzSW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JG
aXJzdFJhbmdlKCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAK
ICAgICBjb25zdCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqLCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGlu
ZSBjb25zdCBGb250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVy
biBtX2ZvbnRzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBj
b25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51
bGwodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJl
dHVybiBtX2ZvbnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwg
aW5kZXgpOworICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250
RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRl
Ojpmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JD
aGFyYWN0ZXIobV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxp
bmUgY29uc3QgRm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJh
bmdlKG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6Omlz
Rml4ZWRQaXRjaCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4
Y2Q1YzI5YWEwMmMzMTkyNDgwNDNmYTc0NjRhZGMuLjE4MWFhM2EzODAzYjIyOTcxZmMxOTg3ZWZk
M2ZhNDA0ODBlY2FlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEw
IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRv
U2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRP
U0laSU5HKQogCi1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1
YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikK
K2Jvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBT
dHJpbmcmIGZhbWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5
MS5pc051bGwoKSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5p
c051bGwoKSAmJiBmYW1pbHkyLmlzTnVsbCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlm
IChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFt
aWx5MjsKQEAgLTExMCwxNyArMTEyLDE1IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAg
cmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7
CiB9CiAKLXVuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFt
aWx5LmV4aXN0aW5nSGFzaCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaDo6aGFzaChmYW1pbHkpOworICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g6Omhhc2goZmFtaWx5LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGZhbWlseSk7CiB9CiAK
IFN0cmluZyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0
cmluZyYgZmFtaWx5KQogeworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFtaWx5OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0
aCgnLicpKQogICAgICAgICByZXR1cm4gZmFtaWx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBh
N2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdk
MmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3
LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJy
YXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQog
Ci0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwg
Y29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChj
b25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5
TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlO
YW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1
NzYzNTIzNC4uNmIyMzY1Njg1MGU4YjAyNjE0NGI3MWVlZjkxZTgxZjZhYmRjYjYzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250
cy5jcHAKQEAgLTEwNywxOCArMTA3LDIwIEBAIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRl
Rm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB9CiAKIEZvbnRDYXNj
YWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKQotICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQorICAgIDogbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSgxKQorICAgICwgbV9jYWNoZWRQcmltYXJ5Rm9udChudWxs
cHRyKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCiAgICAgLCBtX2dlbmVyYXRpb24o
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCiAgICAgLCBtX2lzRm9yUGxhdGZv
cm1Gb250KHRydWUpCiB7Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250
UmFuZ2VzKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9y
bURhdGEpKSk7CisgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhGb250UmFu
Z2VzKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURh
dGEpKSk7CiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkgPSBkZWZh
dWx0OwogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKICAgICBh
dXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IDApOwogICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwogICAg
IGlmIChudW1SYW5nZXMgPT0gMSkKQEAgLTEyOSw2ICsxMzEsNyBAQCB2b2lkIEZvbnRDYXNjYWRl
Rm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQogCiBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkg
Y29uc3QKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9yIChh
dXRvJiBmb250UmFuZ2VzIDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzKSB7CiAgICAgICAgIGlm
IChmb250UmFuZ2VzLmlzTG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
NzMsMTQgKzE3NiwyMSBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogCiBjb25zdCBGb250UmFu
Z2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAg
aWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07CisgICAgLy8gbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzIGlzIGEgbGlua2VkIGxpc3QgYW5kIGl0cyBsZW5ndGggb25seSBncm93cywK
KyAgICAvLyBpdCBpcyBuZXZlciBvdGhlcndpc2UgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCBp
dCdzIHNhZmUgdG8gYWNjZXNzCisgICAgLy8gZXhpc3Rpbmcgbm9kZXMgd2l0aG91dCB0YWtpbmcg
dGhlIGxvY2ssIHNvIHdlIGFzc2VydCB0aGF0IHRoZSBsb2NrIGlzCisgICAgLy8gaGVsZCBhZnRl
ciB0aGlzIGZhc3QgcmV0dXJuIHBhdGguCisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzU2l6ZSkgeworICAgICAgICBhdXRvIGl0ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzLmJlZ2luKCk7CisgICAgICAgIHN0ZDo6YWR2YW5jZShpdCwgaW5kZXgpOworICAgICAgICBy
ZXR1cm4gKml0OworICAgIH0KIAotICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJh
Y2tSYW5nZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKyAgICBBU1NF
UlQoaW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSk7CiAgICAgQVNTRVJUKEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKLSAg
ICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0
byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CisgICAgYXV0
byBmb250UmFuZ2VzID0gRm9udFJhbmdlcygpOwogCiAgICAgaWYgKCFpbmRleCkgewogICAgICAg
ICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0xODgsMjMgKzE5
OCw0MiBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlcwogICAgICAgICAgICAgZm9udFJhbmdlcyA9
IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFy
ZEZhbWlseSk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAg
Zm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBk
ZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdl
cyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOworCisgICAgICAgIGlmIChmb250UmFuZ2Vz
LmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50
KCkpOworCisgICAgICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0g
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5
Q291bnQoKTsKKyAgICAgICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKytt
X2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9
IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBm
b250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24u
ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0
RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250
U2VsZWN0b3IuZ2V0KCkpOworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2so
V1RGTW92ZShmb250UmFuZ2VzKSk7CisgICAgKyttX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXpl
OworICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYmFjaygpOworfQogCi0gICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNT
RVJUKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlDb3VudCgpKTsKK2Jvb2wgRm9udENhc2NhZGVGb250czo6ZmFsbGJhY2tSYW5nZXNBcmVO
dWxsKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5pc051bGwoKTsKK30KIAotICAgICAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZv
bnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENv
dW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCkpOwotICAgIH0KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRG
b3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVu
c2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsK
KyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5m
b250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdlczsK
K2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKKyAg
ICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JG
aXJzdFJhbmdlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBj
aGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQpAQCAtMzIz
LDEwICszNTIsMTAgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0
ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3QKICAgICByZXR1cm4gZGF0YTsK
IH0KIAotc3RhdGljIGNvbnN0IEZvbnQqIGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRl
Rm9udHMmIGZvbnRDYXNjYWRlRm9udHMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9u
dHM6OmZpbmRCZXN0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwOyA7ICsrZmFsbGJhY2tJbmRleCkgewotICAgICAgICBhdXRvJiBmb250UmFu
Z2VzID0gZm9udENhc2NhZGVGb250cy5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgZmFsbGJhY2tJbmRleCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CiAgICAgICAgIGlmIChm
b250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8qIGN1
cnJlbnRGb250ID0gZm9udFJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBF
eHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkZvcmJpZCkuZm9udDsKQEAgLTM0MiwxMCAr
MzcxLDEwIEBAIHN0YXRpYyBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2Fz
Y2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBjb25zCiAKIEdseXBoRGF0YSBGb250Q2FzY2Fk
ZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlh
bnQsIGJvb2wgc3lzdGVtRmFsbGJhY2tTaG91bGRCZUludmlzaWJsZSkKIHsKLSAgICBjb25zdCBG
b250KiBmb250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoKnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFy
YWN0ZXIpOworICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmaW5kQmVzdEZhbGxiYWNrRm9udChkZXNj
cmlwdGlvbiwgY2hhcmFjdGVyKTsKIAogICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9ICZy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2Uo
KTsKKyAgICAgICAgZm9udCA9ICZmb250Rm9yRmlyc3RSYW5nZShkZXNjcmlwdGlvbik7CiAKICAg
ICBhdXRvIHN5c3RlbUZhbGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250ID8gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAgaWYgKCFz
eXN0ZW1GYWxsYmFja0ZvbnQpCkBAIC00ODgsOSArNTE3LDkgQEAgc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0
IEZvbnQKIAogR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBG
b250VmFyaWFudCB2YXJpYW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCiAgICAgICAg
IHJldHVybiBnbHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKIApA
QCAtNTE2LDYgKzU0NSw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENh
c2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVm
ZXJlbmNlIGZhbGxiYWNrIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZi
YTVjMTgzYTU4ZjViYWQzOGQuLjk4M2IyMGZlMTdiZGVhZWYxNTk2ZWRiYzY1OGVlMzBiNWFiZmQ0
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNp
bmNsdWRlICJXaWR0aENhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1N0ZExpc3QuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiV2ViQ29y
ZVRocmVhZC5oIgpAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRG
b250R2x5cGhQYWdlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihG
b250Q2FzY2FkZUZvbnRzKTsKLWNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291
bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShGb250Q2FzY2FkZUZvbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTcw
LDcgKzcyLDkgQEAgcHVibGljOgogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAogICAgIGNvbnN0IEZvbnQmIHByaW1hcnlG
b250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgYm9vbCBmYWxsYmFj
a1Jhbmdlc0FyZU51bGwoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkKTsK
KyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja1Jhbmdlc0luZGV4LCBVQ2hhcjMyKTsKKyAgICBjb25z
dCBGb250JiBmb250Rm9yRmlyc3RSYW5nZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7
CiAKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc4LDEwICs4MiwxNCBA
QCBwcml2YXRlOgogICAgIEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7
CiAgICAgRm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBj
b25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNr
KFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9v
bCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJlSW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9u
dFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwKTsKIAotICAgIFZlY3RvcjxGb250
UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgV0VCQ09SRV9FWFBPUlQg
Y29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworCisgICAgU3RkTGlzdDxG
b250UmFuZ2VzPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXpl
ZEZhbGxiYWNrSW5kZXggeyAwIH07CiAKICAgICBjbGFzcyBHbHlwaFBhZ2VDYWNoZUVudHJ5IHsK
QEAgLTExNCw2ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJh
dGlvbjsKICAgICBQaXRjaCBtX3BpdGNoIHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lz
Rm9yUGxhdGZvcm1Gb250IHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogfTsK
IAogaW5saW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtMTI1LDcgKzEzNCwxMCBAQCBpbmxp
bmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiYgZGVzY3JpcAogCiBpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250
czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
CiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQcmltYXJ5
Rm9udCkKKyAgICAgICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlGb250OworCisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkg
ewogICAgICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQo
ZGVzY3JpcHRpb24sIDApOwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJh
bmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQ
b2xpY3k6OkFsbG93KS5mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250U2VsZWN0b3IuaAppbmRleCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4
NWMyZjUwLi4xZjFmZGJiMGYxZTZhNTBhNDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcs
NyArMjcsNyBAQAogCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsK
IAotY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7
CitjbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNl
bGVjdG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBh
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4
IGNkMGRjZDQ2ZmVhYjJiMWJkN2ZhN2ZlMWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0
ZTBmODExMTY5M2JkNTZmYWNmNWNkMTk1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZS5oCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlw
aC5oIgogI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1
Y3QgR2x5cGhEYXRhIHsKIC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQg
b2YgR2x5cGhEYXRhIG1hcHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJh
Y3RlcnMgaW4gdGhlIFVuaWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAog
Ly8gc3RhcnRpbmcgZnJvbSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJl
ciBvZiBnbHlwaHMuCi1jbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBh
Z2U+IHsKK2NsYXNzIEdseXBoUGFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlw
aFBhZ2U+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0
IEZvbnQmIGZvbnQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4
MmY3YzJjZjhiMjM0MjNiYzcwNDhhMzg5NmE3Y2NhNGVhMDQ4Li5kZTE0NzE2ZmIxZDZmYTVhOGFm
NTQ1MTU2ODBlOGZmNmY4MWEwMTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAt
MTI5LDggKzEyOSw4IEBAIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICYmICghcHJl
ZmVyQ29sb3JlZEZvbnQgfHwgYmFzZUZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBG
b250KCkpKQogICAgICAgICByZXR1cm4gYmFzZUZvbnQ7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEZvbnQqIGZhbGxiYWNrRm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3Rl
cihjaGFyYWN0ZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0Fy
ZU51bGwoaSk7ICsraSkgeworICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmb250
Rm9yQ2hhcmFjdGVyKGksIGNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZmFsbGJhY2tGb250IHx8
IGZhbGxiYWNrRm9udCA9PSBiYXNlRm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKaW5kZXggODVjOTRhOWE5M2YwOGIwMmI1NDdlMGJlNjA1NjZjZmMx
NDA4MDIyZi4uZDY3MWJhZmI2YmY4NjIwZmE3YTA5NDRmMjUyMmE2YzQxMzE1YjI3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29y
ZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmNwcApAQCAtNjE5LDcgKzYxOSw3IEBAIFJldGFpblB0cjxDVEZvbnRS
ZWY+IHByZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9u
dERlc2NyCiAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVz
KG9yaWdpbmFsRm9udCwgQ1RGb250R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNj
cmlwdG9yLmdldCgpKSk7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZh
bWlseSkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIEF0
dGVtcHQgdG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24g
dGhlIHByZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBuYW1lcy4g
Rm9yIGV4YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIg
dG8gR2VlemEgUHJvLgpAQCAtNjI4LDI3ICs2MjgsMTkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
QXQKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVm
YXVsdCBtb25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAg
c3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVy
KCJjb3VyaWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICBy
ZXR1cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vi
c3RpdHV0ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2
ZXJkYW5hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1
cm4gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisg
ICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAj
ZW5kaWYKIAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiQXJhYmljIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
dHJpbmc+IHBhc2h0byhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IlVyZHUiKSk7Ci0gICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5n
ZXQoKSwgJnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFk
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xk
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIGZvciAoU3RyaW5nKiBt
YXRjaFdvcmQgOiBtYXRjaFdvcmRzKSB7Ci0gICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25v
cmluZ0FTQ0lJQ2FzZSgqbWF0Y2hXb3JkKSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
IGdlZXphQm9sZCA6IGdlZXphUGxhaW4pOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRl
cmFsIG1hdGNoV29yZHNbXSA9IHsgIkFyYWJpYyJfcywgIlBhc2h0byJfcywgIlVyZHUiX3MgfTsK
KyAgICBhdXRvIGZhbWlseU1hdGNoZXIgPSBTdHJpbmdWaWV3KGZhbWlseSk7CisgICAgZm9yIChh
dXRvIG1hdGNoV29yZCA6IG1hdGNoV29yZHMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoZmFtaWx5TWF0Y2hlciwgU3RyaW5nVmlldyhtYXRjaFdvcmQpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRl
c2NyaXB0aW9uLndlaWdodCgpKSA/ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBAIHN0
YXRpYyBjb25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChj
b25zdCBGb250RGF0YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRG
b250c1tpbmRleF07CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250
Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxs
ZWRGb250cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6Omdl
dEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5h
bWUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewog
ICAgIGF1dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93
VXNlckluc3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5n
VXNlckluc3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5n
VXNlckluc3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJh
c2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBh
dXRvJiBmb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUp
OwogICAgIGlmIChmb250cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTEx
MDgsMTAgKzExMDAsMTAgQEAgc3RydWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZy
b21Qb3N0U2NyaXB0TmFtZSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0
Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNl
bGVjdGlvblJlcXVlc3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZv
bnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVx
dWVzdCByZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxs
b3dsaXN0KCk7Ci0gICAgaWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxv
d2xpc3Quc2l6ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlz
U3lzdGVtRm9udChmYW1pbHkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250
YWlucyhmYW1pbHkpKQogICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2Vy
aWYiKQpAQCAtMTEyMyw3ICsxMTE1LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250
TG9va3VwV2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9
CiAKICAgICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBB
bGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxv
d2luZ1VzZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxv
d2luZ1VzZXJJbnN0YWxsZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0g
Zm9udERhdGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBj
b25zdCBhdXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5
KGZhbWlseSk7CiAgICAgaWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBU
aGUgQ1NTIHNwZWMgc3RhdGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBv
ZiBhbiBhY3R1YWwgZm9udCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8g
YWxzbwogICAgICAgICAvLyBzdXBwb3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0
ZWFkLiBIb3dldmVyLCB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVy
dGllcyAoZm9udC13ZWlnaHQsCkBAIC0xMTcyLDcgKzExNjQsNyBAQCBzdGF0aWMgdm9pZCBpbnZh
bGlkYXRlRm9udENhY2hlKCkKICAgICB9KTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRS
ZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgUmV0YWlu
UHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUs
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAg
IC8vIEZJWE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3Rp
dmVGYW1pbHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIE9wdGlvbmFsPFN5
c3RlbUZvbnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjAxLDcgKzExOTMsNyBAQCBzdGF0aWMg
UmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHksCiAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCJVSUNURm9udFRleHRT
dHlsZSIpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVzY3JpcHRpb24u
Zm9udFNlbGVjdGlvblJlcXVlc3QoKTsKICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJh
aXRzID0gKGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpID8ga0NU
Rm9udFRyYWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8ga0NURm9udFRy
YWl0SXRhbGljIDogMCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250
RGVzY3JpcHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LnN0cmluZygpLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0
ZWdvcnkoKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSkpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWlseS5jcmVhdGVDRlN0cmluZygp
LmdldCgpLCBSZW5kZXJUaGVtZUNvY29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5
KCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWl0cykKICAgICAgICAgICAgIGRlc2NyaXB0
b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJhaXRz
KGRlc2NyaXB0b3IuZ2V0KCksIHRyYWl0cywgdHJhaXRzKSk7CiAgICAgICAgIHJldHVybiBjcmVh
dGVGb250Rm9ySW5zdGFsbGVkRm9udHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgYWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpOwpAQCAtMTIzNSw3ICsxMjI3LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
VEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5LAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJl
Zj4gZm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9u
dEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcywgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBm
b250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmls
aXRpZXMsIGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTI3OCw3ICsxMjcwLDcgQEAgc3RhdGljIHZvaWQgYXV0b0Fj
dGl2YXRlRm9udChjb25zdCBTdHJpbmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkKIH0KICNlbmRpZgog
Ci1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNl
RmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBh
YmlsaXRpZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpj
cmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9u
dEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcykKIHsKICAgICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCk7CiAKQEAgLTEyOTEsNyArMTI4Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxG
b250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlCiAKICAgICAgICAgLy8gQXV0byBhY3RpdmF0ZSB0aGUgZm9udCBiZWZvcmUgbG9va2lu
ZyBmb3IgaXQgYSBzZWNvbmQgdGltZS4KICAgICAgICAgLy8gSWdub3JlIHRoZSByZXN1bHQgYmVj
YXVzZSB3ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxseSBmaW5kIHRo
ZSBmb250LgotICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmcoKSwgc2l6ZSk7
CisgICAgICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAogICAgICAgICBmb250
ID0gZm9udFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBzaXplKTsKICAgICB9CkBAIC0xNDIzLDcgKzE0MTUs
NyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1E
YXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBs
YXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQor
T3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFy
IGhlaXRpU3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHNvbmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzMSwxMCArMTQy
MywxMCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFt
aWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3
ZWlydWFuWWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07
CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4
NWZhZSwgMHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkg
U0MiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5U
aHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRD
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhy
ZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQ
aW5nRmFuZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBs
YWNlbWVudCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAiU29uZ3RpIFND
Il9zOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRDID0gIlNvbmd0
aSBUQyJfczsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVNDUmVwbGFj
ZW1lbnQgPSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVy
YWwgaGVpdGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAgc3dpdGNoIChm
YW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAtMTQ2OSw3ICsxNDYxLDcgQEAg
Y29uc3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0
dXJuIG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBhZGRB
dHRyaWJ1dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1
dGVzLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKQEAg
LTE1NDIsNyArMTUzNCw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVs
dCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0
IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBpZiAo
YXV0byByZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbVN0cmluZygi
VGltZXMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgIGlmIChhdXRv
IHJlc3VsdCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMiX3MpKQogICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3VhcmFudGVlZCB0
byBiZSBub24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4OWYyMTM3MDcyZDQz
YThmODk4YWRkZDE4ZGFkNjI0OTAzOTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQwN2M4MTE4MGZiZDAw
NGNmMTNmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaApAQCAtNjIsNyArNjIsNyBAQCB0eXBlZGVm
IEhhc2hNYXA8Rm9udFRhZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNo
LCBGb3VyQ2hhcmFjdGVyVAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9u
dChDVEZvbnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0
dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRp
ZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0
aW9ucyA9IHRydWUpOwogZW51bSBjbGFzcyBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgOiBi
b29sIHsgTm8sIFllcyB9OwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lz
KENURm9udFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkQ29tcHV0ZVBoeXNpY2Fs
VHJhaXRzID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9vbCBpc1BsYXRmb3Jt
Rm9udCA9IGZhbHNlKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1p
bHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJl
bmRlcmluZ01vZGUsIGZsb2F0IHNpemUpOworUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1G
b250V2l0aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3Qs
IFRleHRSZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXMgY2FwYWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJlZik7CiB2
b2lkIGFkZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVm
IGF0dHJpYnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0cjxDVEZvbnRS
ZWY+IGNyZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zs
b2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVD
b3JlVGV4dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRi
MC4uMmJiNzEwMTU5MGVlYjE0ZGUxNGY5NTFjNmIzYTBhM2NhODQyYzJhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3Jl
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTMxNiw4ICszMTYsOCBAQCBjb25zdCBGb250KiBG
b250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZQogCiAgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
IWZhbGxiYWNrUmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZv
bnQgPSBmb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZv
bnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENh
Y2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5
cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0NzYz
YjczZTEyZGIyYTAyNjcuLjliOTBiMDcyMTU2NmRkNDJlOGVmZWQ0MWU3MTNkZjk0MmUxNmYyMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0Zv
bnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMxOSwzOSArMzE5LDM4IEBAIFJl
ZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSBmYWxs
YmFjayBmb250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBGb250Q29uZmln
CiAgICAgLy8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVybiAwLiBT
ZWUgaXNGYWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5nIHRpbWVzU3Ry
KCJzZXJpZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9u
dERlc2NyaXB0aW9uLCB0aW1lc1N0cikpCi0gICAgICAgIHJldHVybiAqZm9udDsKKyAgICBpZiAo
UmVmUHRyPEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlm
Il9zKSkKKyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIC8vIFRo
aXMgY291bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9wZXJseS1pbnN0YWxsZWQgb3IgbWlzY29u
ZmlndXJlZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2Vy
SW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENh
Y2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwg
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGlj
IFN0cmluZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHkpCitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sg
Zm9udCAoZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCiAg
ICAgLy8gdGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZp
ZyB1bmRlcnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRz
V2l0aCgiLXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbWlseTsKIAotICAgIGlmIChmYW1pbHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwg
ZmFtaWx5ID09IHNlcmlmRmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRh
LT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRGYW1p
bHkpKSB8fCBmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oRmFtaWx5TmFtZXNJbmRleDo6U2VyaWZGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJzZXJp
ZiI7Ci0gICAgaWYgKGZhbWlseSA9PSBzYW5zU2VyaWZGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9
PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0lu
ZGV4OjpTYW5zU2VyaWZGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJzYW5zLXNlcmlmIjsKLSAg
ICBpZiAoZmFtaWx5ID09IG1vbm9zcGFjZUZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWls
eU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1v
bm9zcGFjZUZhbWlseSkpKQogICAgICAgICByZXR1cm4gIm1vbm9zcGFjZSI7Ci0gICAgaWYgKGZh
bWlseSA9PSBjdXJzaXZlRmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRh
LT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWls
eSkpKQogICAgICAgICByZXR1cm4gImN1cnNpdmUiOwotICAgIGlmIChmYW1pbHkgPT0gZmFudGFz
eUZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6OkZhbnRhc3lGYW1pbHkpKSkKICAgICAgICAg
cmV0dXJuICJmYW50YXN5IjsKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoZmFtaWx5ID09
IHN5c3RlbVVpRmFtaWx5IHx8IGZhbWlseSA9PSAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpCisgICAg
aWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihG
YW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1VaUZhbWlseSkpIHx8IGZhbWlseSA9PSAiLXdlYmtpdC1z
eXN0ZW0tZm9udCIpCiAgICAgICAgIHJldHVybiBkZWZhdWx0R3RrU3lzdGVtRm9udCgpOwogI2Vu
ZGlmCiAKQEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25seVVz
ZWRHZW5lcmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykKICAgICAgICAg
fHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNp
dmUiKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQor
c3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgLy8gVGhlIENT
UyBmb250IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mb250
cy8jZm9udC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdlIG11c3QgZmlu
ZCBhbiBleGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Igb2JsaXF1
ZSBjYW4gYmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZQogICAgIHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRD
YWNoZTo6cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQorT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJv
bGxlckNvcmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5
MzM1MDAxMzkwZWIzZmJiOTlhNWIuLmMzMmNlNzlhZTQ2OGQxZjNiMDM2M2YyOTE1MjEzOThkN2Zm
NTZlNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTEy
NSw5ICsxMjUsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhU
ZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICBpc1N5c3RlbUZh
bGxiYWNrID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VD
aGFyYWN0ZXIpOwotICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgZm9udCA9IG1fZm9udC5mb250
Rm9yQ2hhcmFjdGVyKDAsIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCi0gICAg
ICAgICAgICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJh
bmdlKCk7CisgICAgICAgICAgICBmb250ID0gJm1fZm9udC5mb250Rm9yRmlyc3RSYW5nZSgpOwog
ICAgICAgICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRh
YmxlQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0
ZXMobV9mb250LmVuYWJsZUtlcm5pbmcoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSwgbV9mb250LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpLmdldCgpKSk7
CiAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggZm9udCBzaG91bGQgYmUgdXNlZCB0byBy
ZW5kZXIgdGhpcyBncmFwaGVtZSBjbHVzdGVyLCBzbyBlbmFibGUgQ29yZVRleHQncyBmYWxsYmFj
ayBtZWNoYW5pc20gYnkgdXNpbmcgdGhlIENURm9udCB3aGljaCBkb2Vzbid0IGhhdmUgQ29yZVRl
eHQncyBmYWxsYmFjayBkaXNhYmxlZC4KICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29u
c3RfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwg
a0NURm9udEF0dHJpYnV0ZU5hbWUsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CkBAIC0x
ODcsOCArMTg3LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgICAgIFJldGFp
blB0cjxDRlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6
Om9iamVjdEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKICAgICAgICAgICAgIGlmICghV1RG
OjpzYWZlQ0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3Jt
RGF0YSgpLm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKICAgICAgICAgICAgICAg
ICAvLyBCZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZvbnQgbWF0Y2hlcyBhbnkgb2YgdGhlIGZv
bnRzIGluIHRoZSBmYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250
Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VD
aGFyYWN0ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFdURjo6c2Fm
ZUNGRXF1YWwocnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygp
LmdldCgpLCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRi
NTU3MmE0ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi43ZjU3MjMyZTA3ZDI1MDdiNDk0
ZjYxODllMWZiZDRhNmViOGQyZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzYyLDkgKzM2Miw5IEBAIGJv
b2wgRm9udENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0cmlu
ZyYpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmluZyYgb3V0Rm9udEZhbWlseU5h
bWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9u
dChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYg
Zm9udCwgU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBBdG9tU3RyaW5nIGZhbWls
eU5hbWUoZm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJ
WkUpKTsKKyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9u
dC5sZkZhY2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0cjxGb250PiBmb250RGF0YSA9
IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoZm9u
dERhdGEpCiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKQEAgLTM3Myw1
NiArMzczLDU3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9uCiAKIFJlZjxGb250PiBGb250Q2Fj
aGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3Ry
aW5nPiBmYWxsYmFja0ZvbnROYW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IGZhbGxiYWNrRm9udE5hbWU7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
b3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9u
dCBoZXJlLiBGb3Igbm93IHdlJ2xsIHBpY2sKKyAgICAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0
aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCisKKyAgICAgICAg
Ly8gU2VhcmNoIGFsbCB0eXBpY2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250
cy4KKyAgICAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0
byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCisgICAgICAg
IC8vIFN0YXJ0IHdpdGggVGltZXMgTmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1
bHQgaWYgdGhlIHVzZXIgZG9lc24ndCBjaGFuZ2UgcHJlZnMuCisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgICAg
IFN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJMdWNpZGEgU2FucyBV
bmljb2RlIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoIkFyaWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAgICAgfTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9u
dHMpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlv
biwgZmFsbGJhY2tGb250c1tpXSkpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1l
LmdldCgpID0gZmFsbGJhY2tGb250c1tpXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5nZXQoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24s
IGZhbGxiYWNrRm9udE5hbWUpOworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERFRkFVTFRf
R1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgorICAgICAg
ICBpZiAoSEZPTlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tP
YmplY3QoREVGQVVMVF9HVUlfRk9OVCkpKSB7CisgICAgICAgICAgICBMT0dGT05UIGRlZmF1bHRH
VUlMb2dGb250OworICAgICAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2Yo
ZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOworICAgICAgICAgICAgaWYg
KGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgZGVmYXVsdEdV
SUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogCi0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cg
Z2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKLSAg
ICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5n
IGFueSBwcmVmcy4KLQotICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWluc3RhbGxl
ZCBmdWxsIFVuaWNvZGUgZm9udHMuCi0gICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5
cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlw
ZWZhY2VzCi0gICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBp
cyB0aGUgZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxiYWNrRm9u
dHNbXSA9IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNyb3NvZnQg
U2FucyBTZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAg
QXRvbVN0cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAot
ICAgICAgICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKQotICAgIH07Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbXBs
ZUZvbnQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxi
YWNrRm9udHMpOyArK2kpIHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250Rm9yRmFtaWx5
KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSkpIHsKLSAgICAgICAgICAgIGZhbGxi
YWNrRm9udE5hbWUuZ2V0KCkgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAgcmV0dXJu
ICpzaW1wbGVGb250OworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNz
IGZvbnRzLgorICAgICAgICBOT05DTElFTlRNRVRSSUNTIG5vbkNsaWVudE1ldHJpY3MgeyB9Owor
ICAgICAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNz
KTsKKyAgICAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRS
SUNTLCBzaXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgewor
ICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlw
dGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlw
dGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZv
bnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGlmIChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5v
bkNsaWVudE1ldHJpY3MubGZTdGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExv
Z0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
IChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVu
dE1ldHJpY3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9CisgICAgfSk7CiAKLSAgICAvLyBGYWxsIGJh
Y2sgdG8gdGhlIERFRkFVTFRfR1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUg
YXZhaWxhYmxlLgotICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0PEhG
T05UPihHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKLSAgICAgICAgTE9HRk9O
VCBkZWZhdWx0R1VJTG9nRm9udDsKLSAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBz
aXplb2YoZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOwotICAgICAgICBp
ZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlw
dGlvbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAg
cmV0dXJuICpzaW1wbGVGb250OwotICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0
aW9uLCBmYWxsYmFja0ZvbnROYW1lKTsKIAotICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50
IG1ldHJpY3MgZm9udHMuCi0gICAgTk9OQ0xJRU5UTUVUUklDUyBub25DbGllbnRNZXRyaWNzIHsg
fTsKLSAgICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNz
KTsKLSAgICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1Ms
IHNpemVvZihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVudE1ldHJpY3MsIDApKSB7Ci0gICAg
ICAgIGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5h
bWUpKQotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxl
Rm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9u
Q2xpZW50TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAg
IHJldHVybiAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZT
dGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxl
Rm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwgZmFs
bGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAg
IGlmIChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2Ny
aXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFt
ZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQotICAgIAogICAgIGF1
dG8gaEZvbnQgPSBhZG9wdEdESU9iamVjdChzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmpl
Y3QoREVGQVVMVF9HVUlfRk9OVCkpKTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0
YShXVEZNb3ZlKGhGb250KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZh
bHNlLCBmYWxzZSwgZmFsc2UpOwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRm
b3JtRGF0YSk7CkBAIC01MTIsNyArNTEzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBtYXRjaElt
cHJvdmluZ0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1QgVEVYVE0KICAg
ICByZXR1cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVk
SXRhbGljLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3RhdGljIEdESU9iamVj
dDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVk
V2VpZ2h0LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFs
aWMpCiB7CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzEsMTIgQEAgc3RhdGlj
IEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHks
IExPTkcgZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgewot
ICAgIFRyYWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkK
KyAgICBUcmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKICAg
ICAgICAgOiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQogCi0gICAgY29u
c3QgQXRvbVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgbV9mYW1pbHlO
YW1lOwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGll
czsKIH07CiAKQEAgLTYyNiw3ICs2MjcsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0lu
RmFtaWx5RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAg
IHJldHVybiAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENh
Y2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVj
dGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
SW5GYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKIHsKICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ3LDcgQEAgVmVjdG9yPEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFi
aWxpdGllc0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2Fw
YWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wgaXNMdWNpZGFH
cmFuZGUgPSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3Jh
bmRlIik7CiAKQEAgLTY5MiwxMSArNjkzLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9y
bURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRm
b3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0
aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZl
ckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9t
YW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5U
aHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRTYW5zU2VyaWYo
Ik1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24gV2luZG93
cywgd2UgZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBl
Y3RzIHN1cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9tYW4gYXMgYW4g
YWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcwNSw3ICs3MDMs
NyBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3Ro
ZXIgcGxhdGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJl
dHVybiB0aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9tYW4i
X3M7CiAgICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQg
Yml0bWFwIGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8v
IFRodXMgd2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJuYXRpdmUgZm9y
IHRoZSBiaXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTIsMTAgQEAgY29u
c3QgQXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRm
b3JtcyB0b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1
cm4gbWljcm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJNaWNyb3NvZnQgU2Fu
cyBTZXJpZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxsQXRvbSgp
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2MTU0YmMwNGJl
YTUwM2M2MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFiZmJhMDc2YmQ3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAg
LTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVB
c0JpZGlDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7
CitzdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNhbWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2
OwogICAgIHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0Jp
ZGlDb250ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQzOWJkMzRk
MS4uNWE4ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIyLDE1IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIEJpZGlF
bWJlZGRpbmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAogLy8gVXNl
ZCB0byBrZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBCaWRpQ29udGV4
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRpQ29udGV4dCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBj
aGFyIGxldmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1i
ZWRkaW5nU291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBudWxs
cHRyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
Rm9udFJhdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmNwcAppbmRleCAxYWYzYzkyMDcxYjhlMDQzM2Q1YjA5NzJkYzVkODI1OTYzODAzZGRmLi5kMmFm
ZDhjMmM0N2M3Mjc1NGIzZDZiNmI1ZDY3OTI5ZTM0Mjk2NDBjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcApAQCAtNDgsMTAgKzQ4LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZh
bWlseU5hbWVzOwogCi1zdGF0aWMgYm9vbCB1c2VGaXhlZERlZmF1bHRTaXplKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQ1NTRm9udFNlbGVjdG9y
JiBmb250U2VsZWN0b3IpCitzdGF0aWMgYm9vbCB1c2VGaXhlZERlZmF1bHRTaXplKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKLSAgICByZXR1cm4gZm9u
dERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCkgPT0gMSAmJiBmb250RGVzY3JpcHRpb24uZmlyc3RG
YW1pbHkoKSA9PSBmb250U2VsZWN0b3IuZmFtaWx5TmFtZShXZWJLaXRGb250RmFtaWx5TmFtZXM6
OkZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSk7CisgICAgcmV0dXJuIGZvbnREZXNj
cmlwdGlvbi5mYW1pbHlDb3VudCgpID09IDEgJiYgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5
KCkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFt
ZXNJbmRleDo6TW9ub3NwYWNlRmFtaWx5KSk7CiB9CiAKIE9wdGlvbmFsPEZvbnRDYXNjYWRlPiBy
ZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb250UmF3JiBmb250UmF3LCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiYgZm9udERlc2NyaXB0aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KQpAQCAtNjEsNyArNjIsNyBAQCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRS
YXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNjcgogCiAgICAgLy8gRm9u
dCBmYW1pbHkgYXBwbGllZCBpbiB0aGUgc2FtZSB3YXkgYXMgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRm9udEZhbWlseQogICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQt
ZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgotICAg
IGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSB1c2VGaXhlZERlZmF1bHRTaXpl
KGZvbnREZXNjcmlwdGlvbiwgKmNvbnRleHQuZm9udFNlbGVjdG9yKCkpOworICAgIGJvb2wgb2xk
RmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSB1c2VGaXhlZERlZmF1bHRTaXplKGZvbnREZXNj
cmlwdGlvbik7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFtaWxpZXM7CiAgICAgZmFtaWxp
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LmZhbWlseS5zaXplKCkpOwpAQCAtNzIs
NyArNzMsNyBAQCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3Qg
Rm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNjcgogICAgICAgICBzd2l0Y2hPbihpdGVt
LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9
IGlkZW50ICE9IENTU1ZhbHVlV2Via2l0Qm9keTsKICAgICAgICAgICAgIGlmIChpc0dlbmVyaWNG
YW1pbHkpCi0gICAgICAgICAgICAgICAgZmFtaWx5ID0gY29udGV4dC5mb250U2VsZWN0b3IoKS0+
ZmFtaWx5TmFtZShDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5SW5k
ZXhGcm9tVmFsdWVJRChpZGVudCkpOworICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseU5h
bWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Z2VuZXJpY0ZvbnRGYW1pbHlJbmRleEZyb21WYWx1ZUlEKGlkZW50KSkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGZhbWlseSA9IEF0b21TdHJpbmcoY29udGV4dC5zZXR0
aW5nc1ZhbHVlcygpLmZvbnRHZW5lcmljRmFtaWxpZXMuc3RhbmRhcmRGb250RmFtaWx5KCkpOwog
ICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5U3RyaW5nKSB7CkBAIC05MCw3ICs5
MSw3IEBAIE9wdGlvbmFsPEZvbnRDYXNjYWRlPiByZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb250
UmF3JiBmb250UmF3LCBGb250Q2FzY2FkZURlc2NyCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKGZhbWlsaWVzKTsKIAotICAgIGlm
ICh1c2VGaXhlZERlZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbiwgKmNvbnRleHQuZm9udFNlbGVj
dG9yKCkpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CisgICAgaWYgKHVzZUZp
eGVkRGVmYXVsdFNpemUoZm9udERlc2NyaXB0aW9uKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSkgewogICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CiAgICAgICAgICAgICBhdXRv
IHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFt
aWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIGNvbnRleHQuc2V0dGluZ3NWYWx1ZXMoKSk7CiAgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424129</attachid>
            <date>2021-03-24 06:09:19 -0700</date>
            <delta_ts>2021-03-24 10:32:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210324130917.patch</filename>
            <type>text/plain</type>
            <size>81740</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ5YTY5YjI4NWQ2ZTFj
MTE3ZmYwN2FlYTY4ZTIyZTg1MTVjNWVhNi4uOTNjNmRmZTM4N2ZmZDU0OWU0MGNhYjgzZmM4Y2Zm
OGVhYTQ5OTNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDIxLTAzLTI0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YWtlIEZvbnRDYWNoZSBzYWZlIHRvIHVzZSBvbiBtdWx0aXBsZSB0aHJlYWRzIGJ5IGludHJvZHVj
aW5nIGxvY2tpbmcKKyAgICAgICAgYW5kIHVzaW5nIGlzb2xhdGVkIGNvcGllcyBvZiBhIFN0cmlu
ZyBpbnN0ZWFkIG9mIEF0b21TdHJpbmcgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUgdGhyZWFkcyBh
cmUgZXhwZWN0ZWQgdG8gYWNjZXNzIGRhdGEuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRoZSBu
ZWVkIGZvciB0aGUgcGFydGlhbCBsb2NraW5nIGltcGxlbWVudGF0aW9uIHVzZWQgYnkKKyAgICAg
ICAgaU9TIGZvciB0aGUgd2ViIHRocmVhZC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVh
ZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGNzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDogUmVtb3ZlIHVzZSBv
ZiBBdG9tU3RyaW5nIGZvciBmYW1pbHkgbmFtZSBpbgorICAgICAgICAgICAgZm9udCByZXNvbHV0
aW9uLgorICAgICAgICAqIGRvbS9BY3RpdmVET01PYmplY3QuY3BwOiBNb3ZlIHRocmVhZCBhc3Nl
cnRpb24gaW4gZGVzdHJ1Y3RvciB0bworICAgICAgICAgICAgYWZ0ZXIgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCBudWxsIGNoZWNrLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDog
TWFrZSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOiBJ
bnRyb2R1Y2UgbG9ja2luZywgcmVwbGFjZSB1c2Ugb2YKKyAgICAgICAgICAgIEF0b21TdHJpbmcg
d2l0aCBTdHJpbmcgYW5kIG1ha2UgaXNvbGF0ZWQgY29waWVzIGluc3RlYWQgb2YgdGFraW5nCisg
ICAgICAgICAgICByZWZlcmVuY2VzIHRoYXQgbWlnaHQgYmUgYWNjZXNzZWQgYWNyb3NzIHRocmVh
ZHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6IEFkYXB0IHRvIGNoYW5nZXMgaW4K
KyAgICAgICAgICAgIEZvbnRDYXNjYWRlRm9udHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oOiBBZGFwdCB0byBBUEkgY2hhbmdlcworICAgICAg
ICAgICAgYW5kIHJlbW92ZSBDb2NvYSBmYXN0LXBhdGggdGhhdCBpcyBubyBsb25nZXIgdmFsaWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oOiBEb24ndCBhc3NlcnQg
bWFpbiB0aHJlYWQgYW5kCisgICAgICAgICAgICBpbnRyb2R1Y2UgbG9ja2luZyBhcm91bmQgbWVt
YmVyIHZhcmlhYmxlIEkvTy4gTG9jay1mcmVlIGFjY2VzcyBpcworICAgICAgICAgICAgbWFpbnRh
aW5lZCB3aGVyZSBwb3NzaWJsZS4KKyAgICAgICAgICAgIFJlbW92ZSBhY2Nlc3MgdG8gRm9udFJh
bmdlcyBhbmQgaW5zdGVhZCBleHBvc2UgdGhlIG1ldGhvZHMgdXNlZCBvbgorICAgICAgICAgICAg
dGhlbSBzbyB0aGF0IHRoZWlyIHJlZmVyZW5jZSByZW1haW5zIGFzc29jaWF0ZWQgb25seSB3aXRo
IHRoZSBwYXJlbnQKKyAgICAgICAgICAgIEZvbnRDYXNjYWRlRm9udHMuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmg6IE1ha2UgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmg6IE1ha2UgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRDYXNj
YWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5oOiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHA6IEFk
YXB0IHRvIGNoYW5nZXMKKyAgICAgICAgICAgIGluIEZvbnRDYXNjYWRlLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDogQWRhcHQgdG8g
Y2hhbmdlcyBpbgorICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbTogQWRhcHQgdG8gY2hh
bmdlcyBpbgorICAgICAgICAgICAgRm9udENhc2NhZGUuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAg
ICAgIEZvbnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0Lmg6IE1ha2UgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQKKwogMjAyMS0wMy0yNCAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtjc3MtZ3JpZF0gRG8gbm90IGFsbG93IG5lZ2F0aXZlIGhlaWdodHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMzhlZmI2NjY4ZDA4ODhlMDExYmMwZWYw
YWU4MzhiNDUwNTVhM2ExZS4uNzI4NDI3ZTFmNzUxZGZkMGQ0YTJlNTFhZTUyYmJlMDZiNWE2ZWYw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTU1LDcgKzU1LDYg
QEAKICNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Lmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDIwICs2NywxMCBAQCBD
U1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0KQogICAgICwgbV9jb250ZXh0KG1ha2VXZWFrUHRyKGNvbnRleHQpKQogICAgICwgbV9j
c3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9mb250
TW9kaWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250TW9kaWZpZWQoKTsgfSkKLSAgICAsIG1fZm9u
dExvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZp
cmVkKQogICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3RvcklkKQogICAgICwgbV92ZXJzaW9u
KDApCiB7Ci0gICAgaWYgKGlzPERvY3VtZW50Pihjb250ZXh0KSkgewotICAgICAgICBtX2ZvbnRG
YW1pbHlOYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZhbWlseU5hbWVzLT5zaXplKCkpOwot
ICAgICAgICBmb3IgKGF1dG8mIGZhbWlseU5hbWUgOiBmYW1pbHlOYW1lcy5nZXQoKSkKLSAgICAg
ICAgICAgIG1fZm9udEZhbWlseU5hbWVzLnVuY2hlY2tlZENvbnN0cnVjdEFuZEFwcGVuZChmYW1p
bHlOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2ZvbnRGYW1pbHlOYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGZhbWlseU5hbWVzRGF0YS0+c2l6ZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXNEYXRhLmdldCgpKQotICAgICAgICAgICAgbV9m
b250RmFtaWx5TmFtZXMudW5jaGVja2VkQXBwZW5kKGZhbWlseU5hbWUpOwotICAgIH0KLQorICAg
IG1fZm9udExvYWRpbmdUaW1lciA9IG1ha2VVbmlxdWU8VGltZXI+KCp0aGlzLCAmQ1NTRm9udFNl
bGVjdG9yOjpmb250TG9hZGluZ1RpbWVyRmlyZWQpOwogICAgIEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuYWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRGb250TW9kaWZp
ZWRPYnNlcnZlcihtX2ZvbnRNb2RpZmllZE9ic2VydmVyKTsKICAgICBMT0coRm9udHMsICJDU1NG
b250U2VsZWN0b3IgJXAgY3RvciIsIHRoaXMpOwpAQCAtMjgxLDIyICsyNzAsMjEgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkKICAgICBkaXNwYXRjaEludmFs
aWRhdGlvbkNhbGxiYWNrcygpOwogfQogCi1PcHRpb25hbDxBdG9tU3RyaW5nPiBDU1NGb250U2Vs
ZWN0b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8U3RyaW5n
PiBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAg
YXV0byBwbGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNjcmlwdGlvbjo6cGxhdGZvcm1SZXNvbHZlR2Vu
ZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0KCksIGZvbnREZXNjcmlwdGlvbi5jb21w
dXRlZExvY2FsZSgpLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoIXBsYXRmb3JtUmVzdWx0LmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gcGxhdGZvcm1SZXN1bHQ7CisgICAgICAgIHJldHVybiBwbGF0
Zm9ybVJlc3VsdC5zdHJpbmcoKTsKIAogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgY29uc3QgYXV0byYgc2V0dGluZ3MgPSBtX2NvbnRleHQt
PnNldHRpbmdzVmFsdWVzKCk7CiAKLSAgICBVU2NyaXB0Q29kZSBzY3JpcHQgPSBmb250RGVzY3Jp
cHRpb24uc2NyaXB0KCk7Ci0gICAgYXV0byBmYW1pbHlOYW1lSW5kZXggPSBtX2ZvbnRGYW1pbHlO
YW1lcy5maW5kKGZhbWlseU5hbWUpOworICAgIGF1dG8gZmFtaWx5TmFtZUluZGV4ID0gZmFtaWx5
TmFtZXNEYXRhLT5maW5kKGZhbWlseU5hbWUpOwogICAgIGlmIChmYW1pbHlOYW1lSW5kZXggIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgaWYgKGF1dG8gZmFtaWx5U3RyaW5nID0gc2V0dGluZ3MuZm9u
dEdlbmVyaWNGYW1pbGllcy5mb250RmFtaWx5KHN0YXRpY19jYXN0PEZhbWlseU5hbWVzSW5kZXg+
KGZhbWlseU5hbWVJbmRleCksIHNjcmlwdCkpCi0gICAgICAgICAgICByZXR1cm4gQXRvbVN0cmlu
ZygqZmFtaWx5U3RyaW5nKTsKKyAgICAgICAgaWYgKGF1dG8gZmFtaWx5U3RyaW5nID0gc2V0dGlu
Z3MuZm9udEdlbmVyaWNGYW1pbGllcy5mb250RmFtaWx5KHN0YXRpY19jYXN0PEZhbWlseU5hbWVz
SW5kZXg+KGZhbWlseU5hbWVJbmRleCksIGZvbnREZXNjcmlwdGlvbi5zY3JpcHQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gKmZhbWlseVN0cmluZzsKICAgICB9CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwpAQCAtMzA4LDkgKzI5Niw5IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpm
b250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAgICAg
QVNTRVJUKCFtX2J1aWxkSXNVbmRlcndheSB8fCBtX2NvbXB1dGluZ1Jvb3RTdHlsZUZvbnRDb3Vu
dCk7CiAKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgKGFuZCBGaXJlZm94KSBzYXlzIHVzZXIgc3Bl
Y2lmaWVkIGdlbmVyaWMgZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRjLikgc2hvdWxkIGJlIHJlc29s
dmVkIGJlZm9yZSB0aGUgQGZvbnQtZmFjZSBsb29rdXAgdG9vLgotICAgIGJvb2wgcmVzb2x2ZUdl
bmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gbV9mb250RmFtaWx5TmFtZXNbc3RhdGlj
X2Nhc3Q8aW50PihGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseSldOworICAgIGJvb2wg
cmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gZmFtaWx5TmFtZXNEYXRh
LT5hdChzdGF0aWNfY2FzdDxpbnQ+KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5KSk7
CiAKLSAgICBBdG9tU3RyaW5nIGZhbWlseUZvckxvb2t1cCA9IGZhbWlseU5hbWU7CisgICAgU3Ry
aW5nIGZhbWlseUZvckxvb2t1cCA9IGZhbWlseU5hbWUuc3RyaW5nKCk7CiAgICAgT3B0aW9uYWw8
Rm9udERlc2NyaXB0aW9uPiBvdmVycmlkZUZvbnREZXNjcmlwdGlvbjsKICAgICBjb25zdCBGb250
RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCA9ICZmb250RGVzY3JpcHRpb247
CiAgICAgYXV0byByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWlseSA9IFsmXSgpIHsKQEAgLTMy
NCw3ICszMTIsNyBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZh
bWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgogICAgIGF1dG8qIGZhY2UgPSBt
X2Nzc0ZvbnRGYWNlU2V0LT5mb250RmFjZShmb250RGVzY3JpcHRpb25Gb3JMb29rdXAtPmZvbnRT
ZWxlY3Rpb25SZXF1ZXN0KCksIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGZhY2UpIHsKICAg
ICAgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1
cC5zdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50LCBmYW1pbHlGb3JMb29rdXAsIHRydWUpOwogICAg
ICAgICByZXR1cm4gZmFjZS0+Zm9udFJhbmdlcygqZm9udERlc2NyaXB0aW9uRm9yTG9va3VwKTsK
ICAgICB9CiAKQEAgLTMzMiwyMCArMzIwLDIwIEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9y
Ojpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAg
ICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5KCk7CiAgICAgYXV0byBmb250ID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KCpmb250RGVzY3JpcHRpb25Gb3JM
b29rdXAsIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkK
LSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1
bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCAhIWZvbnQpOworICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50LCBmYW1pbHlGb3JM
b29rdXAsICEhZm9udCk7CiAgICAgcmV0dXJuIEZvbnRSYW5nZXMgeyBXVEZNb3ZlKGZvbnQpIH07
CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGluZ0FuZENsZWFyRm9udHMoKQog
ewogICAgIGlmIChtX2lzU3RvcHBlZCkgewotICAgICAgICBBU1NFUlQoIW1fZm9udExvYWRpbmdU
aW1lci5pc0FjdGl2ZSgpKTsKICAgICAgICAgQVNTRVJUKG1fZm9udHNUb0JlZ2luTG9hZGluZy5p
c0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9pc1N0b3BwZWQgPSB0
cnVlOwotICAgIG1fZm9udExvYWRpbmdUaW1lci5zdG9wKCk7CisgICAgbV9mb250TG9hZGluZ1Rp
bWVyLT5zdG9wKCk7CisgICAgbV9mb250TG9hZGluZ1RpbWVyID0gbnVsbHB0cjsKIAogICAgIGlm
IChpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkgewogICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKQEAgLTM3NCw4ICszNjIsOCBAQCB2
b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVkRm9udCYgZm9u
dCkKICAgICAvLyBkZWNyZW1lbnRSZXF1ZXN0Q291bnQoKSBpbiBmb250TG9hZGluZ1RpbWVyRmly
ZWQoKSBhbmQgaW4gc3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCkuCiAgICAgZG9jdW1lbnQuY2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udCk7CiAKLSAgICBp
ZiAoIW1faXNGb250TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9mb250TG9hZGluZ1RpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgIG1fZm9udExvYWRpbmdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAg
ICBpZiAoIW1faXNGb250TG9hZGluZ1N1c3BlbmRlZCAmJiAhbV9mb250TG9hZGluZ1RpbWVyLT5p
c0FjdGl2ZSgpKQorICAgICAgICBtX2ZvbnRMb2FkaW5nVGltZXItPnN0YXJ0T25lU2hvdCgwX3Mp
OwogfQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3VzcGVuZEZvbnRMb2FkaW5nVGltZXIoKQpA
QCAtNDUxLDcgKzQzOSw4IEBAIFJlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNr
Rm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0CiAKIHZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjpzdG9wKCkKIHsKLSAgICBtX2ZvbnRMb2FkaW5nVGltZXIuc3RvcCgpOworICAg
IGlmICghbV9pc1N0b3BwZWQpCisgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci0+c3RvcCgpOwog
fQogCiB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKQpA
QCAtNDYwLDcgKzQ0OSw4IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdXNwZW5kKFJlYXNvbkZv
clN1c3BlbnNpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNGb250TG9hZGluZ1N1c3Bl
bmRlZCA9IHRydWU7Ci0gICAgbV9mb250TG9hZGluZ1RpbWVyLnN0b3AoKTsKKyAgICBpZiAoIW1f
aXNTdG9wcGVkKQorICAgICAgICBtX2ZvbnRMb2FkaW5nVGltZXItPnN0b3AoKTsKIH0KIAogdm9p
ZCBDU1NGb250U2VsZWN0b3I6OnJlc3VtZSgpCkBAIC00NjgsOCArNDU4LDkgQEAgdm9pZCBDU1NG
b250U2VsZWN0b3I6OnJlc3VtZSgpCiAgICAgaWYgKCFtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQp
CiAgICAgICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghbV9pc1N0b3BwZWQpOwogICAgIGlmICgh
bV9mb250c1RvQmVnaW5Mb2FkaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbV9mb250TG9hZGluZ1Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgICAgICBtX2ZvbnRMb2FkaW5nVGltZXItPnN0YXJ0
T25lU2hvdCgwX3MpOwogCiAgICAgbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkID0gZmFsc2U7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKaW5kZXggYTlmYTI4ZmY3YTU0MWY0ODg2
OGE1YzU1MDBiOGQ5ZDNjNGFmYTA0Mi4uZjI2NDM0MTUwM2FhZDUyZTlkMjUzODliNDc5ODgyMjJj
NmYxNDJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaApAQCAtMTAxLDcgKzEw
MSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG9wcG9ydHVuaXN0aWNhbGx5U3RhcnRGb250RGF0
YVVSTExvYWRpbmcoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseSkgZmluYWw7CiAKLSAgICBPcHRpb25hbDxBdG9tU3RyaW5nPiByZXNvbHZlR2Vu
ZXJpY0ZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHkpOworICAgIE9wdGlvbmFsPFN0cmluZz4gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJiBmYW1pbHkpOwogCiAgICAgLy8gQ1NTRm9udEZh
Y2U6OkNsaWVudAogICAgIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZSYpIGZpbmFsOwpAQCAt
MTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiAKICAgICBDU1NGb250RmFjZVNldDo6Rm9udE1vZGlm
aWVkT2JzZXJ2ZXIgbV9mb250TW9kaWZpZWRPYnNlcnZlcjsKIAotICAgIFRpbWVyIG1fZm9udExv
YWRpbmdUaW1lcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+IG1fZm9udExvYWRpbmdUaW1l
cjsKICAgICBib29sIG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCB7IGZhbHNlIH07CiAKICAgICB1
bnNpZ25lZCBtX3VuaXF1ZUlkOwpAQCAtMTQyLDggKzE0Miw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2NyZWF0aW5nRm9udCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2J1aWxkSXNVbmRlcndheSB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07Ci0KLSAgICBXVEY6OlZl
Y3RvcjxBdG9tU3RyaW5nPiBtX2ZvbnRGYW1pbHlOYW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggODlkODk4
MjBhNzY0NzdkMDE4ZjNjZmUzNDE5YzcxNmRjNjQ1NTBhOC4uYTgwN2Y1OGMwZTFhNDNiYjdjMTk4
MmQ4ZDAxNGY3ODE1YTdhOTcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2
ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5j
cHAKQEAgLTY3LDggKzY3LDYgQEAgQWN0aXZlRE9NT2JqZWN0OjpBY3RpdmVET01PYmplY3QoRG9j
dW1lbnQmIGRvY3VtZW50KQogCiBBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QoKQog
ewotICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1fY3Jl
YXRpb25UaHJlYWQpKTsKLQogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBtYXkgYmUgaW5oZXJpdGVk
IGJ5IGEgc3ViLWNsYXNzIHdob3NlIGxpZmUtY3ljbGUKICAgICAvLyBleGNlZWRzIHRoYXQgb2Yg
dGhlIGFzc29jaWF0ZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dC4gSW4gdGhvc2UgY2FzZXMsCiAg
ICAgLy8gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0IHdvdWxkL3Nob3VsZCBoYXZlIGJlZW4gbnVs
bGlmaWVkIGJ5CkBAIC03OCw2ICs3Niw3IEBAIEFjdGl2ZURPTU9iamVjdDo6fkFjdGl2ZURPTU9i
amVjdCgpCiAgICAgaWYgKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIEFTU0VSVChjYW5DdXJyZW50VGhyZWFkQWNjZXNzVGhyZWFkTG9jYWxEYXRhKG1f
Y3JlYXRpb25UaHJlYWQpKTsKICAgICBBU1NFUlQobV9zdXNwZW5kSWZOZWVkZWRXYXNDYWxsZWQp
OwogICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KTsKICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPndpbGxEZXN0cm95QWN0aXZlRE9NT2Jq
ZWN0KCp0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCBj
N2RhNTQ5M2ZjMTQ2NDAxOGE3MWFiMjE4OWZhNTVmNmI2YmIzMmFmLi5iNmUzMGM1YzNlNGQ4MjE4
NGZkOTQ4NDlhOWMyNWQxYjhiYzI2NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5oCkBAIC03Miw3ICs3Miw3IEBAIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9u
dFJlZiwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCiAK
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEZvbnQpOwotY2xhc3MgRm9u
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnQ+IHsKK2NsYXNzIEZvbnQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Rm9udD4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhf
SEVBUF9JREVOVElGSUVSKEZvbnQpOwogcHVibGljOgogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBs
YXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAKaW5kZXggZmIwZjg4ZGE3OTFhM2E2MWM1N2JhY2MxYWY3MmI0NmYwY2M5MDk2ZC4u
NWZkNDU1NWFjZmM0NDlhNmY4NWEzMjBiMWRlYjVkZGMzNmFhZjljYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC00NiwxNSArNDYsNiBA
QAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvUmVj
dXJzaXZlTG9ja0FkYXB0ZXIuaD4KLQotc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExvY2s7Ci0K
LSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzU2LDcgQEAgRm9udENhY2hlJiBGb250
Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAgICA6IG1f
cHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVk
ZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9udENhY2hl
OjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtNzMsNyArNjQsNyBA
QCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoKSB7IH0KLSAg
ICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25z
dCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzKQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKICAgICAgICAgOiBtX2ZvbnRE
ZXNjcmlwdGlvbktleShkZXNjcmlwdGlvbikKICAgICAgICAgLCBtX2ZhbWlseShmYW1pbHkpCiAg
ICAgICAgICwgbV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VG
ZWF0dXJlcyA6IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKQEAgLTk5LDggKzkwLDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJl
RXF1YWwobV9mYW1pbHksIG90aGVyLm1fZmFtaWx5KTsKICAgICB9CiAKKyAgICB2b2lkIGlzb2xh
dGUoKSB7IG1fZmFtaWx5ID0gbV9mYW1pbHkuaXNvbGF0ZWRDb3B5KCk7IH0KKwogICAgIEZvbnRE
ZXNjcmlwdGlvbktleSBtX2ZvbnREZXNjcmlwdGlvbktleTsKLSAgICBBdG9tU3RyaW5nIG1fZmFt
aWx5OworICAgIFN0cmluZyBtX2ZhbWlseTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZm9u
dEZhY2VGZWF0dXJlczsKICAgICBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIG1f
Zm9udEZhY2VDYXBhYmlsaXRpZXM7CiB9OwpAQCAtMTQxLDM5ICsxMzQsMzMgQEAgc3RydWN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEZvbnRQbGEKIAogdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSwgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+LCBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzPiBGb250UGxhdGZv
cm1EYXRhQ2FjaGU7CiAKK3N0YXRpYyBSZWN1cnNpdmVMb2NrIGdQbGF0Zm9ybURhdGFDYWNoZUxv
Y2s7CisKIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSgpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGFDYWNoZT4g
Y2FjaGU7CiAgICAgcmV0dXJuIGNhY2hlOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2Fj
aGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKK09w
dGlvbmFsPEFTQ0lJTGl0ZXJhbD4gRm9udENhY2hlOjphbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJv
eWVkPGNvbnN0IEF0b21TdHJpbmc+IGFyaWFsKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGNvdXJpZXIoIkNvdXJpZXIiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiBjb3VyaWVyTmV3KCJDb3VyaWVyIE5ldyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21TdHJpbmc+IGhlbHZldGljYSgiSGVsdmV0aWNhIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRv
bVN0cmluZz4gdGltZXMoIlRpbWVzIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4g
dGltZXNOZXdSb21hbigiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotCi0gICAgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1TcGVjaWZpY0FsdGVy
bmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKTsKLSAgICBpZiAo
IXBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUuaXNOdWxsKCkpCisgICAgaWYgKGF1dG8gcGxhdGZv
cm1TcGVjaWZpY0FsdGVybmF0ZSA9IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlO
YW1lKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU3BlY2lmaWNBbHRlcm5hdGU7CiAKICAgICBz
d2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKICAgICBjYXNlIDU6CiAgICAgICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiYXJpYWwiKSkKLSAgICAg
ICAgICAgIHJldHVybiBoZWx2ZXRpY2E7CisgICAgICAgICAgICByZXR1cm4gIkhlbHZldGljYSJf
czsKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUs
ICJ0aW1lcyIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzTmV3Um9tYW47CisgICAgICAgICAg
ICByZXR1cm4gIlRpbWVzIE5ldyBSb21hbiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA3
OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
ImNvdXJpZXIiKSkKLSAgICAgICAgICAgIHJldHVybiBjb3VyaWVyTmV3OworICAgICAgICAgICAg
cmV0dXJuICJDb3VyaWVyIE5ldyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA5OgogICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgImhlbHZl
dGljYSIpKQotICAgICAgICAgICAgcmV0dXJuIGFyaWFsOworICAgICAgICAgICAgcmV0dXJuICJB
cmlhbCJfczsKICAgICAgICAgYnJlYWs7CiAjaWYgIU9TKFdJTkRPV1MpCiAgICAgLy8gT24gV2lu
ZG93cywgQ291cmllciBOZXcgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgaXMgYWx3YXlzIHByZXNl
bnQgYW5kCkBAIC0xODMsMzMgKzE3MCwyOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6
OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAv
LyBvbmx5IGJlIHRyaWVkIGlmIENvdXJpZXIgTmV3IGlzIG5vdCBmb3VuZC4KICAgICBjYXNlIDEx
OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
ImNvdXJpZXIgbmV3IikpCi0gICAgICAgICAgICByZXR1cm4gY291cmllcjsKKyAgICAgICAgICAg
IHJldHVybiAiQ291cmllciJfczsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIDE1
OgogICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwg
InRpbWVzIG5ldyByb21hbiIpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVzOworICAgICAgICAg
ICAgcmV0dXJuICJUaW1lcyJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJu
IG51bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotRm9udFBsYXRmb3Jt
RGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBwYXNzZWRGYW1pbHlO
YW1lLAorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcm
IHBhc3NlZEZhbWlseU5hbWUsCiAgICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZh
Y2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNh
cGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRp
ZgotICAgIAogI2lmIE9TKFdJTkRPV1MpICYmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKICAg
ICAvLyBMZWFkaW5nICJAIiBpbiB0aGUgZm9udCBuYW1lIGVuYWJsZXMgV2luZG93cyB2ZXJ0aWNh
bCBmbG93IGZsYWcgZm9yIHRoZSBmb250LgogICAgIC8vIEJlY2F1c2Ugd2UgZG8gdmVydGljYWwg
ZmxvdyBieSBvdXJzZWx2ZXMsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBXaW5kb3dzIGZlYXR1
cmUuCi0gICAgLy8gSUUgZGlzcmVnYXJkcyAiQCIgcmVnYXJkbGVzcyBvZiB0aGUgb3JpZW50YXRv
aW4sIHNvIHdlIGZvbGxvdyB0aGUgYmVoYXZpb3IuCi0gICAgY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSA9IChwYXNzZWRGYW1pbHlOYW1lLmlzRW1wdHkoKSB8fCBwYXNzZWRGYW1pbHlOYW1l
WzBdICE9ICdAJykgPwotICAgICAgICBwYXNzZWRGYW1pbHlOYW1lIDogQXRvbVN0cmluZyhwYXNz
ZWRGYW1pbHlOYW1lLmltcGwoKS0+c3Vic3RyaW5nKDEpKTsKKyAgICAvLyBJRSBkaXNyZWdhcmRz
ICJAIiByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRhdGlvbiwgc28gd2UgZm9sbG93IHRoZSBiZWhh
dmlvci4KKyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSBwYXNzZWRGYW1pbHlOYW1lLnN1
YnN0cmluZyhwYXNzZWRGYW1pbHlOYW1lWzBdID09ICdAJyA/IDEgOiAwKTsKICNlbHNlCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWU7CisgICAgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKICNlbmRpZgogCiAgICAg
c3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CkBAIC0yMjMsMTQgKzIwNSwxNCBAQCBGb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmbwogICAgIGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hl
KCkuYWRkKGtleSwgbnVsbHB0cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRv
ciBpdCA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAga2V5Lmlzb2xhdGUoKTsKICAgICAgICAgaXQtPnZhbHVlID0gY3JlYXRlRm9u
dFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUsIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKIAogICAgICAgICBpZiAoIWl0LT52YWx1ZSAmJiAh
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lKSB7CiAgICAgICAgICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0
byBmaW5kIGEgZm9udC4gIFdlIGhhdmUgYSBzbWFsbCBzZXQgb2YgZm9udHMgdGhhdCB3ZSBhbGlh
cyB0byBvdGhlciBuYW1lcywKICAgICAgICAgICAgIC8vIGUuZy4sIEFyaWFsL0hlbHZldGljYSwg
Q291cmllci9Db3VyaWVyIE5ldywgZXRjLiAgVHJ5IGxvb2tpbmcgdXAgdGhlIGZvbnQgdW5kZXIg
dGhlIGFsaWFzZWQgbmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0
ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgICAgICAgICAgaWYg
KCFhbHRlcm5hdGVOYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgRm9udFBsYXRmb3Jt
RGF0YSogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgYWx0ZXJuYXRlTmFtZSwgZm9udEZhY2VGZWF0dXJl
cywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOworICAgICAgICAgICAgaWYgKGF1dG8gYWx0
ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvKiBmb250UGxhdGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCAqYWx0ZXJuYXRlTmFtZSwgZm9udEZh
Y2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMsIHRydWUpOwogICAgICAgICAgICAgICAg
IC8vIExvb2t1cCB0aGUga2V5IGluIHRoZSBoYXNoIHRhYmxlIGFnYWluIGFzIHRoZSBwcmV2aW91
cyBpdGVyYXRvciBtYXkgaGF2ZQogICAgICAgICAgICAgICAgIC8vIGJlZW4gaW52YWxpZGF0ZWQg
YnkgdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoKS4KICAg
ICAgICAgICAgICAgICBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKQEAg
LTMxMiw4ICsyOTQsMTAgQEAgY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEg
PSAyMDA7CiBjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9u
dERhdGEgPSA1MDsKIGNvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5h
Y3RpdmVGb250RGF0YSA9IDMwOwogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMs
IEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMs
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9u
dEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
U3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKwogICAgIGlmICghbV9wdXJnZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAg
ICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIApAQCAtMzI1LDEwICszMDksOCBA
QCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjbwogCiBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9y
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIHsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExv
Y2spOwotI2VuZGlmCi0gICAgCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
CiAgICAgYXV0byBhZGRSZXN1bHQgPSBjYWNoZWRGb250cygpLmVuc3VyZShwbGF0Zm9ybURhdGEs
IFsmXSB7CiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhKTsKICAgICB9
KTsKQEAgLTM0MCw2ICszMjIsOCBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKIAogdm9pZCBGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCiAgICAgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJl
c3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKICAgICB1
bnNpZ25lZCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01h
eFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERh
dGE7CiAKQEAgLTM1NywxNSArMzQxLDEzIEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGFJZk5lZWRlZCgpCiAKIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERh
dGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1f
bG9jayk7CisKICAgICBMT0coRm9udHMsICJGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0
YSgldSkiLCBwdXJnZUNvdW50KTsKIAogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21G
b250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CiAKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExv
Y2spOwotI2VuZGlmCi0KICAgICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8
UmVmPEZvbnQ+LCAyMD4gZm9udHNUb0RlbGV0ZTsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDog
Y2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewpAQCAtNDIxLDYgKzQwMyw3IEBAIHN0YXRpYyBib29s
IGtleXNNYXRjaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBhLCBjb25zdCBGb250Q2FzY2Fk
ZUNhY2hlS2V5JiBiCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNo
ZSgpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1fZm9udENh
c2NhZGVDYWNoZS5jbGVhcigpOwogfQogCkBAIC00MzcsMTIgKzQyMCwxOCBAQCBzdGF0aWMgRm9u
dENhc2NhZGVDYWNoZUtleSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJgogICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFt
aWx5Q291bnQoKTsKICAgICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1p
bHlDb3VudCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kp
Ci0gICAgICAgIGtleS5mYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5
QXQoaSkpOworICAgICAgICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9u
LmZhbWlseUF0KGkpLnN0cmluZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2Vs
ZWN0b3IgPyBmb250U2VsZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0
b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwog
ICAgIHJldHVybiBrZXk7CiB9CiAKK3N0YXRpYyB2b2lkIGlzb2xhdGVGb250Q2FzY2FkZUNhY2hl
S2V5KEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6
IGtleS5mYW1pbGllcykKKyAgICAgICAgZmFtaWx5ID0gZmFtaWx5Lmlzb2xhdGVkQ29weSgpOwor
fQorCiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUZvbnRDYXNjYWRlQ2FjaGVIYXNoKGNvbnN0IEZv
bnRDYXNjYWRlQ2FjaGVLZXkmIGtleSkKIHsKICAgICAvLyBGSVhNRTogU2hvdWxkIGhhc2ggdGhl
IGtleSBhbmQgdGhlIGZhbWlseSBuYW1lIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gbWFraW5nIGEg
aGFzaCBvdXQgb2Ygb3RoZXIgaGFzaGVzLgpAQCAtNDc5LDYgKzQ2OCw3IEBAIFJlZjxGb250Q2Fz
Y2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250
Q2FzY2FkZURlc2NyCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2go
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpc29sYXRlRm9udENh
c2NhZGVDYWNoZUtleShrZXkpOwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKICAgICBuZXdFbnRyeSA9IG1ha2VVbmlxdWU8Rm9udENhc2NhZGVDYWNoZUVu
dHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRT
ZWxlY3RvcikpKTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnkt
PmZvbnRzLmdldCgpOwpAQCAtNDk3LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBG
b250Q2FjaGU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2Ny
CiAKIHZvaWQgRm9udENhY2hlOjp1cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYg
Zm9udENhc2NhZGUsIFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVG
b250cyhyZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9u
KCksIFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDggQEAgc2l6
ZV90IEZvbnRDYWNoZTo6Zm9udENvdW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVG
b250Q291bnQoKQogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250
IDogY2FjaGVkRm9udHMoKS52YWx1ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVm
KCkpCkBAIC01MjIsNiArNTEyLDggQEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdD
bGllbnRzOwogCiB2b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50
KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9jayk7
CisKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZv
bnRTZWxlY3Rvcio+OwogCkBAIC01MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENs
aWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVu
dChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQ
bGF0Zm9ybURhdGFDYWNoZUxvY2spOworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NF
UlQoZ0NsaWVudHMtPmNvbnRhaW5zKCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4IEBAIHVu
c2lnbmVkIHNob3J0IEZvbnRDYWNoZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENhY2hlOjpp
bnZhbGlkYXRlKCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFD
YWNoZUxvY2spOworCiAgICAgaWYgKCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBs
YXRmb3JtRGF0YUNhY2hlKCkuaXNFbXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcg
KzU4MSw3IEBAIHZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlv
biYpCiB7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmgKaW5kZXggZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3
ZmYyZS4uM2RlNmFiMjQ0NzcwMjAwZWI3NmRjZDI1MTVkMGQyNmJiYmFhZGVlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywx
MyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlY3Vyc2l2ZUxvY2tBZGFwdGVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAt
NzksNyArODAsNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3Np
emUoZGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxl
Y3Rpb25SZXF1ZXN0KGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAg
ICwgbV9mbGFncyhtYWtlRmxhZ3NLZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxl
KGRlc2NyaXB0aW9uLnNwZWNpZmllZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2Ny
aXB0aW9uLnNwZWNpZmllZExvY2FsZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNl
dHRpbmdzKGRlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0
aW9uU2V0dGluZ3MoZGVzY3JpcHRpb24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAg
LTE1Nyw3ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAg
ICBGb250U2VsZWN0aW9uUmVxdWVzdCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6
YXJyYXk8dW5zaWduZWQsIDI+IG1fZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1f
bG9jYWxlOworICAgIFN0cmluZyBtX2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1f
ZmVhdHVyZVNldHRpbmdzOwogICAgIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNl
dHRpbmdzOwogfTsKQEAgLTE3OCw3ICsxNzksNyBAQCBzdHJ1Y3QgRm9udERlc2NyaXB0aW9uS2V5
SGFzaCB7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICBGb250RGVzY3JpcHRp
b25LZXkgZm9udERlc2NyaXB0aW9uS2V5OyAvLyBTaGFyZWQgd2l0aCB0aGUgbG93ZXIgbGV2ZWwg
Rm9udENhY2hlIChjYWNoaW5nIEZvbnQgb2JqZWN0cykKLSAgICBWZWN0b3I8QXRvbVN0cmluZywg
Mz4gZmFtaWxpZXM7CisgICAgVmVjdG9yPFN0cmluZywgMz4gZmFtaWxpZXM7CiAgICAgdW5zaWdu
ZWQgZm9udFNlbGVjdG9ySWQ7CiAgICAgdW5zaWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07
CkBAIC0yMjQsMTIgKzIyNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGV4
aXN0cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBvZiBwcmVp
bnN0YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50byBwbGF5
IHdoZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWlseSBuYW1l
IGFzIGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3Ry
aW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3Qg
U3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
QXRvbVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMg
PSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2Fw
YWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
PSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZv
bnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIFJl
ZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFkZENsaWVu
dChGb250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImKTsK
QEAgLTI0Nyw3ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2FjaGVzKCk7
CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRp
b25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9t
U3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQm
LCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QRU5U
WVBFX1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyODQsMTggQEAgcHJpdmF0ZToKICAgICBSZWY8Rm9u
dENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJWE1FOiBU
aGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQbGF0Zm9y
bURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGll
cyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUg
PSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9u
dEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0sIGJvb2wg
Y2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRD
YXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKLSAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNv
bnN0IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9u
dEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFj
ZUNhcGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBhbHRl
cm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25hbDxBU0NJ
SUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKTsKKwor
ICAgIFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9udENhY2hl
PiBtX3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAgICAgYm9v
bCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9Owog
CiAgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDksNyArMzEy
LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRh
PiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1p
bHksIG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9u
dERlc2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAKICNpZiAh
UExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYyZGJjOTUw
MjMwMzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTExYTg1ZGI5
Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmgKQEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFya0hlaWdo
dChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9u
dCgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWdu
ZWQpIGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVkKSBjb25z
dDsKKyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxiYWNrUmFu
Z2VzSW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JGaXJzdFJh
bmdlKCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMy
LCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAKICAgICBj
b25zdCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIq
LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGluZSBjb25z
dCBGb250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVybiBtX2Zv
bnRzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBjb25zdCBG
b250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51bGwodW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJldHVybiBt
X2ZvbnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwgaW5kZXgp
OworICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250RGVzY3Jp
cHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250
Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JDaGFyYWN0
ZXIobV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxpbmUgY29u
c3QgRm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJhbmdlKG1f
Zm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6OmlzRml4ZWRQ
aXRjaCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4Y2Q1YzI5
YWEwMmMzMTkyNDgwNDNmYTc0NjRhZGMuLjE4MWFhM2EzODAzYjIyOTcxZmMxOTg3ZWZkM2ZhNDA0
ODBlY2FlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEwIEBAIGJv
b2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRvU2l6aW5n
KGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5H
KQogCi1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1YWwoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikKK2Jvb2wg
Rm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBTdHJpbmcm
IGZhbWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5MS5pc051
bGwoKSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5pc051bGwo
KSAmJiBmYW1pbHkyLmlzTnVsbCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1p
bHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFtaWx5MjsK
QEAgLTExMCwxNyArMTEyLDE1IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5
TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAgcmV0dXJu
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7CiB9CiAK
LXVuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWls
eU5hbWVIYXNoKGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFtaWx5LmV4
aXN0aW5nSGFzaCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aDo6aGFzaChmYW1pbHkpOworICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhh
c2goZmFtaWx5LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGZhbWlseSk7CiB9CiAKIFN0cmlu
ZyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYg
ZmFtaWx5KQogeworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFt
aWx5OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicp
KQogICAgICAgICByZXR1cm4gZmFtaWx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBhN2RmMjUy
OGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdkMmYwMTU4
YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3LDggQEAg
cHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8QXRv
bVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQogCi0gICAg
c3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3Qg
QXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChjb25zdCBB
dG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5TmFtZUhh
c2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlOYW1lKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1NzYzNTIz
NC4uNmIyMzY1Njg1MGU4YjAyNjE0NGI3MWVlZjkxZTgxZjZhYmRjYjYzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAK
QEAgLTEwNywxOCArMTA3LDIwIEBAIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMo
UmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB9CiAKIEZvbnRDYXNjYWRlRm9u
dHM6OkZvbnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRh
KQotICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQorICAgIDogbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzU2l6ZSgxKQorICAgICwgbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQog
ICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCiAgICAgLCBtX2dlbmVyYXRpb24oRm9udENh
Y2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCiAgICAgLCBtX2lzRm9yUGxhdGZvcm1Gb250
KHRydWUpCiB7Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2Vz
KEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEp
KSk7CisgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhGb250UmFuZ2VzKEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpKSk7
CiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkgPSBkZWZhdWx0Owog
CiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2tJ
ZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKICAgICBhdXRvJiBw
cmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApOwog
ICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwogICAgIGlmIChu
dW1SYW5nZXMgPT0gMSkKQEAgLTEyOSw2ICsxMzEsNyBAQCB2b2lkIEZvbnRDYXNjYWRlRm9udHM6
OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQogCiBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgY29uc3QK
IHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9yIChhdXRvJiBm
b250UmFuZ2VzIDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzKSB7CiAgICAgICAgIGlmIChmb250
UmFuZ2VzLmlzTG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzMsMTQg
KzE3NiwyMSBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogCiBjb25zdCBGb250UmFuZ2VzJiBG
b250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgaWYgKGlu
ZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1f
cmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07CisgICAgLy8gbV9yZWFsaXplZEZhbGxiYWNr
UmFuZ2VzIGlzIGEgbGlua2VkIGxpc3QgYW5kIGl0cyBsZW5ndGggb25seSBncm93cywKKyAgICAv
LyBpdCBpcyBuZXZlciBvdGhlcndpc2UgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHNh
ZmUgdG8gYWNjZXNzCisgICAgLy8gZXhpc3Rpbmcgbm9kZXMgd2l0aG91dCB0YWtpbmcgdGhlIGxv
Y2ssIHNvIHdlIGFzc2VydCB0aGF0IHRoZSBsb2NrIGlzCisgICAgLy8gaGVsZCBhZnRlciB0aGlz
IGZhc3QgcmV0dXJuIHBhdGguCisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzU2l6ZSkgeworICAgICAgICBhdXRvIGl0ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmJl
Z2luKCk7CisgICAgICAgIHN0ZDo6YWR2YW5jZShpdCwgaW5kZXgpOworICAgICAgICByZXR1cm4g
Kml0OworICAgIH0KIAotICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5n
ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKyAgICBBU1NFUlQoaW5k
ZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSk7CiAgICAgQVNTRVJUKEZvbnRDYWNo
ZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKLSAgICBtX3Jl
YWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0byYgZm9u
dFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CisgICAgYXV0byBmb250
UmFuZ2VzID0gRm9udFJhbmdlcygpOwogCiAgICAgaWYgKCFpbmRleCkgewogICAgICAgICBmb250
UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVhbGl6ZWRG
YWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0xODgsMjMgKzE5OCw0MiBA
QCBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5n
ZXNBdChjb25zdCBGb250Q2FzY2FkZURlcwogICAgICAgICAgICAgZm9udFJhbmdlcyA9IG1fZm9u
dFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFyZEZhbWls
eSk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgZm9udFJh
bmdlcyA9IEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0RmFsbGJh
Y2tGb250KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBkZXNjcmlw
dGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdlcyA9IHJl
YWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRl
eCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOworCisgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVs
bCgpICYmIG1fZm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0UmVhbGl6
ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOwor
CisgICAgICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQo
KTsKKyAgICAgICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1fZm9udFNl
bGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKyttX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9IEZvbnRS
YW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBmb250U2Vs
ZWN0b3JGYWxsYmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0
aXZlRmFtaWx5Q291bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0RmFsbGJh
Y2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250U2VsZWN0
b3IuZ2V0KCkpOworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2soV1RGTW92
ZShmb250UmFuZ2VzKSk7CisgICAgKyttX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplOworICAg
IHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYmFjaygpOworfQogCi0gICAgaWYgKGZv
bnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNTRVJUKG1f
bGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlD
b3VudCgpKTsKK2Jvb2wgRm9udENhc2NhZGVGb250czo6ZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJh
Y2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2Vz
QXQoZGVzY3JpcHRpb24sIGluZGV4KS5pc051bGwoKTsKK30KIAotICAgICAgICB1bnNpZ25lZCBm
b250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0g
ZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZvbnRTZWxl
Y3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENvdW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RSZWFsaXpl
ZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1fZm9udFNl
bGVjdG9yLT5mYWxsYmFja0ZvbnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFsbGJhY2tJ
bmRleCkpOwotICAgIH0KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JDaGFy
YWN0ZXIoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVuc2lnbmVk
IGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
SWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICBy
ZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5mb250Rm9y
Q2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdlczsKK2NvbnN0
IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKKyAgICByZXR1
cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JGaXJzdFJh
bmdlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBjaGFyYWN0
ZXIsIFVDaGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQpAQCAtMzIzLDEwICsz
NTIsMTAgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0ZXJXaXRo
R2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3QKICAgICByZXR1cm4gZGF0YTsKIH0KIAot
c3RhdGljIGNvbnN0IEZvbnQqIGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRlRm9udHMm
IGZvbnRDYXNjYWRlRm9udHMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZp
bmRCZXN0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGZhbGxiYWNrSW5k
ZXggPSAwOyA7ICsrZmFsbGJhY2tJbmRleCkgewotICAgICAgICBhdXRvJiBmb250UmFuZ2VzID0g
Zm9udENhc2NhZGVGb250cy5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFs
bGJhY2tJbmRleCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tS
YW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CiAgICAgICAgIGlmIChmb250UmFu
Z2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8qIGN1cnJlbnRG
b250ID0gZm9udFJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBFeHRlcm5h
bFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkZvcmJpZCkuZm9udDsKQEAgLTM0MiwxMCArMzcxLDEw
IEBAIHN0YXRpYyBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2FzY2FkZUZv
bnRzJiBmb250Q2FzY2FkZUZvbnRzLCBjb25zCiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRz
OjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlhbnQsIGJv
b2wgc3lzdGVtRmFsbGJhY2tTaG91bGRCZUludmlzaWJsZSkKIHsKLSAgICBjb25zdCBGb250KiBm
b250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoKnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFyYWN0ZXIp
OworICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmaW5kQmVzdEZhbGxiYWNrRm9udChkZXNjcmlwdGlv
biwgY2hhcmFjdGVyKTsKIAogICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9ICZyZWFsaXpl
RmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2UoKTsKKyAg
ICAgICAgZm9udCA9ICZmb250Rm9yRmlyc3RSYW5nZShkZXNjcmlwdGlvbik7CiAKICAgICBhdXRv
IHN5c3RlbUZhbGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3Rl
cihjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250ID8gSXNGb3JQbGF0
Zm9ybUZvbnQ6OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAgaWYgKCFzeXN0ZW1G
YWxsYmFja0ZvbnQpCkBAIC00ODgsOSArNTE3LDkgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+
IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQK
IAogR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250VmFy
aWFudCB2YXJpYW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJU
KHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayht
X2xvY2spOwogICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCiAgICAgICAgIHJldHVy
biBnbHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKIApAQCAtNTE2
LDYgKzU0NSw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENhc2NhZGVG
b250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVmZXJlbmNl
IGZhbGxiYWNrIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVGb250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZiYTVjMTgz
YTU4ZjViYWQzOGQuLjk4M2IyMGZlMTdiZGVhZWYxNTk2ZWRiYzY1OGVlMzBiNWFiZmQ0MzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRl
ICJXaWR0aENhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExp
c3QuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVh
ZC5oIgpAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRGb250R2x5
cGhQYWdlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2Fz
Y2FkZUZvbnRzKTsKLWNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291bnRlZDxG
b250Q2FzY2FkZUZvbnRzPiB7CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShGb250Q2FzY2FkZUZvbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRI
X0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTcwLDcgKzcy
LDkgQEAgcHVibGljOgogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBjb25zdCB7
IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAogICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250KGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBG
b250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgYm9vbCBmYWxsYmFja1Jhbmdl
c0FyZU51bGwoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkKTsKKyAgICBj
b25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
LCB1bnNpZ25lZCBmYWxsYmFja1Jhbmdlc0luZGV4LCBVQ2hhcjMyKTsKKyAgICBjb25zdCBGb250
JiBmb250Rm9yRmlyc3RSYW5nZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7CiAKICAg
ICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc4LDEwICs4MiwxNCBAQCBwcml2
YXRlOgogICAgIEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7CiAgICAg
Rm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBjb25zdCBG
b250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwg
VUNoYXIzMik7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNrKFVDaGFy
MzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9vbCBzeXN0
ZW1GYWxsYmFja1Nob3VsZEJlSW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
VmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9udFZhcmlh
bnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwKTsKIAotICAgIFZlY3RvcjxGb250UmFuZ2Vz
LCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
Rm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworCisgICAgU3RkTGlzdDxGb250UmFu
Z2VzPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXplZEZhbGxi
YWNrSW5kZXggeyAwIH07CiAKICAgICBjbGFzcyBHbHlwaFBhZ2VDYWNoZUVudHJ5IHsKQEAgLTEx
NCw2ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbjsK
ICAgICBQaXRjaCBtX3BpdGNoIHsgVW5rbm93blBpdGNoIH07CiAgICAgYm9vbCBtX2lzRm9yUGxh
dGZvcm1Gb250IHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9sb2NrOwogfTsKIAogaW5s
aW5lIGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtMTI1LDcgKzEzNCwxMCBAQCBpbmxpbmUgYm9v
bCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZGVzY3JpcAogCiBpbmxpbmUgY29uc3QgRm9udCYgRm9udENhc2NhZGVGb250czo6cHJp
bWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZWRQcmltYXJ5Rm9udCkK
KyAgICAgICAgcmV0dXJuICptX2NhY2hlZFByaW1hcnlGb250OworCisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAg
ICAgICBhdXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3Jp
cHRpb24sIDApOwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6
OkFsbG93KS5mb250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
U2VsZWN0b3IuaAppbmRleCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUw
Li4xZjFmZGJiMGYxZTZhNTBhNDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcs
NyBAQAogCiAjaW5jbHVkZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xh
c3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFz
cyBGb250U2VsZWN0b3IgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9y
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRj
ZDQ2ZmVhYjJiMWJkN2ZhN2ZlMWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODEx
MTY5M2JkNTZmYWNmNWNkMTk1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZS5oCkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgog
I2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5
cGhEYXRhIHsKIC8vIEEgR2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5
cGhEYXRhIG1hcHBpbmdzIGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMg
aW4gdGhlIFVuaWNvZGUgY29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3Rh
cnRpbmcgZnJvbSAwIGFuZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBn
bHlwaHMuCi1jbGFzcyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsK
K2NsYXNzIEdseXBoUGFnZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQm
IGZvbnQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4MmY3YzJj
ZjhiMjM0MjNiYzcwNDhhMzg5NmE3Y2NhNGVhMDQ4Li5kZTE0NzE2ZmIxZDZmYTVhOGFmNTQ1MTU2
ODBlOGZmNmY4MWEwMTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTI5LDgg
KzEyOSw4IEBAIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICYmICghcHJlZmVyQ29s
b3JlZEZvbnQgfHwgYmFzZUZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkp
KQogICAgICAgICByZXR1cm4gYmFzZUZvbnQ7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAh
ZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQq
IGZhbGxiYWNrRm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihjaGFy
YWN0ZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0FyZU51bGwo
aSk7ICsraSkgeworICAgICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmb250Rm9yQ2hh
cmFjdGVyKGksIGNoYXJhY3Rlcik7CiAgICAgICAgIGlmICghZmFsbGJhY2tGb250IHx8IGZhbGxi
YWNrRm9udCA9PSBiYXNlRm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAKaW5kZXggODVjOTRhOWE5M2YwOGIwMmI1NDdlMGJlNjA1NjZjZmMxNDA4MDIy
Zi4uZDY3MWJhZmI2YmY4NjIwZmE3YTA5NDRmMjUyMmE2YzQxMzE1YjI3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNo
ZUNvcmVUZXh0LmNwcApAQCAtNjE5LDcgKzYxOSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHBy
ZXBhcmVQbGF0Zm9ybUZvbnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2Ny
CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdp
bmFsRm9udCwgQ1RGb250R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9y
LmdldCgpKSk7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkK
K1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQg
dG8gZmluZCBhbiBhcHByb3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHBy
ZXNlbmNlIG9mIGtleXdvcmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4
YW1wbGUsIHdlJ2xsIG1hdGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2Vl
emEgUHJvLgpAQCAtNjI4LDI3ICs2MjgsMTkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2lt
aWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBt
b25vc3BhY2UgZm9udCBmb3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3Vy
aWVyIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4g
Zm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0
ZSBWZXJkYW5hIGZvciBMdWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5h
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9u
dEZvckZhbWlseShkZXNjcmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAg
IHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYK
IAotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19T
VFJJTkdfSU1QTCgiQXJhYmljIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IHBhc2h0byhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUi
KSk7Ci0gICAgc3RhdGljIFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwg
JnBhc2h0by5nZXQoKSwgJnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJE
ZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIGZvciAoU3RyaW5nKiBtYXRjaFdv
cmQgOiBtYXRjaFdvcmRzKSB7Ci0gICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FT
Q0lJQ2FzZSgqbWF0Y2hXb3JkKSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRl
c2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXph
Qm9sZCA6IGdlZXphUGxhaW4pOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIG1h
dGNoV29yZHNbXSA9IHsgIkFyYWJpYyJfcywgIlBhc2h0byJfcywgIlVyZHUiX3MgfTsKKyAgICBh
dXRvIGZhbWlseU1hdGNoZXIgPSBTdHJpbmdWaWV3KGZhbWlseSk7CisgICAgZm9yIChhdXRvIG1h
dGNoV29yZCA6IG1hdGNoV29yZHMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNh
c2UoZmFtaWx5TWF0Y2hlciwgU3RyaW5nVmlldyhtYXRjaFdvcmQpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0
aW9uLndlaWdodCgpKSA/ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBj
b25zdCBGb250RGF0YWJhc2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBG
b250RGF0YWJhc2U6OkluCiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tp
bmRleF07CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6
OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBm
YW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250
cykKK1ZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFs
bG93VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1
dG8mIGZvbnREYXRhYmFzZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzOjpZZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlcklu
c3RhbGxlZEZvbnRzKCkgOiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlcklu
c3RhbGxlZEZvbnRzKCk7Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29s
bGVjdGlvbkZvckZhbWlseShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBm
b250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAg
IGlmIChmb250cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAg
KzExMDAsMTAgQEAgc3RydWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0
U2NyaXB0TmFtZSB7IGZhbHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZv
bnRMb29rdXBXaXRoRmFtaWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlv
blJlcXVlc3QgcmVxdWVzdCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29r
dXBXaXRoRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCBy
ZXF1ZXN0LCBmbG9hdCBzaXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cykKIHsKICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0
KCk7Ci0gICAgaWYgKCFpc1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Qu
c2l6ZSgpICYmICFhbGxvd2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVt
Rm9udChmYW1pbHkpICYmIGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhm
YW1pbHkpKQogICAgICAgICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpA
QCAtMTEyMyw3ICsxMTE1LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3Vw
V2l0aEZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAg
ICBhdXRvJiBmb250RGF0YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1Vz
ZXJJbnN0YWxsZWRGb250cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERh
dGFiYXNlLmNvbGxlY3Rpb25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBh
dXRvJiBmYW1pbHlGb250cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWls
eSk7CiAgICAgaWYgKGZhbWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NT
IHNwZWMgc3RhdGVzIHRoYXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBh
Y3R1YWwgZm9udCBmYW1pbHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwog
ICAgICAgICAvLyBzdXBwb3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBI
b3dldmVyLCB0aGlzIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAo
Zm9udC13ZWlnaHQsCkBAIC0xMTcyLDcgKzExNjQsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRl
Rm9udENhY2hlKCkKICAgICB9KTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZv
bnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5z
dGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgUmV0YWluUHRyPENU
Rm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBTdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93
VXNlckluc3RhbGxlZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIC8vIEZJ
WE1FOiBTZWUgY29tbWVudCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1p
bHlBdCgpIGluIEZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIE9wdGlvbmFsPFN5c3RlbUZv
bnRLaW5kPiBzeXN0ZW1EZXNpZ247CkBAIC0xMjAxLDcgKzExOTMsNyBAQCBzdGF0aWMgUmV0YWlu
UHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksCiAgICAgaWYgKGZhbWlseS5zdGFydHNXaXRoKCJVSUNURm9udFRleHRTdHlsZSIp
KSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVzY3JpcHRpb24uZm9udFNl
bGVjdGlvblJlcXVlc3QoKTsKICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0g
KGlzRm9udFdlaWdodEJvbGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpID8ga0NURm9udFRy
YWl0Qm9sZCA6IDApIHwgKGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8ga0NURm9udFRyYWl0SXRh
bGljIDogMCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3Jp
cHRvckNyZWF0ZVdpdGhUZXh0U3R5bGUoZmFtaWx5LnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIFJlbmRlclRoZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnko
KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSkpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVXaXRoVGV4dFN0eWxlKGZhbWlseS5jcmVhdGVDRlN0cmluZygpLmdldCgp
LCBSZW5kZXJUaGVtZUNvY29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5KCksIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCkpKTsKICAgICAgICAgaWYgKHRyYWl0cykKICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJhaXRzKGRlc2Ny
aXB0b3IuZ2V0KCksIHRyYWl0cywgdHJhaXRzKSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVGb250
Rm9ySW5zdGFsbGVkRm9udHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgYWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpOwpAQCAtMTIzNSw3ICsxMjI3LDcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRS
ZWY+IGZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9u
dFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcywgZmxvYXQgc2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0
aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMs
IEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMs
IGZsb2F0IHNpemUpCiB7CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMTI3OCw3ICsxMjcwLDcgQEAgc3RhdGljIHZvaWQgYXV0b0FjdGl2YXRl
Rm9udChjb25zdCBTdHJpbmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkKIH0KICNlbmRpZgogCi1zdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
U3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMpCitzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VG
ZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFi
aWxpdGllcykKIHsKICAgICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4
ZWxTaXplKCk7CiAKQEAgLTEyOTEsNyArMTI4Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxh
dGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
CiAKICAgICAgICAgLy8gQXV0byBhY3RpdmF0ZSB0aGUgZm9udCBiZWZvcmUgbG9va2luZyBmb3Ig
aXQgYSBzZWNvbmQgdGltZS4KICAgICAgICAgLy8gSWdub3JlIHRoZSByZXN1bHQgYmVjYXVzZSB3
ZSB3YW50IHRvIHVzZSBvdXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxseSBmaW5kIHRoZSBmb250
LgotICAgICAgICBhdXRvQWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmcoKSwgc2l6ZSk7CisgICAg
ICAgIGF1dG9BY3RpdmF0ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAogICAgICAgICBmb250ID0gZm9u
dFdpdGhGYW1pbHkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZv
bnRGYWNlQ2FwYWJpbGl0aWVzLCBzaXplKTsKICAgICB9CkBAIC0xNDIzLDcgKzE0MTUsNyBAQCBS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFs
dGVybmF0ZUZvbnQpOwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3Jt
QWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9u
YWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhlaXRp
U3RyaW5nW10gPSB7IDB4OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNv
bmd0aVN0cmluZ1tdID0geyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzMSwxMCArMTQyMywxMCBA
QCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFu
WWFIZWlTdHJpbmdbXSA9IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07CiAgICAg
c3RhdGljIGNvbnN0IFVDaGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4NWZhZSwg
MHg4ZWRmLCAweDZiNjMsIDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFpblRocmVh
ZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRDIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFu
ZyBTQyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBsYWNlbWVu
dCgiUGluZ0ZhbmcgVEMiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAiU29uZ3RpIFNDIl9zOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRDID0gIlNvbmd0aSBUQyJf
czsKKyAgICBzdGF0aWMgY29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQg
PSAiUGluZ0ZhbmcgU0MiX3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVp
dGlUQ1JlcGxhY2VtZW50ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAgc3dpdGNoIChmYW1pbHlO
YW1lLmxlbmd0aCgpKSB7CiAgICAgY2FzZSAyOgpAQCAtMTQ2OSw3ICsxNDYxLDcgQEAgY29uc3Qg
QXRvbVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3Qg
QXRvbVN0cmluZyYgZmFtaWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51
bGxBdG9tKCk7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1
dGVzRm9ySW5zdGFsbGVkRm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKQEAgLTE1NDIs
NyArMTUzNCw3IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gRklYTUU6IFdv
dWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250
IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1
c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBpZiAoYXV0byBy
ZXN1bHQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbVN0cmluZygiVGltZXMi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMiX3MpKQogICAgICAgICBy
ZXR1cm4gKnJlc3VsdDsKIAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBu
b24tbnVsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4OWYyMTM3MDcyZDQzYThmODk4
YWRkZDE4ZGFkNjI0OTAzOTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQwN2M4MTE4MGZiZDAwNGNmMTNm
N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYWNoZUNvcmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuaApAQCAtNjIsNyArNjIsNyBAQCB0eXBlZGVmIEhhc2hN
YXA8Rm9udFRhZywgVmFyaWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3Vy
Q2hhcmFjdGVyVAogUmV0YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZv
bnRSZWYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3Mq
IGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9u
dEZhY2VDYXBhYmlsaXRpZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9
IHRydWUpOwogZW51bSBjbGFzcyBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgOiBib29sIHsg
Tm8sIFllcyB9OwogU3ludGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKENURm9u
dFJlZiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRz
ID0gU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9vbCBpc1BsYXRmb3JtRm9udCA9
IGZhbHNlKTsKLVJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmlu
Z01vZGUsIGZsb2F0IHNpemUpOworUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0
aEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QsIFRleHRS
ZW5kZXJpbmdNb2RlLCBmbG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2Fw
YWJpbGl0aWVzRm9yRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJlZik7CiB2b2lkIGFk
ZEF0dHJpYnV0ZXNGb3JJbnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJp
YnV0ZXMsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IGNy
ZWF0ZUZvbnRGb3JJbnN0YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNp
emUsIEFsbG93VXNlckluc3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4
dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uMmJi
NzEwMTU5MGVlYjE0ZGUxNGY5NTFjNmIzYTBhM2NhODQyYzJhYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAKQEAgLTMxNiw4ICszMTYsOCBAQCBjb25zdCBGb250KiBGb250Q2Fz
Y2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZQogCiAgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JD
aGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxi
YWNrUmFuZ2VzQXJlTnVsbChpKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBm
b250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEy
ZGIyYTAyNjcuLjliOTBiMDcyMTU2NmRkNDJlOGVmZWQ0MWU3MTNkZjk0MmUxNmYyMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNo
ZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVl
dHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTMxOSwzOSArMzE5LDM4IEBAIFJlZjxGb250
PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBm
b250IGhlcmUsIG90aGVyd2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBGb250Q29uZmlnCiAgICAg
Ly8gbWF0Y2hlcyBmb3Igbm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNG
YWxsYmFja0ZvbnRBbGxvd2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJp
ZiIpOwotICAgIGlmIChSZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2Ny
aXB0aW9uLCB0aW1lc1N0cikpCi0gICAgICAgIHJldHVybiAqZm9udDsKKyAgICBpZiAoUmVmUHRy
PEZvbnQ+IGZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkK
KyAgICAgICAgcmV0dXJuIGZvbnQucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIC8vIFRoaXMgY291
bGQgYmUgcmVhY2hlZCBkdWUgdG8gaW1wcm9wZXJseS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJl
ZCBmb250Y29uZmlnLgogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVZl
Y3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFs
bGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpn
ZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmlu
ZyBnZXRGYW1pbHlOYW1lU3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkp
CitzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmlu
ZyYgZmFtaWx5KQogewogICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAo
ZS5nLiAiLXdlYmtpdC1tb25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8g
dGhlIGZhbGxiYWNrIG5hbWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRl
cnN0YW5kcy4KICAgICBpZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgi
LXdlYmtpdC0iKSkKLSAgICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIGZhbWlseTsKIAotICAgIGlmIChmYW1pbHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5
ID09IHNlcmlmRmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRGYW1pbHkpKSB8
fCBmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFt
aWx5TmFtZXNJbmRleDo6U2VyaWZGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJzZXJpZiI7Ci0g
ICAgaWYgKGZhbWlseSA9PSBzYW5zU2VyaWZGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1p
bHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpT
YW5zU2VyaWZGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJzYW5zLXNlcmlmIjsKLSAgICBpZiAo
ZmFtaWx5ID09IG1vbm9zcGFjZUZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVz
RGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFj
ZUZhbWlseSkpKQogICAgICAgICByZXR1cm4gIm1vbm9zcGFjZSI7Ci0gICAgaWYgKGZhbWlseSA9
PSBjdXJzaXZlRmFtaWx5KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWlseSkpKQog
ICAgICAgICByZXR1cm4gImN1cnNpdmUiOwotICAgIGlmIChmYW1pbHkgPT0gZmFudGFzeUZhbWls
eSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6OkZhbnRhc3lGYW1pbHkpKSkKICAgICAgICAgcmV0dXJu
ICJmYW50YXN5IjsKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoZmFtaWx5ID09IHN5c3Rl
bVVpRmFtaWx5IHx8IGZhbWlseSA9PSAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpCisgICAgaWYgKGZh
bWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlO
YW1lc0luZGV4OjpTeXN0ZW1VaUZhbWlseSkpIHx8IGZhbWlseSA9PSAiLXdlYmtpdC1zeXN0ZW0t
Zm9udCIpCiAgICAgICAgIHJldHVybiBkZWZhdWx0R3RrU3lzdGVtRm9udCgpOwogI2VuZGlmCiAK
QEAgLTUwMCw3ICs0OTksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25seVVzZWRHZW5l
cmljRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykKICAgICAgICAgfHwgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKTsK
IH0KIAotc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250
RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZv
bnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgLy8gVGhlIENTUyBmb250
IG1hdGNoaW5nIGFsZ29yaXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9u
dC1tYXRjaGluZy1hbGdvcml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdlIG11c3QgZmluZCBhbiBl
eGFjdCBtYXRjaCBmb3IgZm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Igb2JsaXF1ZSBjYW4g
YmUgdXNlZCkKQEAgLTU5OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3Jt
RGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAg
IHJldHVybiBwbGF0Zm9ybURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6
cGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQorT3B0aW9uYWw8
QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmKQogewotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5MzM1MDAx
MzkwZWIzZmJiOTlhNWIuLmMzMmNlNzlhZTQ2OGQxZjNiMDM2M2YyOTE1MjEzOThkN2ZmNTZlNzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTEyNSw5ICsx
MjUsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVu
c0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogICAgICAgICBpc1N5c3RlbUZhbGxiYWNr
ID0gdHJ1ZTsKIAogICAgICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0
ZXIpOwotICAgICAgICBmb250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckNo
YXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgZm9udCA9IG1fZm9udC5mb250Rm9yQ2hh
cmFjdGVyKDAsIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAg
ICBmb250ID0gJm1fZm9udC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7
CisgICAgICAgICAgICBmb250ID0gJm1fZm9udC5mb250Rm9yRmlyc3RSYW5nZSgpOwogICAgICAg
ICBzdHJpbmdBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29w
eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9m
b250LmVuYWJsZUtlcm5pbmcoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwg
bV9mb250LmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpLmdldCgpKSk7CiAgICAg
ICAgIC8vIFdlIGRvbid0IGtub3cgd2hpY2ggZm9udCBzaG91bGQgYmUgdXNlZCB0byByZW5kZXIg
dGhpcyBncmFwaGVtZSBjbHVzdGVyLCBzbyBlbmFibGUgQ29yZVRleHQncyBmYWxsYmFjayBtZWNo
YW5pc20gYnkgdXNpbmcgdGhlIENURm9udCB3aGljaCBkb2Vzbid0IGhhdmUgQ29yZVRleHQncyBm
YWxsYmFjayBkaXNhYmxlZC4KICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29uc3RfY2Fz
dDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwga0NURm9u
dEF0dHJpYnV0ZU5hbWUsIGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CkBAIC0xODcsOCAr
MTg3LDggQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1
bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgICAgIFJldGFpblB0cjxD
RlR5cGVSZWY+IHJ1bkZvbnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVj
dEZvckVxdWFsaXR5Q2hlY2socnVuQ1RGb250KTsKICAgICAgICAgICAgIGlmICghV1RGOjpzYWZl
Q0ZFcXVhbChydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3JtRGF0YSgp
Lm9iamVjdEZvckVxdWFsaXR5Q2hlY2soKS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBC
ZWdpbiB0cnlpbmcgdG8gc2VlIGlmIHJ1bkZvbnQgbWF0Y2hlcyBhbnkgb2YgdGhlIGZvbnRzIGlu
IHRoZSBmYWxsYmFjayBsaXN0LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJ1bkZvbnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hh
cmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7ICFtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcnVuRm9udCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0
ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFdURjo6c2FmZUNGRXF1
YWwocnVuRm9udC0+cGxhdGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgp
LCBydW5Gb250RXF1YWxpdHlPYmplY3QuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0
ZDgwOGI4M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi43ZjU3MjMyZTA3ZDI1MDdiNDk0ZjYxODll
MWZiZDRhNmViOGQyZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtMzYyLDkgKzM2Miw5IEBAIGJvb2wgRm9u
dENhY2hlOjppc1N5c3RlbUZvbnRGb3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0cmluZyYpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgTE9HRk9OVCYgZm9udCwgQXRvbVN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitS
ZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwg
U3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSkKIHsKLSAgICBBdG9tU3RyaW5nIGZhbWlseU5hbWUo
Zm9udC5sZkZhY2VOYW1lLCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsK
KyAgICBTdHJpbmcgZmFtaWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZh
Y2VOYW1lLCBMRl9GQUNFU0laRSkpOwogICAgIFJlZlB0cjxGb250PiBmb250RGF0YSA9IGZvbnRG
b3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoZm9udERhdGEp
CiAgICAgICAgIG91dEZvbnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKQEAgLTM3Myw1NiArMzcz
LDU3IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9uCiAKIFJlZjxGb250PiBGb250Q2FjaGU6Omxh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBm
YWxsYmFja0ZvbnROYW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhbGxi
YWNrRm9udE5hbWU7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJl
LiBGb3Igbm93IHdlJ2xsIHBpY2sKKyAgICAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNl
ciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCisKKyAgICAgICAgLy8gU2Vh
cmNoIGFsbCB0eXBpY2FsIFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KKyAg
ICAgICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCisgICAgICAgIC8vIFN0
YXJ0IHdpdGggVGltZXMgTmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1bHQgaWYg
dGhlIHVzZXIgZG9lc24ndCBjaGFuZ2UgcHJlZnMuCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBTdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgICAgIFN0cmlu
ZygiVGltZXMgTmV3IFJvbWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAg
ICAgICAgICBTdHJpbmcoIk1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2Rl
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIkFy
aWFsIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAgICAgfTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250c1tpXSkpIHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lLmdldCgp
ID0gZmFsbGJhY2tGb250c1tpXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KIAotICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5nZXQoKS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxi
YWNrRm9udE5hbWUpOworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERFRkFVTFRfR1VJX0ZP
TlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgorICAgICAgICBpZiAo
SEZPTlQgZGVmYXVsdEdVSUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3Qo
REVGQVVMVF9HVUlfRk9OVCkpKSB7CisgICAgICAgICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dG
b250OworICAgICAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2YoZGVmYXVs
dEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOworICAgICAgICAgICAgaWYgKGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgZGVmYXVsdEdVSUxvZ0Zv
bnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogCi0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRo
ZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKLSAgICAvLyB0
aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBw
cmVmcy4KLQotICAgIC8vIFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWluc3RhbGxlZCBmdWxs
IFVuaWNvZGUgZm9udHMuCi0gICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFj
Y29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2Vz
Ci0gICAgLy8gU3RhcnQgd2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0aGUg
ZGVmYXVsdCBpZiB0aGUgdXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9
IHsKLSAgICAgICAgQXRvbVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBT
ZXJpZiIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0
cmluZygiVGFob21hIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAg
ICBBdG9tU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKQotICAgIH07Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbXBsZUZvbnQ7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9u
dHMpOyArK2kpIHsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnRE
ZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSkpIHsKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dE5hbWUuZ2V0KCkgPSBmYWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAgcmV0dXJuICpzaW1w
bGVGb250OworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRz
LgorICAgICAgICBOT05DTElFTlRNRVRSSUNTIG5vbkNsaWVudE1ldHJpY3MgeyB9OworICAgICAg
ICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKKyAg
ICAgICAgaWYgKFN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBz
aXplb2Yobm9uQ2xpZW50TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgeworICAgICAg
ICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
bm9uQ2xpZW50TWV0cmljcy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFu
ZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZvbnQsIGZh
bGxiYWNrRm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlm
IChmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVu
dE1ldHJpY3MubGZTdGF0dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQo
Zm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNr
Rm9udE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250
RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJp
Y3MubGZTbUNhcHRpb25Gb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICB9CisgICAgfSk7CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8g
dGhlIERFRkFVTFRfR1VJX0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxh
YmxlLgotICAgIGlmIChIRk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0PEhGT05UPihH
ZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSkpIHsKLSAgICAgICAgTE9HRk9OVCBkZWZh
dWx0R1VJTG9nRm9udDsKLSAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2Yo
ZGVmYXVsdEdVSUxvZ0ZvbnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOwotICAgICAgICBpZiAoc2lt
cGxlRm9udCA9IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwg
ZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJu
ICpzaW1wbGVGb250OwotICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBm
YWxsYmFja0ZvbnROYW1lKTsKIAotICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1ldHJp
Y3MgZm9udHMuCi0gICAgTk9OQ0xJRU5UTUVUUklDUyBub25DbGllbnRNZXRyaWNzIHsgfTsKLSAg
ICBub25DbGllbnRNZXRyaWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKLSAg
ICBpZiAoU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVv
Zihub25DbGllbnRNZXRyaWNzKSwgJm5vbkNsaWVudE1ldHJpY3MsIDApKSB7Ci0gICAgICAgIGlm
IChzaW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0
aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQot
ICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9
IGZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50
TWV0cmljcy5sZk1lbnVGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVy
biAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0
aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTdGF0dXNG
b250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsK
LSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChm
b250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwgZmFsbGJhY2tG
b250TmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlmIChz
aW1wbGVGb250ID0gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBub25DbGllbnRNZXRyaWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0g
ICAgICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQotICAgIAogICAgIGF1dG8gaEZv
bnQgPSBhZG9wdEdESU9iamVjdChzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3QoREVG
QVVMVF9HVUlfRk9OVCkpKTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShXVEZN
b3ZlKGhGb250KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZhbHNlLCBm
YWxzZSwgZmFsc2UpOwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0
YSk7CkBAIC01MTIsNyArNTEzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBtYXRjaEltcHJvdmlu
Z0VudW1Qcm9jKENPTlNUIExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1QgVEVYVE0KICAgICByZXR1
cm4gMTsKIH0KIAotc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBB
dG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRhbGlj
LCBpbnQgc2l6ZSwgYm9vbCBzeW50aGVzaXplSXRhbGljKQorc3RhdGljIEdESU9iamVjdDxIRk9O
VD4gY3JlYXRlR0RJRm9udChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0
LCBib29sIGRlc2lyZWRJdGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCiB7
CiAgICAgSFduZERDIGhkYygwKTsKIApAQCAtNTcwLDEyICs1NzEsMTIgQEAgc3RhdGljIEdESU9i
amVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcg
ZGVzaXJlZFdlaWcKIH0KIAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgewotICAgIFRy
YWl0c0luRmFtaWx5UHJvY0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKKyAgICBU
cmFpdHNJbkZhbWlseVByb2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAgICAg
OiBtX2ZhbWlseU5hbWUoZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQogCi0gICAgY29uc3QgQXRv
bVN0cmluZyYgbV9mYW1pbHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgbV9mYW1pbHlOYW1lOwog
ICAgIFZlY3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKIH07
CiAKQEAgLTYyNiw3ICs2MjcsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5
RW51bVByb2MoQ09OU1QgTE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAgIHJldHVy
biAxOwogfQogCi1WZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpn
ZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWx5TmFtZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1p
bHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsK
ICAgICBIV25kREMgaGRjKDApOwogCkBAIC02NDYsNyArNjQ3LDcgQEAgVmVjdG9yPEZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
c0luRmFtaWwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0
aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
Y29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2Vs
ZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wgaXNMdWNpZGFHcmFuZGUg
PSBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIik7
CiAKQEAgLTY5MiwxMSArNjkzLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+
IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0
ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8
QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBTdHJpbmcmIGZhbWlseU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRTYW5zU2VyaWYoIk1pY3Jv
c29mdCBTYW5zIFNlcmlmIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCiAg
ICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24gV2luZG93cywgd2Ug
ZG9uJ3Qgc3VwcG9ydCBiaXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1
cHBvcnQuCiAgICAgLy8gVGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJu
YXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcwNSw3ICs3MDMsNyBAQCBj
b25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxh
dGZvcm1zIHRvby4KICAgICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiB0
aW1lc05ld1JvbWFuOworICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAg
ICAgICAgIGJyZWFrOwogICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFw
IGZvbnRzLCBidXQgbGVnYWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMg
d2UgYWxsb3cgTWljcm9zb2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBi
aXRtYXAgZm9udCBNUyBTYW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTIsMTAgQEAgY29uc3QgQXRv
bVN0cmluZyYgRm9udENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRv
bVN0cmluZyYgZmFtaWwKICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0
b28uCiAgICAgY2FzZSAxMzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseU5hbWUsICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4gbWlj
cm9zb2Z0U2Fuc1NlcmlmOworICAgICAgICAgICAgcmV0dXJuICJNaWNyb3NvZnQgU2FucyBTZXJp
ZiJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxsQXRvbSgpOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpQ29udGV4dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2MTU0YmMwNGJlYTUwM2M2
MjRmYWVhMDFiNS4uNTVmMWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFiZmJhMDc2YmQ3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTI2LDcg
KzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0JpZGlD
b250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CitzdHJ1
Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNh
bWVTaXplQXNCaWRpQ29udGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OwogICAg
IHZvaWQqIHBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0JpZGlDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250
ZXh0LmgKaW5kZXggZDRjNGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQzOWJkMzRkMS4uNWE4
ZDkwOWVlYTkxYjYxOWU1Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIyLDE1IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIEJpZGlFbWJlZGRp
bmdTb3VyY2UgeyBGcm9tU3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAogLy8gVXNlZCB0byBr
ZWVwIHRyYWNrIG9mIGV4cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBCaWRpQ29udGV4dCA6IHB1
YmxpYyBSZWZDb3VudGVkPEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRpQ29udGV4dCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxl
dmVsLCBVQ2hhckRpcmVjdGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5n
U291cmNlID0gRnJvbVN0eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424154</attachid>
            <date>2021-03-24 10:32:34 -0700</date>
            <delta_ts>2021-03-31 05:40:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219283-20210324173232.patch</filename>
            <type>text/plain</type>
            <size>86741</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTQ5YTY5YjI4NWQ2ZTFj
MTE3ZmYwN2FlYTY4ZTIyZTg1MTVjNWVhNi4uNWEwZWUwMmY4OTEwNDcxN2FjN2E0NjNlYmRlYzYz
ZWVlOWI4YzYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIxLTAzLTI0ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIEZvbnRDYWNoZSBhbmQg
Rm9udENhc2NhZGVDYWNoZSB0aHJlYWQtc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjgzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTg4
NzE3Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
byBlbmFibGUgdXNlIG9mIHRleHQgZnVuY3Rpb25zIHdpdGggT2Zmc2NyZWVuQ2FudmFzLCBGb250
Q2FjaGUgbmVlZHMKKyAgICAgICAgdG8gYmUgdXNhYmxlIGZyb20gV29ya2VyIHRocmVhZHMuIFRo
aXMgcGF0Y2ggbWFrZXMgRm9udENhY2hlIHNhZmUgdG8KKyAgICAgICAgdXNlIGZyb20gbXVsdGlw
bGUgdGhyZWFkcyBieSBpbnRyb2R1Y2luZyBsb2NraW5nIGFuZCB1c2luZyBpc29sYXRlZAorICAg
ICAgICBjb3BpZXMgb2YgYSBTdHJpbmcgaW5zdGVhZCBvZiBBdG9tU3RyaW5nIHdoZXJlIG11bHRp
cGxlIHRocmVhZHMgYXJlCisgICAgICAgIGV4cGVjdGVkIHRvIGFjY2VzcyB0aGUgc2FtZSBkYXRh
LgorCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgbmVlZCBmb3IgdGhlIHBhcnRpYWwgbG9ja2lu
ZyBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5CisgICAgICAgIGlPUyBmb3IgdGhlIHdlYiB0aHJlYWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBjc3Mv
Q1NTRm9udFNlbGVjdG9yLmg6IFJlbW92ZSB1c2Ugb2YgQXRvbVN0cmluZyBmb3IgZmFtaWx5IG5h
bWUgaW4KKyAgICAgICAgICAgIGZvbnQgcmVzb2x1dGlvbi4KKyAgICAgICAgKiBkb20vQWN0aXZl
RE9NT2JqZWN0LmNwcDogTW92ZSB0aHJlYWQgYXNzZXJ0aW9uIGluIGRlc3RydWN0b3IgdG8KKyAg
ICAgICAgICAgIGFmdGVyIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgbnVsbCBjaGVjay4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6IE1ha2UgVGhyZWFkU2FmZVJlZkNvdW50ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDogSW50cm9kdWNlIGxvY2tpbmcsIHJlcGxhY2Ug
dXNlIG9mCisgICAgICAgICAgICBBdG9tU3RyaW5nIHdpdGggU3RyaW5nIGFuZCBtYWtlIGlzb2xh
dGVkIGNvcGllcyBpbnN0ZWFkIG9mIHRha2luZworICAgICAgICAgICAgcmVmZXJlbmNlcyB0aGF0
IG1pZ2h0IGJlIGFjY2Vzc2VkIGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5oOiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZUZv
bnRzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aDogQWRhcHQgdG8gQVBJIGNoYW5nZXMKKyAgICAgICAgICAgIGFuZCByZW1vdmUgQ29jb2EgZmFz
dC1wYXRoIHRoYXQgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuaDogRG9uJ3QgYXNzZXJ0IG1haW4gdGhyZWFkIGFuZAorICAgICAgICAg
ICAgaW50cm9kdWNlIGxvY2tpbmcgYXJvdW5kIG1lbWJlciB2YXJpYWJsZSBJL08uIExvY2stZnJl
ZSBhY2Nlc3MgaXMKKyAgICAgICAgICAgIG1haW50YWluZWQgd2hlcmUgcG9zc2libGUuCisgICAg
ICAgICAgICBSZW1vdmUgYWNjZXNzIHRvIEZvbnRSYW5nZXMgYW5kIGluc3RlYWQgZXhwb3NlIHRo
ZSBtZXRob2RzIHVzZWQgb24KKyAgICAgICAgICAgIHRoZW0gc28gdGhhdCB0aGVpciByZWZlcmVu
Y2UgcmVtYWlucyBhc3NvY2lhdGVkIG9ubHkgd2l0aCB0aGUgcGFyZW50CisgICAgICAgICAgICBG
b250Q2FzY2FkZUZvbnRzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rv
ci5oOiBNYWtlIFRocmVhZFNhZmVSZWZDb3VudGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dseXBoUGFnZS5oOiBNYWtlIFRocmVhZFNhZmVSZWZDb3VudGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwOiBBZGFwdCB0byBj
aGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuaDogQWRhcHQgdG8gY2hhbmdlcyBpbgor
ICAgICAgICAgICAgRm9udENhY2hlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0
ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOiBBZGFwdCB0byBjaGFuZ2VzCisgICAgICAgICAg
ICBpbiBGb250Q2FzY2FkZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9G
b250Q2FjaGVGcmVlVHlwZS5jcHA6IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZv
bnRDYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyQ29yZVRleHQubW06IEFkYXB0IHRvIGNoYW5nZXMgaW4KKyAgICAgICAgICAgIEZvbnRD
YXNjYWRlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
OiBBZGFwdCB0byBjaGFuZ2VzIGluCisgICAgICAgICAgICBGb250Q2FjaGUuCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9C
aWRpQ29udGV4dC5oOiBNYWtlIFRocmVhZFNhZmVSZWZDb3VudGVkCisKIDIwMjEtMDMtMjQgIFJv
YiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWdyaWRdIERvIG5vdCBh
bGxvdyBuZWdhdGl2ZSBoZWlnaHRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
CmluZGV4IDM4ZWZiNjY2OGQwODg4ZTAxMWJjMGVmMGFlODM4YjQ1MDU1YTNhMWUuLjZhMzFmZWQ0
N2RjNzQwZGQwYWVmMWY2ZjY0MDUxMGU1MGMwMzVjYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiV2ViS2l0Rm9udEZh
bWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JT
Y29wZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02NCwyOSArNjMsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lczsKIHN0YXRpYyB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsKIAogQ1NTRm9udFNl
bGVjdG9yOjpDU1NGb250U2VsZWN0b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkK
LSAgICA6IEFjdGl2ZURPTU9iamVjdCgmY29udGV4dCkKLSAgICAsIG1fY29udGV4dChtYWtlV2Vh
a1B0cihjb250ZXh0KSkKKyAgICA6IG1fY29udGV4dChtYWtlV2Vha1B0cihjb250ZXh0KSkKICAg
ICAsIG1fY3NzRm9udEZhY2VTZXQoQ1NTRm9udEZhY2VTZXQ6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1fZm9udE1vZGlmaWVkT2JzZXJ2ZXIoW3RoaXNdIHsgZm9udE1vZGlmaWVkKCk7IH0pCi0gICAg
LCBtX2ZvbnRMb2FkaW5nVGltZXIoKnRoaXMsICZDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkaW5n
VGltZXJGaXJlZCkKICAgICAsIG1fdW5pcXVlSWQoKytmb250U2VsZWN0b3JJZCkKICAgICAsIG1f
dmVyc2lvbigwKQogewotICAgIGlmIChpczxEb2N1bWVudD4oY29udGV4dCkpIHsKLSAgICAgICAg
bV9mb250RmFtaWx5TmFtZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlOYW1lcy0+c2l6
ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBmYW1pbHlOYW1lIDogZmFtaWx5TmFtZXMuZ2V0KCkp
Ci0gICAgICAgICAgICBtX2ZvbnRGYW1pbHlOYW1lcy51bmNoZWNrZWRDb25zdHJ1Y3RBbmRBcHBl
bmQoZmFtaWx5TmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9mb250RmFtaWx5TmFtZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlOYW1lc0RhdGEtPnNpemUoKSk7Ci0gICAgICAg
IGZvciAoYXV0byYgZmFtaWx5TmFtZSA6IGZhbWlseU5hbWVzRGF0YS5nZXQoKSkKLSAgICAgICAg
ICAgIG1fZm9udEZhbWlseU5hbWVzLnVuY2hlY2tlZEFwcGVuZChmYW1pbHlOYW1lKTsKLSAgICB9
Ci0KKyAgICBtX2ZvbnRMb2FkaW5nVGltZXIgPSBtYWtlVW5pcXVlPFRpbWVyPigqdGhpcywgJkNT
U0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKTsKICAgICBGb250Q2FjaGU6OnNp
bmdsZXRvbigpLmFkZENsaWVudCgqdGhpcyk7CiAgICAgbV9jc3NGb250RmFjZVNldC0+YWRkRm9u
dE1vZGlmaWVkT2JzZXJ2ZXIobV9mb250TW9kaWZpZWRPYnNlcnZlcik7CiAgICAgTE9HKEZvbnRz
LCAiQ1NTRm9udFNlbGVjdG9yICVwIGN0b3IiLCB0aGlzKTsKLQotICAgIHN1c3BlbmRJZk5lZWRl
ZCgpOwogfQogCiBDU1NGb250U2VsZWN0b3I6On5DU1NGb250U2VsZWN0b3IoKQpAQCAtMjgxLDIy
ICsyNjcsMjEgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRDYWNoZUludmFsaWRhdGVkKCkK
ICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwogfQogCi1PcHRpb25hbDxBdG9t
U3RyaW5nPiBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1l
KQorT3B0aW9uYWw8U3RyaW5nPiBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVHZW5lcmljRmFtaWx5
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUpCiB7CiAgICAgYXV0byBwbGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNjcmlwdGlvbjo6
cGxhdGZvcm1SZXNvbHZlR2VuZXJpY0ZhbWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0KCksIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZExvY2FsZSgpLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoIXBs
YXRmb3JtUmVzdWx0LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gcGxhdGZvcm1SZXN1bHQ7Cisg
ICAgICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdC5zdHJpbmcoKTsKIAogICAgIGlmICghbV9jb250
ZXh0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgY29uc3QgYXV0byYgc2V0
dGluZ3MgPSBtX2NvbnRleHQtPnNldHRpbmdzVmFsdWVzKCk7CiAKLSAgICBVU2NyaXB0Q29kZSBz
Y3JpcHQgPSBmb250RGVzY3JpcHRpb24uc2NyaXB0KCk7Ci0gICAgYXV0byBmYW1pbHlOYW1lSW5k
ZXggPSBtX2ZvbnRGYW1pbHlOYW1lcy5maW5kKGZhbWlseU5hbWUpOworICAgIGF1dG8gZmFtaWx5
TmFtZUluZGV4ID0gZmFtaWx5TmFtZXNEYXRhLT5maW5kKGZhbWlseU5hbWUpOwogICAgIGlmIChm
YW1pbHlOYW1lSW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgaWYgKGF1dG8gZmFtaWx5U3Ry
aW5nID0gc2V0dGluZ3MuZm9udEdlbmVyaWNGYW1pbGllcy5mb250RmFtaWx5KHN0YXRpY19jYXN0
PEZhbWlseU5hbWVzSW5kZXg+KGZhbWlseU5hbWVJbmRleCksIHNjcmlwdCkpCi0gICAgICAgICAg
ICByZXR1cm4gQXRvbVN0cmluZygqZmFtaWx5U3RyaW5nKTsKKyAgICAgICAgaWYgKGF1dG8gZmFt
aWx5U3RyaW5nID0gc2V0dGluZ3MuZm9udEdlbmVyaWNGYW1pbGllcy5mb250RmFtaWx5KHN0YXRp
Y19jYXN0PEZhbWlseU5hbWVzSW5kZXg+KGZhbWlseU5hbWVJbmRleCksIGZvbnREZXNjcmlwdGlv
bi5zY3JpcHQoKSkpCisgICAgICAgICAgICByZXR1cm4gKmZhbWlseVN0cmluZzsKICAgICB9CiAK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMzA4LDkgKzI5Myw5IEBAIEZvbnRSYW5nZXMg
Q1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyCiAgICAgQVNTRVJUKCFtX2J1aWxkSXNVbmRlcndheSB8fCBtX2NvbXB1dGlu
Z1Jvb3RTdHlsZUZvbnRDb3VudCk7CiAKICAgICAvLyBGSVhNRTogVGhlIHNwZWMgKGFuZCBGaXJl
Zm94KSBzYXlzIHVzZXIgc3BlY2lmaWVkIGdlbmVyaWMgZmFtaWxpZXMgKHNhbnMtc2VyaWYgZXRj
Likgc2hvdWxkIGJlIHJlc29sdmVkIGJlZm9yZSB0aGUgQGZvbnQtZmFjZSBsb29rdXAgdG9vLgot
ICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUgPT0gbV9mb250
RmFtaWx5TmFtZXNbc3RhdGljX2Nhc3Q8aW50PihGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZh
bWlseSldOworICAgIGJvb2wgcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCA9IGZhbWlseU5hbWUg
PT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDxpbnQ+KEZhbWlseU5hbWVzSW5kZXg6
OlN0YW5kYXJkRmFtaWx5KSk7CiAKLSAgICBBdG9tU3RyaW5nIGZhbWlseUZvckxvb2t1cCA9IGZh
bWlseU5hbWU7CisgICAgU3RyaW5nIGZhbWlseUZvckxvb2t1cCA9IGZhbWlseU5hbWUuc3RyaW5n
KCk7CiAgICAgT3B0aW9uYWw8Rm9udERlc2NyaXB0aW9uPiBvdmVycmlkZUZvbnREZXNjcmlwdGlv
bjsKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24qIGZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCA9
ICZmb250RGVzY3JpcHRpb247CiAgICAgYXV0byByZXNvbHZlQW5kQXNzaWduR2VuZXJpY0ZhbWls
eSA9IFsmXSgpIHsKQEAgLTMyNCw3ICszMDksNyBAQCBGb250UmFuZ2VzIENTU0ZvbnRTZWxlY3Rv
cjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcgog
ICAgIGF1dG8qIGZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0LT5mb250RmFjZShmb250RGVzY3JpcHRp
b25Gb3JMb29rdXAtPmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIGZhbWlseUZvckxvb2t1cCk7CiAg
ICAgaWYgKGZhY2UpIHsKICAgICAgICAgaWYgKGRvY3VtZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKLSAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1l
bnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50LCBmYW1pbHlGb3JM
b29rdXAsIHRydWUpOwogICAgICAgICByZXR1cm4gZmFjZS0+Zm9udFJhbmdlcygqZm9udERlc2Ny
aXB0aW9uRm9yTG9va3VwKTsKICAgICB9CiAKQEAgLTMzMiwyMCArMzE3LDIwIEBAIEZvbnRSYW5n
ZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyCiAgICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5KCk7
CiAgICAgYXV0byBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KCpm
b250RGVzY3JpcHRpb25Gb3JMb29rdXAsIGZhbWlseUZvckxvb2t1cCk7CiAgICAgaWYgKGRvY3Vt
ZW50ICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkKLSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0ZvbnRMb2FkKCpkb2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCAhIWZvbnQp
OworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRv
Y3VtZW50LCBmYW1pbHlGb3JMb29rdXAsICEhZm9udCk7CiAgICAgcmV0dXJuIEZvbnRSYW5nZXMg
eyBXVEZNb3ZlKGZvbnQpIH07CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdG9wTG9hZGlu
Z0FuZENsZWFyRm9udHMoKQogewogICAgIGlmIChtX2lzU3RvcHBlZCkgewotICAgICAgICBBU1NF
UlQoIW1fZm9udExvYWRpbmdUaW1lci5pc0FjdGl2ZSgpKTsKICAgICAgICAgQVNTRVJUKG1fZm9u
dHNUb0JlZ2luTG9hZGluZy5pc0VtcHR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgbV9pc1N0b3BwZWQgPSB0cnVlOwotICAgIG1fZm9udExvYWRpbmdUaW1lci5zdG9wKCk7Cisg
ICAgbV9mb250TG9hZGluZ1RpbWVyLT5zdG9wKCk7CisgICAgbV9mb250TG9hZGluZ1RpbWVyID0g
bnVsbHB0cjsKIAogICAgIGlmIChpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkgewogICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9jb250ZXh0KTsKQEAg
LTM3NCwxMyArMzU5LDM2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRpbmdGb250
U29vbihDYWNoZWRGb250JiBmb250KQogICAgIC8vIGRlY3JlbWVudFJlcXVlc3RDb3VudCgpIGlu
IGZvbnRMb2FkaW5nVGltZXJGaXJlZCgpIGFuZCBpbiBzdG9wTG9hZGluZ0FuZENsZWFyRm9udHMo
KS4KICAgICBkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLmluY3JlbWVudFJlcXVlc3RD
b3VudChmb250KTsKIAotICAgIGlmICghbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkICYmICFtX2Zv
bnRMb2FkaW5nVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9mb250TG9hZGluZ1RpbWVyLnN0
YXJ0T25lU2hvdCgwX3MpOworICAgIGlmICghbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkICYmICFt
X2ZvbnRMb2FkaW5nVGltZXItPmlzQWN0aXZlKCkpCisgICAgICAgIG1fZm9udExvYWRpbmdUaW1l
ci0+c3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjpzdXNwZW5k
Rm9udExvYWRpbmdUaW1lcigpCiB7Ci0gICAgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uOjpQ
YWdlV2lsbEJlU3VzcGVuZGVkKTsKKyAgICBpZiAobV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQgPSB0cnVlOwor
ICAgIGlmICghbV9pc1N0b3BwZWQpCisgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci0+c3RvcCgp
OworfQorCit2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6cmVzdW1lRm9udExvYWRpbmdUaW1lcigpCit7
CisgICAgaWYgKCFtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEFTU0VSVCghbV9pc1N0b3BwZWQpOworICAgIGlmICghbV9mb250c1RvQmVnaW5Mb2FkaW5n
LmlzRW1wdHkoKSkKKyAgICAgICAgbV9mb250TG9hZGluZ1RpbWVyLT5zdGFydE9uZVNob3QoMF9z
KTsKKworICAgIG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCA9IGZhbHNlOworfQorCit2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6c3RvcEZvbnRMb2FkaW5nVGltZXIoKQoreworICAgIGlmICghbV9pc1N0
b3BwZWQpCisgICAgICAgIG1fZm9udExvYWRpbmdUaW1lci0+c3RvcCgpOwogfQogCiB2b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6bG9hZFBlbmRpbmdGb250cygpCkBAIC00NDksMjkgKzQ1Nyw0IEBAIFJl
ZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0CiAgICAgcmV0dXJuIGZvbnQ7CiB9CiAKLXZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjpzdG9wKCkKLXsKLSAgICBtX2ZvbnRMb2FkaW5nVGltZXIuc3RvcCgpOwotfQot
Ci12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKQotewot
ICAgIGlmIChtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCA9IHRydWU7Ci0gICAgbV9mb250TG9hZGluZ1RpbWVy
LnN0b3AoKTsKLX0KLQotdm9pZCBDU1NGb250U2VsZWN0b3I6OnJlc3VtZSgpCi17Ci0gICAgaWYg
KCFtX2lzRm9udExvYWRpbmdTdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
bV9mb250c1RvQmVnaW5Mb2FkaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgbV9mb250TG9hZGluZ1Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotCi0gICAgbV9pc0ZvbnRMb2FkaW5nU3VzcGVuZGVkID0g
ZmFsc2U7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAppbmRleCBhOWZh
MjhmZjdhNTQxZjQ4ODY4YTVjNTUwMGI4ZDlkM2M0YWZhMDQyLi40NWRjNGVjNjA2Nzk4ZTRkMjIw
MjFiY2RiYjk4NDFhZDA2ODk1NjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5o
CkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIENhY2hlZEZvbnQ7CiBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogY2xhc3MgU3R5bGVSdWxlRm9udEZhY2U7CiAKLWNsYXNzIENTU0ZvbnRTZWxl
Y3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3IsIHB1YmxpYyBDU1NGb250RmFjZTo6Q2xp
ZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8Q1NTRm9udFNlbGVjdG9yPiwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CitjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBwdWJsaWMgRm9udFNl
bGVjdG9yLCBwdWJsaWMgQ1NTRm9udEZhY2U6OkNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRy
PENTU0ZvbnRTZWxlY3Rvcj4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q1NTRm9udFNlbGVj
dG9yPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICB7CkBAIC04
MSw2ICs4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmVnaW5Mb2FkaW5nRm9udFNvb24oQ2Fj
aGVkRm9udCYpOwogICAgIHZvaWQgc3VzcGVuZEZvbnRMb2FkaW5nVGltZXIoKTsKKyAgICB2b2lk
IHJlc3VtZUZvbnRMb2FkaW5nVGltZXIoKTsKKyAgICB2b2lkIHN0b3BGb250TG9hZGluZ1RpbWVy
KCk7CiAKICAgICBGb250RmFjZVNldCogZm9udEZhY2VTZXRJZkV4aXN0cygpOwogICAgIEZvbnRG
YWNlU2V0JiBmb250RmFjZVNldCgpOwpAQCAtMTAxLDcgKzEwMyw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIG9wcG9ydHVuaXN0aWNhbGx5U3RhcnRGb250RGF0YVVSTExvYWRpbmcoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkgZmluYWw7CiAK
LSAgICBPcHRpb25hbDxBdG9tU3RyaW5nPiByZXNvbHZlR2VuZXJpY0ZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpOworICAgIE9wdGlvbmFsPFN0
cmluZz4gcmVzb2x2ZUdlbmVyaWNGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3Qg
U3RyaW5nJiBmYW1pbHkpOwogCiAgICAgLy8gQ1NTRm9udEZhY2U6OkNsaWVudAogICAgIHZvaWQg
Zm9udExvYWRlZChDU1NGb250RmFjZSYpIGZpbmFsOwpAQCAtMTEwLDEyICsxMTIsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgZm9udE1vZGlmaWVkKCk7CiAgICAgdm9pZCBmb250TG9hZGluZ1RpbWVy
RmlyZWQoKTsKIAotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZvaWQgc3RvcCgpIGZpbmFs
OwotICAgIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKLSAgICB2b2lk
IHJlc3VtZSgpIGZpbmFsOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiQ1NTRm9udFNlbGVjdG9yIl9zOyB9Ci0KICAgICBzdHJ1Y3Qg
UGVuZGluZ0ZvbnRGYWNlUnVsZSB7CiAgICAgICAgIFN0eWxlUnVsZUZvbnRGYWNlJiBzdHlsZVJ1
bGVGb250RmFjZTsKICAgICAgICAgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRT
aGFkb3dUcmVlOwpAQCAtMTMzLDcgKzEyOSw3IEBAIHByaXZhdGU6CiAKICAgICBDU1NGb250RmFj
ZVNldDo6Rm9udE1vZGlmaWVkT2JzZXJ2ZXIgbV9mb250TW9kaWZpZWRPYnNlcnZlcjsKIAotICAg
IFRpbWVyIG1fZm9udExvYWRpbmdUaW1lcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGltZXI+IG1f
Zm9udExvYWRpbmdUaW1lcjsKICAgICBib29sIG1faXNGb250TG9hZGluZ1N1c3BlbmRlZCB7IGZh
bHNlIH07CiAKICAgICB1bnNpZ25lZCBtX3VuaXF1ZUlkOwpAQCAtMTQyLDggKzEzOCw2IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0aW5nRm9udCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2J1
aWxkSXNVbmRlcndheSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07
Ci0KLSAgICBXVEY6OlZlY3RvcjxBdG9tU3RyaW5nPiBtX2ZvbnRGYW1pbHlOYW1lczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDNmYzcy
MWQyYjAxOWFjYzBmZGJiMjMyN2YyMjYwYTYyOGY4Yjc2MWEuLmE2ZjkzNzY0OTgxMmExYzRlYTUx
M2Q2NThjYTNmZTdkMDEyZjA1OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtMjczNyw2
ICsyNzM3LDcgQEAgdm9pZCBEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoUmVhc29u
Rm9yU3VzcGVuc2lvbiB3aHkpCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHMod2h5KTsKICAgICBzdXNwZW5kRGV2aWNlTW90aW9uQW5kT3JpZW50YXRp
b25VcGRhdGVzKCk7CiAgICAgcGxhdGZvcm1TdXNwZW5kT3JTdG9wQWN0aXZlRE9NT2JqZWN0cygp
OworICAgIG1fZm9udFNlbGVjdG9yLT5zdXNwZW5kRm9udExvYWRpbmdUaW1lcigpOwogfQogCiB2
b2lkIERvY3VtZW50OjpyZXN1bWVBY3RpdmVET01PYmplY3RzKFJlYXNvbkZvclN1c3BlbnNpb24g
d2h5KQpAQCAtMjc0NSw2ICsyNzQ2LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1lQWN0aXZlRE9N
T2JqZWN0cyhSZWFzb25Gb3JTdXNwZW5zaW9uIHdoeSkKICAgICAgICAgbV9kb2N1bWVudFRhc2tH
cm91cC0+cmVzdW1lKCk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmVzdW1lQWN0aXZl
RE9NT2JqZWN0cyh3aHkpOwogICAgIHJlc3VtZURldmljZU1vdGlvbkFuZE9yaWVudGF0aW9uVXBk
YXRlcygpOworICAgIG1fZm9udFNlbGVjdG9yLT5yZXN1bWVGb250TG9hZGluZ1RpbWVyKCk7CiAg
ICAgLy8gRklYTUU6IEZvciBpT1MsIGRvIHdlIG5lZWQgdG8gYWRkIGNvbnRlbnQgY2hhbmdlIG9i
c2VydmVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiBEb2N1bWVudDo6c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHMoKT8KIH0KIApAQCAtMjc1NCw2ICsyNzU2LDcgQEAgdm9pZCBEb2N1bWVudDo6c3RvcEFj
dGl2ZURPTU9iamVjdHMoKQogICAgICAgICBtX2RvY3VtZW50VGFza0dyb3VwLT5tYXJrQXNSZWFk
eVRvU3RvcCgpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnN0b3BBY3RpdmVET01PYmpl
Y3RzKCk7CiAgICAgcGxhdGZvcm1TdXNwZW5kT3JTdG9wQWN0aXZlRE9NT2JqZWN0cygpOworICAg
IG1fZm9udFNlbGVjdG9yLT5zdG9wRm9udExvYWRpbmdUaW1lcigpOwogfQogCiB2b2lkIERvY3Vt
ZW50OjpjbGVhckFYT2JqZWN0Q2FjaGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCmluZGV4IGM3ZGE1NDkzZmMxNDY0MDE4YTcxYWIyMTg5ZmE1NWY2YjZiYjMyYWYuLmI2
ZTMwYzVjM2U0ZDgyMTg0ZmQ5NDg0OWE5YzI1ZDFiOGJjMjY0YTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTcyLDcgKzcyLDcgQEAgYm9vbCBmb250SGFzRWl0
aGVyVGFibGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0YWJsZVRhZzEsIHVuc2lnbmVkIHRhYmxlVGFn
Mik7CiAjZW5kaWYKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9u
dCk7Ci1jbGFzcyBGb250IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udD4geworY2xhc3MgRm9udCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250PiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoRm9udCk7CiBwdWJsaWM6CiAgICAgLy8gVXNl
ZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9udHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmNwcAppbmRleCBmYjBmODhkYTc5MWEzYTYxYzU3YmFjYzFhZjcy
YjQ2ZjBjYzkwOTZkLi45OGZjMmE3NGYxNWJhOGI5Zjc3NzViYzJkYWM4ZGU3ZDc1Yjk1MjUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAg
LTQ2LDE1ICs0Niw2IEBACiAjaW5jbHVkZSAiT3BlblR5cGVWZXJ0aWNhbERhdGEuaCIKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWN1cnNpdmVMb2NrQWRhcHRlci5oPgotCi1zdGF0aWMgUmVjdXJzaXZlTG9j
ayBmb250TG9jazsKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtNjUsNyArNTYsNyBAQCBG
b250Q2FjaGUmIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkKIH0KIAogRm9udENhY2hlOjpGb250Q2Fj
aGUoKQotICAgIDogbV9wdXJnZVRpbWVyKCp0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGFJZk5lZWRlZCkKKyAgICA6IG1fcHVyZ2VUaW1lcihSdW5Mb29wOjptYWluKCksIHRo
aXMsICZGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQogewogfQogCkBA
IC03Myw3ICs2NCw3IEBAIHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSgpIHsgfQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRD
YXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCisgICAgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5KGNvbnN0IFN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250
U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKQogICAg
ICAgICA6IG1fZm9udERlc2NyaXB0aW9uS2V5KGRlc2NyaXB0aW9uKQogICAgICAgICAsIG1fZmFt
aWx5KGZhbWlseSkKICAgICAgICAgLCBtX2ZvbnRGYWNlRmVhdHVyZXMoZm9udEZhY2VGZWF0dXJl
cyA/ICpmb250RmFjZUZlYXR1cmVzIDogRm9udEZlYXR1cmVTZXR0aW5ncygpKQpAQCAtOTksOCAr
OTAsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChtX2ZhbWlseSwgb3RoZXIubV9mYW1pbHkpOwogICAgIH0KIAor
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBpc29sYXRlZENvcHkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgYXV0byBjb3B5ID0gRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KCk7CisgICAgICAg
IGNvcHkubV9mb250RGVzY3JpcHRpb25LZXkgPSBtX2ZvbnREZXNjcmlwdGlvbktleTsKKyAgICAg
ICAgY29weS5tX2ZhbWlseSA9IG1fZmFtaWx5Lmlzb2xhdGVkQ29weSgpOworICAgICAgICBjb3B5
Lm1fZm9udEZhY2VGZWF0dXJlcyA9IG1fZm9udEZhY2VGZWF0dXJlczsKKyAgICAgICAgY29weS5t
X2ZvbnRGYWNlQ2FwYWJpbGl0aWVzID0gbV9mb250RmFjZUNhcGFiaWxpdGllczsKKyAgICAgICAg
cmV0dXJuIGNvcHk7CisgICAgfQorCiAgICAgRm9udERlc2NyaXB0aW9uS2V5IG1fZm9udERlc2Ny
aXB0aW9uS2V5OwotICAgIEF0b21TdHJpbmcgbV9mYW1pbHk7CisgICAgU3RyaW5nIG1fZmFtaWx5
OwogICAgIEZvbnRGZWF0dXJlU2V0dGluZ3MgbV9mb250RmFjZUZlYXR1cmVzOwogICAgIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgbV9mb250RmFjZUNhcGFiaWxpdGllczsKIH07
CkBAIC0xNDEsMzkgKzE0MiwzMyBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFz
aFRyYWl0cyA6IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Rm9udFBsYQogCiB0eXBlZGVm
IEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleUhhc2hUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKIAorc3RhdGljIFJl
Y3Vyc2l2ZUxvY2sgZ1BsYXRmb3JtRGF0YUNhY2hlTG9jazsKKwogc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZSYgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Rm9udFBsYXRmb3JtRGF0YUNhY2hlPiBjYWNoZTsKICAgICByZXR1cm4gY2FjaGU7
CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShj
b25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250
Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewot
ICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gYXJp
YWwoIkFyaWFsIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRp
YyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gY291cmllcigiQ291
cmllciIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFp
blRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGNvdXJpZXJOZXcoIkNvdXJp
ZXIgTmV3IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gaGVsdmV0aWNhKCJIZWx2
ZXRpY2EiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lcygiVGltZXMiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWRO
ZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcg
Um9tYW4iLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0KLSAgICBjb25zdCBB
dG9tU3RyaW5nJiBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxhdGZvcm1BbHRlcm5hdGVG
YW1pbHlOYW1lKGZhbWlseU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1TcGVjaWZpY0FsdGVybmF0
ZS5pc051bGwoKSkKKyAgICBpZiAoYXV0byBwbGF0Zm9ybVNwZWNpZmljQWx0ZXJuYXRlID0gcGxh
dGZvcm1BbHRlcm5hdGVGYW1pbHlOYW1lKGZhbWlseU5hbWUpKQogICAgICAgICByZXR1cm4gcGxh
dGZvcm1TcGVjaWZpY0FsdGVybmF0ZTsKIAogICAgIHN3aXRjaCAoZmFtaWx5TmFtZS5sZW5ndGgo
KSkgewogICAgIGNhc2UgNToKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGZhbWlseU5hbWUsICJhcmlhbCIpKQotICAgICAgICAgICAgcmV0dXJuIGhlbHZldGljYTsK
KyAgICAgICAgICAgIHJldHVybiAiSGVsdmV0aWNhIl9zOwogICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TmFtZSwgInRpbWVzIikpCi0gICAgICAgICAgICBy
ZXR1cm4gdGltZXNOZXdSb21hbjsKKyAgICAgICAgICAgIHJldHVybiAiVGltZXMgTmV3IFJvbWFu
Il9zOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDc6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiY291cmllciIpKQotICAgICAgICAgICAg
cmV0dXJuIGNvdXJpZXJOZXc7CisgICAgICAgICAgICByZXR1cm4gIkNvdXJpZXIgTmV3Il9zOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIDk6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiaGVsdmV0aWNhIikpCi0gICAgICAgICAgICByZXR1
cm4gYXJpYWw7CisgICAgICAgICAgICByZXR1cm4gIkFyaWFsIl9zOwogICAgICAgICBicmVhazsK
ICNpZiAhT1MoV0lORE9XUykKICAgICAvLyBPbiBXaW5kb3dzLCBDb3VyaWVyIE5ldyBpcyBhIFRy
dWVUeXBlIGZvbnQgdGhhdCBpcyBhbHdheXMgcHJlc2VudCBhbmQKQEAgLTE4MywzMyArMTc4LDI4
IEBAIGNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6YWx0ZXJuYXRlRmFtaWx5TmFtZShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgIC8vIG9ubHkgYmUgdHJpZWQgaWYgQ291cmll
ciBOZXcgaXMgbm90IGZvdW5kLgogICAgIGNhc2UgMTE6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAiY291cmllciBuZXciKSkKLSAgICAgICAg
ICAgIHJldHVybiBjb3VyaWVyOworICAgICAgICAgICAgcmV0dXJuICJDb3VyaWVyIl9zOwogICAg
ICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgMTU6CiAgICAgICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1pbHlOYW1lLCAidGltZXMgbmV3IHJvbWFuIikpCi0gICAg
ICAgICAgICByZXR1cm4gdGltZXM7CisgICAgICAgICAgICByZXR1cm4gIlRpbWVzIl9zOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbEF0b20oKTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldENhY2hl
ZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21TdHJpbmcmIHBhc3NlZEZhbWlseU5hbWUsCitGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IFN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKICAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCBib29sIGNoZWNraW5n
QWx0ZXJuYXRlTmFtZSkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCi0gICAgCiAjaWYgT1MoV0lORE9XUykg
JiYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGluIHRoZSBm
b250IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZvbnQu
CiAgICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywgd2UgZG9u
J3Qgd2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVhdHVyZS4KLSAgICAvLyBJRSBkaXNyZWdhcmRz
ICJAIiByZWdhcmRsZXNzIG9mIHRoZSBvcmllbnRhdG9pbiwgc28gd2UgZm9sbG93IHRoZSBiZWhh
dmlvci4KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lID0gKHBhc3NlZEZhbWlseU5h
bWUuaXNFbXB0eSgpIHx8IHBhc3NlZEZhbWlseU5hbWVbMF0gIT0gJ0AnKSA/Ci0gICAgICAgIHBh
c3NlZEZhbWlseU5hbWUgOiBBdG9tU3RyaW5nKHBhc3NlZEZhbWlseU5hbWUuaW1wbCgpLT5zdWJz
dHJpbmcoMSkpOworICAgIC8vIElFIGRpc3JlZ2FyZHMgIkAiIHJlZ2FyZGxlc3Mgb2YgdGhlIG9y
aWVudGF0aW9uLCBzbyB3ZSBmb2xsb3cgdGhlIGJlaGF2aW9yLgorICAgIGNvbnN0IFN0cmluZyYg
ZmFtaWx5TmFtZSA9IHBhc3NlZEZhbWlseU5hbWUuc3Vic3RyaW5nKHBhc3NlZEZhbWlseU5hbWVb
MF0gPT0gJ0AnID8gMSA6IDApOwogI2Vsc2UKLSAgICBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlO
YW1lID0gcGFzc2VkRmFtaWx5TmFtZTsKKyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUgPSBw
YXNzZWRGYW1pbHlOYW1lOwogI2VuZGlmCiAKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsK
QEAgLTIxOSwxOCArMjA5LDE3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2Fj
aGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgfQogCiAg
ICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHlOYW1lLCBmb250RGVzY3JpcHRp
b24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzKTsKKyAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZmlu
ZChrZXkpOwogCi0gICAgYXV0byBhZGRSZXN1bHQgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5h
ZGQoa2V5LCBudWxscHRyKTsKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0
ID0gYWRkUmVzdWx0Lml0ZXJhdG9yOwotICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewor
ICAgIGlmIChpdCA9PSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5lbmQoKSkgeworICAgICAgICBp
dCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmFkZChrZXkuaXNvbGF0ZWRDb3B5KCksIG51bGxw
dHIpLml0ZXJhdG9yOwogICAgICAgICBpdC0+dmFsdWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VD
YXBhYmlsaXRpZXMpOwogCiAgICAgICAgIGlmICghaXQtPnZhbHVlICYmICFjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpIHsKICAgICAgICAgICAgIC8vIFdlIHdlcmUgdW5hYmxlIHRvIGZpbmQgYSBmb250
LiAgV2UgaGF2ZSBhIHNtYWxsIHNldCBvZiBmb250cyB0aGF0IHdlIGFsaWFzIHRvIG90aGVyIG5h
bWVzLAogICAgICAgICAgICAgLy8gZS5nLiwgQXJpYWwvSGVsdmV0aWNhLCBDb3VyaWVyL0NvdXJp
ZXIgTmV3LCBldGMuICBUcnkgbG9va2luZyB1cCB0aGUgZm9udCB1bmRlciB0aGUgYWxpYXNlZCBu
YW1lLgotICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgYWx0ZXJuYXRlTmFtZSA9IGFsdGVy
bmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5h
bWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250UGxh
dGZvcm1EYXRhRm9yQWx0ZXJuYXRlTmFtZSA9IGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9u
dERlc2NyaXB0aW9uLCBhbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNh
cGFiaWxpdGllcywgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBhbHRlcm5hdGVOYW1lID0g
YWx0ZXJuYXRlRmFtaWx5TmFtZShmYW1pbHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGF1dG8q
IGZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lID0gZ2V0Q2FjaGVkRm9udFBsYXRmb3Jt
RGF0YShmb250RGVzY3JpcHRpb24sICphbHRlcm5hdGVOYW1lLCBmb250RmFjZUZlYXR1cmVzLCBm
b250RmFjZUNhcGFiaWxpdGllcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgLy8gTG9va3VwIHRo
ZSBrZXkgaW4gdGhlIGhhc2ggdGFibGUgYWdhaW4gYXMgdGhlIHByZXZpb3VzIGl0ZXJhdG9yIG1h
eSBoYXZlCiAgICAgICAgICAgICAgICAgLy8gYmVlbiBpbnZhbGlkYXRlZCBieSB0aGUgcmVjdXJz
aXZlIGNhbGwgdG8gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YSgpLgogICAgICAgICAgICAgICAg
IGl0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZmluZChrZXkpOwpAQCAtMzEyLDggKzMwMSwx
MCBAQCBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKIGNvbnN0
IHVuc2lnbmVkIGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwog
Y29uc3QgdW5zaWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRh
ID0gMzA7CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlv
blNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2lu
Z0FsdGVybmF0ZU5hbWUpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yRmFtaWx5KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZhbWls
eSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVj
dGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVj
a2luZ0FsdGVybmF0ZU5hbWUpCiB7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworCiAgICAgaWYgKCFtX3B1cmdlVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9wdXJnZVRp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOwogCkBAIC0zMjUsMTAgKzMxNiw4IEBAIFJlZlB0cjxGb250
PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvCiAKIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LSAgICAKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IGNhY2hlZEZvbnRzKCkuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKICAgICAg
ICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwpAQCAtMzQwLDYg
KzMyOSw4IEBAIFJlZjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQogCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKICAgICBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6
OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpOwogICAgIHVuc2lnbmVkIGluYWN0
aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQ
cmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIApAQCAtMzU3
LDE1ICszNDgsMTMgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVl
ZGVkKCkKIAogdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBw
dXJnZUNvdW50KQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKwogICAg
IExPRyhGb250cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCV1KSIsIHB1cmdl
Q291bnQpOwogCiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2Fj
aGUoKTsKICAgICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYK
LQogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIw
PiBmb250c1RvRGVsZXRlOwogICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBjYWNoZWRGb250cygp
LnZhbHVlcygpKSB7CkBAIC00MjEsNiArNDEwLDcgQEAgc3RhdGljIGJvb2wga2V5c01hdGNoKGNv
bnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGIK
IAogdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGVGb250Q2FzY2FkZUNhY2hlKCkKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNs
ZWFyKCk7CiB9CiAKQEAgLTQzNyw3ICs0MjcsNyBAQCBzdGF0aWMgRm9udENhc2NhZGVDYWNoZUtl
eSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJgog
ICAgIHVuc2lnbmVkIGZhbWlseUNvdW50ID0gZGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKTsKICAg
ICBrZXkuZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmYW1pbHlDb3VudCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhbWlseUNvdW50OyArK2kpCi0gICAgICAgIGtleS5m
YW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworICAgICAg
ICBrZXkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGRlc2NyaXB0aW9uLmZhbWlseUF0KGkpLnN0
cmluZygpKTsKICAgICBrZXkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3IgPyBmb250U2Vs
ZWN0b3ItPnVuaXF1ZUlkKCkgOiAwOwogICAgIGtleS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9u
dFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT52ZXJzaW9uKCkgOiAwOwogICAgIHJldHVybiBrZXk7
CkBAIC00ODAsNyArNDcwLDcgQEAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IEZvbnRDYWNoZTo6cmV0
cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3IKICAgICAgICAgcmV0
dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmZvbnRzLmdldCgpOwogCiAgICAgYXV0byYg
bmV3RW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIG5ld0VudHJ5ID0gbWFr
ZVVuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KFdURk1vdmUoa2V5KSwgRm9udENhc2NhZGVG
b250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOworICAgIG5ld0VudHJ5ID0gbWFr
ZVVuaXF1ZTxGb250Q2FzY2FkZUNhY2hlRW50cnk+KGtleS5pc29sYXRlZENvcHkoKSwgRm9udENh
c2NhZGVGb250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSkpOwogICAgIFJlZjxGb250
Q2FzY2FkZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CiAKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdW5yZWZlcmVuY2VkUHJ1bmVJbnRlcnZhbCA9IDUwOwpAQCAtNDk3
LDYgKzQ4Nyw3IEBAIFJlZjxGb250Q2FzY2FkZUZvbnRzPiBGb250Q2FjaGU6OnJldHJpZXZlT3JB
ZGRDYWNoZWRGb250cyhjb25zdCBGb250Q2FzY2FkZURlc2NyCiAKIHZvaWQgRm9udENhY2hlOjp1
cGRhdGVGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIFJlZlB0cjxG
b250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKICAgICBmb250Q2FzY2FkZS51cGRhdGVGb250cyhyZXRyaWV2ZU9yQWRkQ2Fj
aGVkRm9udHMoZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIFdURk1vdmUoZm9udFNlbGVj
dG9yKSkpOwogfQogCkBAIC01MDcsOSArNDk4LDggQEAgc2l6ZV90IEZvbnRDYWNoZTo6Zm9udENv
dW50KCkKIAogc2l6ZV90IEZvbnRDYWNoZTo6aW5hY3RpdmVGb250Q291bnQoKQogewotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb250TG9jayk7
Ci0jZW5kaWYKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisKICAgICB1bnNp
Z25lZCBjb3VudCA9IDA7CiAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVkRm9udHMoKS52YWx1
ZXMoKSkgewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCkBAIC01MjIsNiArNTEyLDgg
QEAgc3RhdGljIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4qIGdDbGllbnRzOwogCiB2b2lkIEZvbnRD
YWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciYgY2xpZW50KQogeworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2soZ1BsYXRmb3JtRGF0YUNhY2hlTG9jayk7CisKICAgICBpZiAoIWdDbGllbnRz
KQogICAgICAgICBnQ2xpZW50cyA9IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+OwogCkBAIC01
MzEsNiArNTIzLDggQEAgdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3ImIGNs
aWVudCkKIAogdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImIGNsaWVu
dCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2sp
OworCiAgICAgQVNTRVJUKGdDbGllbnRzKTsKICAgICBBU1NFUlQoZ0NsaWVudHMtPmNvbnRhaW5z
KCZjbGllbnQpKTsKIApAQCAtNTQ2LDYgKzU0MCw4IEBAIHVuc2lnbmVkIHNob3J0IEZvbnRDYWNo
ZTo6Z2VuZXJhdGlvbigpCiAKIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIHsKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGdQbGF0Zm9ybURhdGFDYWNoZUxvY2spOworCiAgICAgaWYg
KCFnQ2xpZW50cykgewogICAgICAgICBBU1NFUlQoZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuaXNF
bXB0eSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTg1LDcgKzU4MSw3IEBAIHZvaWQgRm9udENh
Y2hlOjpwcmV3YXJtKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpCiB7CiB9CiAKLVJlZlB0cjxG
b250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21TdHJpbmcmKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgU3RyaW5nJikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXgg
ZGVjZDY3ZWRhZDY4Yzc3MWYwODJkOGZjYjU3OGMzMTIzZDU3ZmYyZS4uMWFmNmY3NTE1MDhkY2U4
ZmZlYWUyOWUyNjUwNjk3ZmNiMzJjOGJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMzLDEyICszMywxMyBAQAogI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJG
b250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFycmF5
PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlY3Vyc2l2ZUxvY2tBZGFwdGVy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtNzksNyArODAsNyBAQCBzdHJ1Y3Qg
Rm9udERlc2NyaXB0aW9uS2V5IHsKICAgICAgICAgOiBtX3NpemUoZGVzY3JpcHRpb24uY29tcHV0
ZWRQaXhlbFNpemUoKSkKICAgICAgICAgLCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0KGRlc2NyaXB0
aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCkpCiAgICAgICAgICwgbV9mbGFncyhtYWtlRmxhZ3NL
ZXkoZGVzY3JpcHRpb24pKQotICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmll
ZExvY2FsZSgpKQorICAgICAgICAsIG1fbG9jYWxlKGRlc2NyaXB0aW9uLnNwZWNpZmllZExvY2Fs
ZSgpLnN0cmluZygpKQogICAgICAgICAsIG1fZmVhdHVyZVNldHRpbmdzKGRlc2NyaXB0aW9uLmZl
YXR1cmVTZXR0aW5ncygpKQogICAgICAgICAsIG1fdmFyaWF0aW9uU2V0dGluZ3MoZGVzY3JpcHRp
b24udmFyaWF0aW9uU2V0dGluZ3MoKSkKICAgICB7IH0KQEAgLTE1Nyw3ICsxNTgsNyBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZSB7IDAgfTsKICAgICBGb250U2VsZWN0aW9uUmVxdWVz
dCBtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0OwogICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDI+IG1f
ZmxhZ3Mge3sgMCwgMCB9fTsKLSAgICBBdG9tU3RyaW5nIG1fbG9jYWxlOworICAgIFN0cmluZyBt
X2xvY2FsZTsKICAgICBGb250RmVhdHVyZVNldHRpbmdzIG1fZmVhdHVyZVNldHRpbmdzOwogICAg
IEZvbnRWYXJpYXRpb25TZXR0aW5ncyBtX3ZhcmlhdGlvblNldHRpbmdzOwogfTsKQEAgLTE3OCw5
ICsxNzksMjEgQEAgc3RydWN0IEZvbnREZXNjcmlwdGlvbktleUhhc2ggewogCiBzdHJ1Y3QgRm9u
dENhc2NhZGVDYWNoZUtleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5IGZvbnREZXNjcmlwdGlv
bktleTsgLy8gU2hhcmVkIHdpdGggdGhlIGxvd2VyIGxldmVsIEZvbnRDYWNoZSAoY2FjaGluZyBG
b250IG9iamVjdHMpCi0gICAgVmVjdG9yPEF0b21TdHJpbmcsIDM+IGZhbWlsaWVzOworICAgIFZl
Y3RvcjxTdHJpbmcsIDM+IGZhbWlsaWVzOwogICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwog
ICAgIHVuc2lnbmVkIGZvbnRTZWxlY3RvclZlcnNpb247CisKKyAgICBGb250Q2FzY2FkZUNhY2hl
S2V5IGlzb2xhdGVkQ29weSgpIGNvbnN0CisgICAgeworICAgICAgICBGb250Q2FzY2FkZUNhY2hl
S2V5IGNvcHk7CisgICAgICAgIGNvcHkuZm9udERlc2NyaXB0aW9uS2V5ID0gZm9udERlc2NyaXB0
aW9uS2V5OworICAgICAgICBjb3B5LmZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmFt
aWxpZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBmYW1pbHkgOiBmYW1pbGllcykKKyAg
ICAgICAgICAgIGNvcHkuZmFtaWxpZXMudW5jaGVja2VkQXBwZW5kKGZhbWlseS5pc29sYXRlZENv
cHkoKSk7CisgICAgICAgIGNvcHkuZm9udFNlbGVjdG9ySWQgPSBmb250U2VsZWN0b3JJZDsKKyAg
ICAgICAgY29weS5mb250U2VsZWN0b3JWZXJzaW9uID0gZm9udFNlbGVjdG9yVmVyc2lvbjsKKyAg
ICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQogfTsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVF
bnRyeSB7CkBAIC0yMjQsMTIgKzIzNywxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGV4aXN0cyBzbyBDU1NGb250U2VsZWN0b3IgY2FuIGhhdmUgYSB1bmlmaWVkIG5vdGlvbiBv
ZiBwcmVpbnN0YWxsZWQgZm9udHMgYW5kIEBmb250LWZhY2UuCiAgICAgLy8gSXQgY29tZXMgaW50
byBwbGF5IHdoZW4geW91IGNyZWF0ZSBhbiBAZm9udC1mYWNlIHdoaWNoIHNoYXJlcyBhIGZhbWls
eSBuYW1lIGFzIGEgcHJlaW5zdGFsbGVkIGZvbnQuCi0gICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXM+IGdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBB
dG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOworICAgIFZlY3RvcjxGb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzPiBnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHko
Y29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPEZvbnQ+IGZvbnRGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
Y29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVh
dHVyZXMgPSBudWxscHRyLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzIGZvbnRG
YWNlQ2FwYWJpbGl0aWVzID0geyB9LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSA9IGZhbHNl
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Rm9udD4gZm9udEZvckZhbWlseShjb25zdCBG
b250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwot
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHkpOworICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSk7CiAKICAgICB2b2lkIGFk
ZENsaWVudChGb250U2VsZWN0b3ImKTsKICAgICB2b2lkIHJlbW92ZUNsaWVudChGb250U2VsZWN0
b3ImKTsKQEAgLTI0Nyw3ICsyNjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhcldpZHRoQ2Fj
aGVzKCk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVz
Y3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQm
LCBBdG9tU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CisgICAgUmVmUHRyPEZvbnQ+IGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExP
R0ZPTlQmLCBTdHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KE9QRU5UWVBFX1ZFUlRJQ0FMKQpAQCAtMjgzLDE2ICsyOTYsMTggQEAgcHJpdmF0ZToKICAgICBS
ZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgotICAgIEZvbnRQ
bGF0Zm9ybURhdGEqIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzID0gbnVsbHB0ciwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFi
aWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcyA9IHsgfSwgYm9vbCBjaGVja2luZ0FsdGVybmF0
ZU5hbWUgPSBmYWxzZSk7CisgICAgRm9udFBsYXRmb3JtRGF0YSogZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcyA9IG51bGxwdHIsIEZvbnRT
ZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMgPSB7IH0s
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lID0gZmFsc2UpOwogCiAgICAgLy8gVGhlc2UgbWV0
aG9kcyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwotICAgIAotICAgIHN0YXRp
YyBjb25zdCBBdG9tU3RyaW5nJiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
KTsKLSAgICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcGxhdGZvcm1BbHRlcm5hdGVGYW1pbHlO
YW1lKGNvbnN0IEF0b21TdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5n
cyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBm
b250RmFjZUNhcGFiaWxpdGllcyk7CisKKyAgICBzdGF0aWMgT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBPcHRpb25h
bDxBU0NJSUxpdGVyYWw+IHBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcm
KTsKKworICAgIFJlY3Vyc2l2ZUxvY2sgbV9sb2NrOworCisgICAgUnVuTG9vcDo6VGltZXI8Rm9u
dENhY2hlPiBtX3B1cmdlVGltZXI7CiAKLSAgICBUaW1lciBtX3B1cmdlVGltZXI7Ci0gICAgCiAg
ICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxz
ZSB9OwogCiAgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CkBAIC0zMDks
NyArMzI0LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZv
cm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFGb3JUZXN0aW5nKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHkpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9u
LCBmYW1pbHksIG51bGxwdHIsIHsgfSk7CisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURh
dGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkuc3RyaW5nKCksIG51bGxwdHIsIHsgfSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCA2NmI2ZjEzYWQzMzAyZDYy
ZGJjOTUwMjMwMzhkYmY0NmUyOGMxOTIwLi45Y2UxYTcyZmIzMjNlOTFhODdkZWNhNGIwN2Y5NTEx
YTg1ZGI5Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmgKQEAgLTE2OCw3ICsxNjgsOSBAQCBwdWJsaWM6CiAgICAgaW50IGVtcGhhc2lzTWFy
a0hlaWdodChjb25zdCBBdG9tU3RyaW5nJikgY29uc3Q7CiAKICAgICBjb25zdCBGb250JiBwcmlt
YXJ5Rm9udCgpIGNvbnN0OwotICAgIGNvbnN0IEZvbnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQo
dW5zaWduZWQpIGNvbnN0OworICAgIGJvb2wgZmFsbGJhY2tSYW5nZXNBcmVOdWxsKHVuc2lnbmVk
KSBjb25zdDsKKyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGZhbGxi
YWNrUmFuZ2VzSW5kZXgsIFVDaGFyMzIpIGNvbnN0OworICAgIGNvbnN0IEZvbnQmIGZvbnRGb3JG
aXJzdFJhbmdlKCkgY29uc3Q7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyLCBib29sIG1pcnJvciwgRm9udFZhcmlhbnQgPSBBdXRvVmFyaWFudCkgY29uc3Q7CiAK
ICAgICBjb25zdCBGb250KiBmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqLCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKQEAgLTMzNiwxMCArMzM4LDIyIEBAIGlubGlu
ZSBjb25zdCBGb250JiBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnQoKSBjb25zdAogICAgIHJldHVy
biBtX2ZvbnRzLT5wcmltYXJ5Rm9udChtX2ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLWlubGluZSBj
b25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZTo6ZmFsbGJhY2tSYW5nZXNBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK2lubGluZSBib29sIEZvbnRDYXNjYWRlOjpmYWxsYmFja1Jhbmdlc0FyZU51
bGwodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZm9udHMpOwotICAgIHJl
dHVybiBtX2ZvbnRzLT5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChtX2ZvbnREZXNjcmlwdGlvbiwg
aW5kZXgpOworICAgIHJldHVybiBtX2ZvbnRzLT5mYWxsYmFja1Jhbmdlc0FyZU51bGwobV9mb250
RGVzY3JpcHRpb24sIGluZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEZvbnQqIEZvbnRDYXNjYWRl
Ojpmb250Rm9yQ2hhcmFjdGVyKHVuc2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JD
aGFyYWN0ZXIobV9mb250RGVzY3JpcHRpb24sIGluZGV4LCBjaGFyYWN0ZXIpOworfQorCitpbmxp
bmUgY29uc3QgRm9udCYgRm9udENhc2NhZGU6OmZvbnRGb3JGaXJzdFJhbmdlKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9mb250cyk7CisgICAgcmV0dXJuIG1fZm9udHMtPmZvbnRGb3JGaXJzdFJh
bmdlKG1fZm9udERlc2NyaXB0aW9uKTsKIH0KIAogaW5saW5lIGJvb2wgRm9udENhc2NhZGU6Omlz
Rml4ZWRQaXRjaCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCmluZGV4IDFkMjkzZDdmMTU4
Y2Q1YzI5YWEwMmMzMTkyNDgwNDNmYTc0NjRhZGMuLjE4MWFhM2EzODAzYjIyOTcxZmMxOTg3ZWZk
M2ZhNDA0ODBlY2FlNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uY3BwCkBAIC0xMDEsOCArMTAxLDEw
IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWxpZXNFcXVhbEZvclRleHRBdXRv
U2l6aW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAKICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRP
U0laSU5HKQogCi1ib29sIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVzQXJlRXF1
YWwoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MSwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5MikK
K2Jvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBT
dHJpbmcmIGZhbWlseTEsIGNvbnN0IFN0cmluZyYgZmFtaWx5MikKIHsKKyAgICBpZiAoZmFtaWx5
MS5pc051bGwoKSB8fCBmYW1pbHkyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFtaWx5MS5p
c051bGwoKSAmJiBmYW1pbHkyLmlzTnVsbCgpOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlm
IChmYW1pbHkxLnN0YXJ0c1dpdGgoJy4nKSkKICAgICAgICAgcmV0dXJuIGZhbWlseTEgPT0gZmFt
aWx5MjsKQEAgLTExMCwxNyArMTEyLDE1IEBAIGJvb2wgRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
ZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkxLCBjb25zCiAgICAg
cmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaDo6ZXF1YWwoZmFtaWx5MSwgZmFtaWx5Mik7
CiB9CiAKLXVuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZhbWlseU5hbWVIYXNoKGNv
bnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK3Vuc2lnbmVkIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246
OmZhbWlseU5hbWVIYXNoKGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0aCgnLicpKQotICAgICAgICByZXR1cm4gZmFt
aWx5LmV4aXN0aW5nSGFzaCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaDo6aGFzaChmYW1pbHkpOworICAgIHJldHVybiBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhh
c2g6Omhhc2goZmFtaWx5LmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IGZhbWlseSk7CiB9CiAK
IFN0cmluZyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpmb2xkZWRGYW1pbHlOYW1lKGNvbnN0IFN0
cmluZyYgZmFtaWx5KQogeworICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFtaWx5OwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChmYW1pbHkuc3RhcnRzV2l0
aCgnLicpKQogICAgICAgICByZXR1cm4gZmFtaWx5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oCmluZGV4IDBh
N2RmMjUyOGRhYzYyYThjNWE4OTBiZDJkZmE0MzBhMjE0ZGQ3ZjYuLjM3OWNhZDdmZDU4ZWQxZjdk
MmYwMTU4YTZkMzFhODkxYmMwNjNiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmgKQEAgLTU3LDggKzU3
LDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseUF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZmFtaWxpZXNbaV07IH0KICAgICBjb25zdCBSZWZDb3VudGVkQXJy
YXk8QXRvbVN0cmluZz4mIGZhbWlsaWVzKCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbGllczsgfQog
Ci0gICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChjb25zdCBBdG9tU3RyaW5nJiwg
Y29uc3QgQXRvbVN0cmluZyYpOwotICAgIHN0YXRpYyB1bnNpZ25lZCBmYW1pbHlOYW1lSGFzaChj
b25zdCBBdG9tU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZmFtaWx5TmFtZXNBcmVFcXVhbChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZmFtaWx5
TmFtZUhhc2goY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIFN0cmluZyBmb2xkZWRGYW1pbHlO
YW1lKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZWZmZWN0aXZlRmFtaWx5Q291bnQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAKaW5kZXggMmRkZDZiZGYxOTQzODQxN2FkZWE3MTEyNDdkMjE3NmQ1
NzYzNTIzNC4uNmIyMzY1Njg1MGU4YjAyNjE0NGI3MWVlZjkxZTgxZjZhYmRjYjYzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250
cy5jcHAKQEAgLTEwNywxOCArMTA3LDIwIEBAIEZvbnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRl
Rm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB9CiAKIEZvbnRDYXNj
YWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhKQotICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQorICAgIDogbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSgxKQorICAgICwgbV9jYWNoZWRQcmltYXJ5Rm9udChudWxs
cHRyKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKDApCiAgICAgLCBtX2dlbmVyYXRpb24o
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCiAgICAgLCBtX2lzRm9yUGxhdGZv
cm1Gb250KHRydWUpCiB7Ci0gICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250
UmFuZ2VzKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9y
bURhdGEpKSk7CisgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnB1c2hfYmFjayhGb250UmFu
Z2VzKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvclBsYXRmb3JtRGF0YShwbGF0Zm9ybURh
dGEpKSk7CiB9CiAKIEZvbnRDYXNjYWRlRm9udHM6On5Gb250Q2FzY2FkZUZvbnRzKCkgPSBkZWZh
dWx0OwogCiB2b2lkIEZvbnRDYXNjYWRlRm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKICAgICBh
dXRvJiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IDApOwogICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHByaW1hcnlSYW5nZXMuc2l6ZSgpOwogICAg
IGlmIChudW1SYW5nZXMgPT0gMSkKQEAgLTEyOSw2ICsxMzEsNyBAQCB2b2lkIEZvbnRDYXNjYWRl
Rm9udHM6OmRldGVybWluZVBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uKQogCiBib29sIEZvbnRDYXNjYWRlRm9udHM6OmlzTG9hZGluZ0N1c3RvbUZvbnRzKCkg
Y29uc3QKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgZm9yIChh
dXRvJiBmb250UmFuZ2VzIDogbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzKSB7CiAgICAgICAgIGlm
IChmb250UmFuZ2VzLmlzTG9hZGluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
NzMsMTQgKzE3NiwyMSBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogCiBjb25zdCBGb250UmFu
Z2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7Ci0gICAg
aWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07CisgICAgLy8gbV9yZWFsaXplZEZh
bGxiYWNrUmFuZ2VzIGlzIGEgbGlua2VkIGxpc3QgYW5kIGl0cyBsZW5ndGggb25seSBncm93cywK
KyAgICAvLyBpdCBpcyBuZXZlciBvdGhlcndpc2UgbW9kaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCBp
dCdzIHNhZmUgdG8gYWNjZXNzCisgICAgLy8gZXhpc3Rpbmcgbm9kZXMgd2l0aG91dCB0YWtpbmcg
dGhlIGxvY2ssIHNvIHdlIGFzc2VydCB0aGF0IHRoZSBsb2NrIGlzCisgICAgLy8gaGVsZCBhZnRl
ciB0aGlzIGZhc3QgcmV0dXJuIHBhdGguCisgICAgaWYgKGluZGV4IDwgbV9yZWFsaXplZEZhbGxi
YWNrUmFuZ2VzU2l6ZSkgeworICAgICAgICBhdXRvIGl0ID0gbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzLmJlZ2luKCk7CisgICAgICAgIHN0ZDo6YWR2YW5jZShpdCwgaW5kZXgpOworICAgICAgICBy
ZXR1cm4gKml0OworICAgIH0KIAotICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJh
Y2tSYW5nZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKyAgICBBU1NF
UlQoaW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSk7CiAgICAgQVNTRVJUKEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKLSAg
ICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7Ci0gICAgYXV0
byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CisgICAgYXV0
byBmb250UmFuZ2VzID0gRm9udFJhbmdlcygpOwogCiAgICAgaWYgKCFpbmRleCkgewogICAgICAg
ICBmb250UmFuZ2VzID0gcmVhbGl6ZU5leHRGYWxsYmFjayhkZXNjcmlwdGlvbiwgbV9sYXN0UmVh
bGl6ZWRGYWxsYmFja0luZGV4LCBtX2ZvbnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0xODgsMjMgKzE5
OCw0MiBAQCBjb25zdCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJh
Y2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2FkZURlcwogICAgICAgICAgICAgZm9udFJhbmdlcyA9
IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFuZGFy
ZEZhbWlseSk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAg
Zm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVzb3J0
RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIHJldHVybiBmb250UmFuZ2VzOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXggPCBk
ZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKQorICAgICAgICAgICAgZm9udFJhbmdl
cyA9IHJlYWxpemVOZXh0RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJh
Y2tJbmRleCwgbV9mb250U2VsZWN0b3IuZ2V0KCkpOworCisgICAgICAgIGlmIChmb250UmFuZ2Vz
LmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKSB7CisgICAgICAgICAgICBBU1NFUlQobV9sYXN0
UmVhbGl6ZWRGYWxsYmFja0luZGV4ID49IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50
KCkpOworCisgICAgICAgICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0g
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5
Q291bnQoKTsKKyAgICAgICAgICAgIGlmIChmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ICE9IG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgKytt
X2xhc3RSZWFsaXplZEZhbGxiYWNrSW5kZXg7CisgICAgICAgICAgICAgICAgZm9udFJhbmdlcyA9
IEZvbnRSYW5nZXMobV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udEF0KGRlc2NyaXB0aW9uLCBm
b250U2VsZWN0b3JGYWxsYmFja0luZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAobV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IDwgZGVzY3JpcHRpb24u
ZWZmZWN0aXZlRmFtaWx5Q291bnQoKSkKLSAgICAgICAgZm9udFJhbmdlcyA9IHJlYWxpemVOZXh0
RmFsbGJhY2soZGVzY3JpcHRpb24sIG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCwgbV9mb250
U2VsZWN0b3IuZ2V0KCkpOworICAgIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5wdXNoX2JhY2so
V1RGTW92ZShmb250UmFuZ2VzKSk7CisgICAgKyttX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXpl
OworICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYmFjaygpOworfQogCi0gICAg
aWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgQVNT
RVJUKG1fbGFzdFJlYWxpemVkRmFsbGJhY2tJbmRleCA+PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlDb3VudCgpKTsKK2Jvb2wgRm9udENhc2NhZGVGb250czo6ZmFsbGJhY2tSYW5nZXNBcmVO
dWxsKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCB1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVk
RmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsKKyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNr
UmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5pc051bGwoKTsKK30KIAotICAgICAgICB1bnNp
Z25lZCBmb250U2VsZWN0b3JGYWxsYmFja0luZGV4ID0gbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0lu
ZGV4IC0gZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKTsKLSAgICAgICAgaWYgKGZv
bnRTZWxlY3RvckZhbGxiYWNrSW5kZXggPT0gbV9mb250U2VsZWN0b3ItPmZhbGxiYWNrRm9udENv
dW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKLSAgICAgICAgKyttX2xhc3RS
ZWFsaXplZEZhbGxiYWNrSW5kZXg7Ci0gICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKG1f
Zm9udFNlbGVjdG9yLT5mYWxsYmFja0ZvbnRBdChkZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yRmFs
bGJhY2tJbmRleCkpOwotICAgIH0KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRG
b3JDaGFyYWN0ZXIoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHVu
c2lnbmVkIGluZGV4LCBVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrSWYobV9sb2NrLCBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNTaXplIDw9IGluZGV4KTsK
KyAgICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIGluZGV4KS5m
b250Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CiAKLSAgICByZXR1cm4gZm9udFJhbmdlczsK
K2NvbnN0IEZvbnQmIEZvbnRDYXNjYWRlRm9udHM6OmZvbnRGb3JGaXJzdFJhbmdlKGNvbnN0IEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2tJZihtX2xvY2ssIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5lbXB0eSgpKTsKKyAg
ICByZXR1cm4gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDApLmZvbnRGb3JG
aXJzdFJhbmdlKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0luUmFuZ2UoVUNoYXIzMiBj
aGFyYWN0ZXIsIFVDaGFyMzIgbG93ZXJCb3VuZCwgVUNoYXIzMiB1cHBlckJvdW5kKQpAQCAtMzIz
LDEwICszNTIsMTAgQEAgc3RhdGljIEdseXBoRGF0YSBnbHlwaERhdGFGb3JOb25DSktDaGFyYWN0
ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hhcjMyIGNoYXJhY3QKICAgICByZXR1cm4gZGF0YTsK
IH0KIAotc3RhdGljIGNvbnN0IEZvbnQqIGZpbmRCZXN0RmFsbGJhY2tGb250KEZvbnRDYXNjYWRl
Rm9udHMmIGZvbnRDYXNjYWRlRm9udHMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlRm9u
dHM6OmZpbmRCZXN0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGZhbGxi
YWNrSW5kZXggPSAwOyA7ICsrZmFsbGJhY2tJbmRleCkgewotICAgICAgICBhdXRvJiBmb250UmFu
Z2VzID0gZm9udENhc2NhZGVGb250cy5yZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgZmFsbGJhY2tJbmRleCk7CisgICAgICAgIGF1dG8mIGZvbnRSYW5nZXMgPSByZWFsaXplRmFs
bGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgZmFsbGJhY2tJbmRleCk7CiAgICAgICAgIGlmIChm
b250UmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8qIGN1
cnJlbnRGb250ID0gZm9udFJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBF
eHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkZvcmJpZCkuZm9udDsKQEAgLTM0MiwxMCAr
MzcxLDEwIEBAIHN0YXRpYyBjb25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChGb250Q2Fz
Y2FkZUZvbnRzJiBmb250Q2FzY2FkZUZvbnRzLCBjb25zCiAKIEdseXBoRGF0YSBGb250Q2FzY2Fk
ZUZvbnRzOjpnbHlwaERhdGFGb3JTeXN0ZW1GYWxsYmFjayhVQ2hhcjMyIGNoYXJhY3RlciwgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIEZvbnRWYXJpYW50IHZhcmlh
bnQsIGJvb2wgc3lzdGVtRmFsbGJhY2tTaG91bGRCZUludmlzaWJsZSkKIHsKLSAgICBjb25zdCBG
b250KiBmb250ID0gZmluZEJlc3RGYWxsYmFja0ZvbnQoKnRoaXMsIGRlc2NyaXB0aW9uLCBjaGFy
YWN0ZXIpOworICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmaW5kQmVzdEZhbGxiYWNrRm9udChkZXNj
cmlwdGlvbiwgY2hhcmFjdGVyKTsKIAogICAgIGlmICghZm9udCkKLSAgICAgICAgZm9udCA9ICZy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCkuZm9udEZvckZpcnN0UmFuZ2Uo
KTsKKyAgICAgICAgZm9udCA9ICZmb250Rm9yRmlyc3RSYW5nZShkZXNjcmlwdGlvbik7CiAKICAg
ICBhdXRvIHN5c3RlbUZhbGxiYWNrRm9udCA9IGZvbnQtPnN5c3RlbUZhbGxiYWNrRm9udEZvckNo
YXJhY3RlcihjaGFyYWN0ZXIsIGRlc2NyaXB0aW9uLCBtX2lzRm9yUGxhdGZvcm1Gb250ID8gSXNG
b3JQbGF0Zm9ybUZvbnQ6OlllcyA6IElzRm9yUGxhdGZvcm1Gb250OjpObyk7CiAgICAgaWYgKCFz
eXN0ZW1GYWxsYmFja0ZvbnQpCkBAIC00ODgsOSArNTE3LDkgQEAgc3RhdGljIFJlZlB0cjxHbHlw
aFBhZ2U+IGdseXBoUGFnZUZyb21Gb250UmFuZ2VzKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0
IEZvbnQKIAogR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBG
b250VmFyaWFudCB2YXJpYW50KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKHZhcmlhbnQgIT0gQXV0b1ZhcmlhbnQpOwogCisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2xvY2spOwogICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCiAgICAgICAg
IHJldHVybiBnbHlwaERhdGFGb3JWYXJpYW50KGMsIGRlc2NyaXB0aW9uLCB2YXJpYW50KTsKIApA
QCAtNTE2LDYgKzU0NSw3IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURlCiAKIHZvaWQgRm9udENh
c2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKQogeworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sobV9sb2NrKTsKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkgcmVm
ZXJlbmNlIGZhbGxiYWNrIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCmluZGV4IDQ1MDE5NDQ1ZTMzMzkwYmI4NGNiNjZi
YTVjMTgzYTU4ZjViYWQzOGQuLmQzNWNmNDcwZmJlY2YxMjJjZTUwYTZjMWJmNWJmMzQwZmM0OGY5
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNp
bmNsdWRlICJXaWR0aENhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L1N0ZExpc3QuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW5jbHVkZSAiV2ViQ29y
ZVRocmVhZC5oIgpAQCAtNDMsNyArNDUsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTWl4ZWRG
b250R2x5cGhQYWdlOwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihG
b250Q2FzY2FkZUZvbnRzKTsKLWNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBwdWJsaWMgUmVmQ291
bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CitjbGFzcyBGb250Q2FzY2FkZUZvbnRzIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEZvbnRDYXNjYWRlRm9udHM+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShGb250Q2FzY2FkZUZvbnRzKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9XSVRIX0hFQVBfSURFTlRJRklFUihGb250Q2FzY2FkZUZvbnRzKTsKIHB1YmxpYzoKQEAgLTcw
LDcgKzcyLDkgQEAgcHVibGljOgogICAgIGNvbnN0IFdpZHRoQ2FjaGUmIHdpZHRoQ2FjaGUoKSBj
b25zdCB7IHJldHVybiBtX3dpZHRoQ2FjaGU7IH0KIAogICAgIGNvbnN0IEZvbnQmIHByaW1hcnlG
b250KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBGb250UmFuZ2VzJiByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChjb25zdCBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiwgdW5zaWduZWQgZmFsbGJhY2tJbmRleCk7CisgICAgYm9vbCBmYWxsYmFj
a1Jhbmdlc0FyZU51bGwoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkKTsK
KyAgICBjb25zdCBGb250KiBmb250Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mLCB1bnNpZ25lZCBmYWxsYmFja1Jhbmdlc0luZGV4LCBVQ2hhcjMyKTsKKyAgICBjb25z
dCBGb250JiBmb250Rm9yRmlyc3RSYW5nZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJik7
CiAKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tzKCk7CiAKQEAgLTc4LDEwICs4MiwxNCBA
QCBwcml2YXRlOgogICAgIEZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJik7
CiAgICAgRm9udENhc2NhZGVGb250cyhjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAKKyAgICBj
b25zdCBGb250KiBmaW5kQmVzdEZhbGxiYWNrRm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiwgVUNoYXIzMik7CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvclN5c3RlbUZhbGxiYWNr
KFVDaGFyMzIsIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBGb250VmFyaWFudCwgYm9v
bCBzeXN0ZW1GYWxsYmFja1Nob3VsZEJlSW52aXNpYmxlKTsKICAgICBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yVmFyaWFudChVQ2hhcjMyLCBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgRm9u
dFZhcmlhbnQsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXggPSAwKTsKIAotICAgIFZlY3RvcjxGb250
UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgV0VCQ09SRV9FWFBPUlQg
Y29uc3QgRm9udFJhbmdlcyYgcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYsIHVuc2lnbmVkIGZhbGxiYWNrSW5kZXgpOworCisgICAgU3RkTGlzdDxG
b250UmFuZ2VzPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CisgICAgdW5zaWduZWQgbV9yZWFs
aXplZEZhbGxiYWNrUmFuZ2VzU2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX2xhc3RSZWFsaXpl
ZEZhbGxiYWNrSW5kZXggeyAwIH07CiAKICAgICBjbGFzcyBHbHlwaFBhZ2VDYWNoZUVudHJ5IHsK
QEAgLTEwNSw3ICsxMTMsNyBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxSZWZQdHI8Rm9udD4+
IG1fc3lzdGVtRmFsbGJhY2tGb250U2V0OwogCi0gICAgY29uc3QgRm9udCogbV9jYWNoZWRQcmlt
YXJ5Rm9udDsKKyAgICBzdGQ6OmF0b21pYzxjb25zdCBGb250Kj4gbV9jYWNoZWRQcmltYXJ5Rm9u
dDsKICAgICBSZWZQdHI8Rm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3RvcjsKIAogICAgIFdpZHRo
Q2FjaGUgbV93aWR0aENhY2hlOwpAQCAtMTE0LDYgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwogICAgIFBpdGNoIG1fcGl0Y2ggeyBVbmtub3duUGl0
Y2ggfTsKICAgICBib29sIG1faXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OworICAgIG11dGFi
bGUgTG9jayBtX2xvY2s7CiB9OwogCiBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0Zp
eGVkUGl0Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCkBAIC0x
MjUsMjYgKzEzNCwzMSBAQCBpbmxpbmUgYm9vbCBGb250Q2FzY2FkZUZvbnRzOjppc0ZpeGVkUGl0
Y2goY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcAogCiBpbmxpbmUgY29uc3Qg
Rm9udCYgRm9udENhc2NhZGVGb250czo6cHJpbWFyeUZvbnQoY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAoIW1fY2FjaGVkUHJpbWFyeUZvbnQpIHsKLSAgICAgICAgYXV0byYgcHJpbWFyeVJhbmdl
cyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKTsKLSAgICAgICAgbV9j
YWNoZWRQcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcg
JywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsKLSAgICAgICAg
aWYgKCFtX2NhY2hlZFByaW1hcnlGb250KQotICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9ICZwcmltYXJ5UmFuZ2VzLmZvbnRGb3JGaXJzdFJhbmdlKCk7Ci0gICAgICAgIGVsc2UgaWYg
KG1fY2FjaGVkUHJpbWFyeUZvbnQtPmlzSW50ZXJzdGl0aWFsKCkpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAxOyA7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRv
JiBsb2NhbFJhbmdlcyA9IHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCBpbmRl
eCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsUmFuZ2VzLmlzTnVsbCgpKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBhdXRvKiBmb250ID0gbG9jYWxSYW5n
ZXMuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9s
aWN5OjpGb3JiaWQpLmZvbnQ7Ci0gICAgICAgICAgICAgICAgaWYgKGZvbnQgJiYgIWZvbnQtPmlz
SW50ZXJzdGl0aWFsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9u
dCA9IGZvbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgIGF1dG8qIHByaW1hcnlG
b250ID0gbV9jYWNoZWRQcmltYXJ5Rm9udC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUp
OworICAgIGlmICghcHJpbWFyeUZvbnQpIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2xvY2spOworICAgICAgICBpZiAoIShwcmltYXJ5Rm9udCA9IG1fY2FjaGVkUHJpbWFyeUZv
bnQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSkpIHsKKyAgICAgICAgICAgIGF1dG8m
IHByaW1hcnlSYW5nZXMgPSByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwgMCk7
CisgICAgICAgICAgICBwcmltYXJ5Rm9udCA9IHByaW1hcnlSYW5nZXMuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKCcgJywgRXh0ZXJuYWxSZXNvdXJjZURvd25sb2FkUG9saWN5OjpBbGxvdykuZm9udDsK
KyAgICAgICAgICAgIGlmICghcHJpbWFyeUZvbnQpCisgICAgICAgICAgICAgICAgcHJpbWFyeUZv
bnQgPSAmcHJpbWFyeVJhbmdlcy5mb250Rm9yRmlyc3RSYW5nZSgpOworICAgICAgICAgICAgZWxz
ZSBpZiAocHJpbWFyeUZvbnQtPmlzSW50ZXJzdGl0aWFsKCkpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMTsgOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8mIGxvY2FsUmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24s
IGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsUmFuZ2VzLmlzTnVsbCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGF1dG8q
IGZvbnQgPSBsb2NhbFJhbmdlcy5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJl
c291cmNlRG93bmxvYWRQb2xpY3k6OkZvcmJpZCkuZm9udDsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGZvbnQgJiYgIWZvbnQtPmlzSW50ZXJzdGl0aWFsKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHByaW1hcnlGb250ID0gZm9udDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9jYWNoZWRQcmltYXJ5Rm9udC5zdG9yZShwcmltYXJ5Rm9udCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuICpt
X2NhY2hlZFByaW1hcnlGb250OworCisgICAgcmV0dXJuICpwcmltYXJ5Rm9udDsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAppbmRl
eCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUwLi4xZjFmZGJiMGYxZTZh
NTBhNDJmNTA0NGU5MjIwODE3ZGViMmMwZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiRm9udFJhbmdlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAotY2xhc3MgRm9udFNlbGVjdG9y
IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CitjbGFzcyBGb250U2VsZWN0b3Ig
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgPSBkZWZhdWx0OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oCmluZGV4IGNkMGRjZDQ2ZmVhYjJiMWJkN2Zh
N2ZlMWVlYTJmOGQ3YzM4Mjc3MzMuLjhjZjljZGFjZmI3YWI0ZTBmODExMTY5M2JkNTZmYWNmNWNk
MTk1ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5o
CkBAIC0zMiw4ICszMiw4IEBACiAKICNpbmNsdWRlICJHbHlwaC5oIgogI2luY2x1ZGUgPHVuaWNv
ZGUvdXR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNTcsNyArNTcsNyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIEEg
R2x5cGhQYWdlIGNvbnRhaW5zIGEgZml4ZWQtc2l6ZSBzZXQgb2YgR2x5cGhEYXRhIG1hcHBpbmdz
IGZvciBhIGNvbnRpZ3VvdXMKIC8vIHJhbmdlIG9mIGNoYXJhY3RlcnMgaW4gdGhlIFVuaWNvZGUg
Y29kZSBzcGFjZS4gR2x5cGhQYWdlcyBhcmUgaW5kZXhlZAogLy8gc3RhcnRpbmcgZnJvbSAwIGFu
ZCBpbmNyZW1lbnRpbmcgZm9yIGVhY2ggInNpemUiIG51bWJlciBvZiBnbHlwaHMuCi1jbGFzcyBH
bHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKK2NsYXNzIEdseXBoUGFn
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4MmY3YzJjZjhiMjM0MjNiYzcwNDhh
Mzg5NmE3Y2NhNGVhMDQ4Li5kZTE0NzE2ZmIxZDZmYTVhOGFmNTQ1MTU2ODBlOGZmNmY4MWEwMTY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250
Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTI5LDggKzEyOSw4IEBAIGNvbnN0
IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29u
c3QgVUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICYmICghcHJlZmVyQ29sb3JlZEZvbnQgfHwgYmFz
ZUZvbnQtPnBsYXRmb3JtRGF0YSgpLmlzQ29sb3JCaXRtYXBGb250KCkpKQogICAgICAgICByZXR1
cm4gYmFzZUZvbnQ7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNB
dChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZhbGxiYWNrRm9udCA9
IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0FyZU51bGwoaSk7ICsraSkgeworICAg
ICAgICBjb25zdCBGb250KiBmYWxsYmFja0ZvbnQgPSBmb250Rm9yQ2hhcmFjdGVyKGksIGNoYXJh
Y3Rlcik7CiAgICAgICAgIGlmICghZmFsbGJhY2tGb250IHx8IGZhbGxiYWNrRm9udCA9PSBiYXNl
Rm9udCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKaW5k
ZXggODVjOTRhOWE5M2YwOGIwMmI1NDdlMGJlNjA1NjZjZmMxNDA4MDIyZi4uZDY3MWJhZmI2YmY4
NjIwZmE3YTA5NDRmMjUyMmE2YzQxMzE1YjI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcApA
QCAtNjE5LDcgKzYxOSw3IEBAIFJldGFpblB0cjxDVEZvbnRSZWY+IHByZXBhcmVQbGF0Zm9ybUZv
bnQoQ1RGb250UmVmIG9yaWdpbmFsRm9udCwgY29uc3QgRm9udERlc2NyCiAgICAgcmV0dXJuIGFk
b3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG9yaWdpbmFsRm9udCwgQ1RGb250
R2V0U2l6ZShvcmlnaW5hbEZvbnQpLCBudWxscHRyLCBkZXNjcmlwdG9yLmdldCgpKSk7CiB9CiAK
LVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlv
biYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkKK1JlZlB0cjxGb250PiBG
b250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewogICAgIC8vIEF0dGVtcHQgdG8gZmluZCBhbiBhcHBy
b3ByaWF0ZSBmb250IHVzaW5nIGEgbWF0Y2ggYmFzZWQgb24gdGhlIHByZXNlbmNlIG9mIGtleXdv
cmRzIGluCiAgICAgLy8gdGhlIHJlcXVlc3RlZCBuYW1lcy4gRm9yIGV4YW1wbGUsIHdlJ2xsIG1h
dGNoIGFueSBuYW1lIHRoYXQgY29udGFpbnMgIkFyYWJpYyIgdG8gR2VlemEgUHJvLgpAQCAtNjI4
LDI3ICs2MjgsMTkgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXQKIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgLy8gU3Vic3RpdHV0ZSB0aGUgZGVmYXVsdCBtb25vc3BhY2UgZm9udCBm
b3Igd2VsbC1rbm93biBtb25vc3BhY2UgZm9udHMuCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGZhbWlseSwgIm1vbmFjbyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGZhbWlseSwgIm1lbmxvIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZl
ckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBjb3VyaWVyKCJjb3VyaWVyIiwgQXRvbVN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShk
ZXNjcmlwdGlvbiwgY291cmllcik7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShmYW1pbHksICJtb25hY28iKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShmYW1pbHksICJtZW5sbyIpKQorICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgImNvdXJpZXIiX3MpOwogCiAgICAgLy8gU3Vic3RpdHV0ZSBWZXJkYW5hIGZvciBM
dWNpZGEgR3JhbmRlLgotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHksICJsdWNpZGEgZ3JhbmRlIikpIHsKLSAgICAgICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRl
c3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiB2ZXJkYW5hKCJ2ZXJkYW5hIiwgQXRvbVN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgICAgICByZXR1cm4gZm9udEZvckZhbWlseShkZXNj
cmlwdGlvbiwgdmVyZGFuYSk7Ci0gICAgfQorICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIikpCisgICAgICAgIHJldHVybiBmb250Rm9y
RmFtaWx5KGRlc2NyaXB0aW9uLCAidmVyZGFuYSJfcyk7CiAjZW5kaWYKIAotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGFyYWJpYyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiQXJh
YmljIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHBhc2h0byhNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiUGFzaHRvIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
dHJpbmc+IHVyZHUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVyZHUiKSk7Ci0gICAgc3RhdGlj
IFN0cmluZyogbWF0Y2hXb3Jkc1szXSA9IHsgJmFyYWJpYy5nZXQoKSwgJnBhc2h0by5nZXQoKSwg
JnVyZHUuZ2V0KCkgfTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbVN0cmluZz4gZ2VlemFCb2xkKCJHZWV6YVByby1Cb2xkIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIGZvciAoU3RyaW5nKiBtYXRjaFdvcmQgOiBtYXRjaFdvcmRz
KSB7Ci0gICAgICAgIGlmIChmYW1pbHkuY29udGFpbnNJZ25vcmluZ0FTQ0lJQ2FzZSgqbWF0Y2hX
b3JkKSkKLSAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBpc0Zv
bnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9sZCA6IGdlZXphUGxh
aW4pOworICAgIHN0YXRpYyBjb25zdGV4cHIgQVNDSUlMaXRlcmFsIG1hdGNoV29yZHNbXSA9IHsg
IkFyYWJpYyJfcywgIlBhc2h0byJfcywgIlVyZHUiX3MgfTsKKyAgICBhdXRvIGZhbWlseU1hdGNo
ZXIgPSBTdHJpbmdWaWV3KGZhbWlseSk7CisgICAgZm9yIChhdXRvIG1hdGNoV29yZCA6IG1hdGNo
V29yZHMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZmFtaWx5TWF0Y2hl
ciwgU3RyaW5nVmlldyhtYXRjaFdvcmQpKSkKKyAgICAgICAgICAgIHJldHVybiBmb250Rm9yRmFt
aWx5KGRlc2NyaXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/
ICJHZWV6YVByby1Cb2xkIl9zIDogIkdlZXphUHJvIl9zKTsKICAgICB9CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CkBAIC0xMDg5LDEwICsxMDgxLDEwIEBAIHN0YXRpYyBjb25zdCBGb250RGF0YWJh
c2U6Okluc3RhbGxlZEZvbnQqIGZpbmRDbG9zZXN0Rm9udChjb25zdCBGb250RGF0YWJhc2U6Oklu
CiAgICAgcmV0dXJuICZmYW1pbHlGb250cy5pbnN0YWxsZWRGb250c1tpbmRleF07CiB9CiAKLVZl
Y3RvcjxGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rp
b25DYXBhYmlsaXRpZXNJbkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lLCBBbGxv
d1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKK1ZlY3RvcjxGb250
U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXNJbkZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIGF1dG8mIGZvbnREYXRhYmFz
ZSA9IGFsbG93VXNlckluc3RhbGxlZEZvbnRzID09IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZ
ZXMgPyBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkFsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCkg
OiBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7
Ci0gICAgY29uc3QgYXV0byYgZm9udHMgPSBmb250RGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWls
eShmYW1pbHlOYW1lLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmb250cyA9IGZvbnREYXRh
YmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseU5hbWUpOwogICAgIGlmIChmb250cy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTExMDgsMTAgKzExMDAsMTAgQEAgc3Ry
dWN0IEZvbnRMb29rdXAgewogICAgIGJvb2wgY3JlYXRlZEZyb21Qb3N0U2NyaXB0TmFtZSB7IGZh
bHNlIH07CiB9OwogCi1zdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFt
aWx5KGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QgcmVxdWVz
dCwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxsb3dVc2VySW5zdGFsbGVk
Rm9udHMpCitzdGF0aWMgRm9udExvb2t1cCBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGNv
bnN0IFN0cmluZyYgZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBmbG9hdCBz
aXplLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsK
ICAgICBjb25zdCBhdXRvJiBhbGxvd2xpc3QgPSBmb250QWxsb3dsaXN0KCk7Ci0gICAgaWYgKCFp
c1N5c3RlbUZvbnQoZmFtaWx5LnN0cmluZygpKSAmJiBhbGxvd2xpc3Quc2l6ZSgpICYmICFhbGxv
d2xpc3QuY29udGFpbnMoZmFtaWx5KSkKKyAgICBpZiAoIWlzU3lzdGVtRm9udChmYW1pbHkpICYm
IGFsbG93bGlzdC5zaXplKCkgJiYgIWFsbG93bGlzdC5jb250YWlucyhmYW1pbHkpKQogICAgICAg
ICByZXR1cm4geyBudWxscHRyIH07CiAKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UoZmFtaWx5LCAiLmFwcGxlc3lzdGVtdWlmb250c2VyaWYiKQpAQCAtMTEyMyw3ICsxMTE1
LDcgQEAgc3RhdGljIEZvbnRMb29rdXAgcGxhdGZvcm1Gb250TG9va3VwV2l0aEZhbWlseShjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHksIEZvbnRTZWwKICAgICB9CiAKICAgICBhdXRvJiBmb250RGF0
YWJhc2UgPSBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9PSBBbGxvd1VzZXJJbnN0YWxsZWRGb250
czo6WWVzID8gRm9udERhdGFiYXNlOjpzaW5nbGV0b25BbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250
cygpIDogRm9udERhdGFiYXNlOjpzaW5nbGV0b25EaXNhbGxvd2luZ1VzZXJJbnN0YWxsZWRGb250
cygpOwotICAgIGNvbnN0IGF1dG8mIGZhbWlseUZvbnRzID0gZm9udERhdGFiYXNlLmNvbGxlY3Rp
b25Gb3JGYW1pbHkoZmFtaWx5LnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBmYW1pbHlGb250
cyA9IGZvbnREYXRhYmFzZS5jb2xsZWN0aW9uRm9yRmFtaWx5KGZhbWlseSk7CiAgICAgaWYgKGZh
bWlseUZvbnRzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgQ1NTIHNwZWMgc3RhdGVzIHRo
YXQgZm9udC1mYW1pbHkgb25seSBhY2NlcHRzIGEgbmFtZSBvZiBhbiBhY3R1YWwgZm9udCBmYW1p
bHkuIEhvd2V2ZXIsIGluIFdlYktpdCwgd2UgY2xhaW0gdG8gYWxzbwogICAgICAgICAvLyBzdXBw
b3J0IHN1cHBseWluZyBhIFBvc3RTY3JpcHQgbmFtZSBpbnN0ZWFkLiBIb3dldmVyLCB0aGlzIGNy
ZWF0ZXMgcHJvYmxlbXMgd2hlbiB0aGUgb3RoZXIgcHJvcGVydGllcyAoZm9udC13ZWlnaHQsCkBA
IC0xMTcyLDcgKzExNjQsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCkKICAg
ICB9KTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5U3Bl
Y2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMgYWxs
b3dVc2VySW5zdGFsbGVkRm9udHMpCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdp
dGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUsIEFsbG93VXNlckluc3RhbGxlZEZv
bnRzIGFsbG93VXNlckluc3RhbGxlZEZvbnRzKQogewogICAgIC8vIEZJWE1FOiBTZWUgY29tbWVu
dCBpbiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjplZmZlY3RpdmVGYW1pbHlBdCgpIGluIEZvbnRE
ZXNjcmlwdGlvbkNvY29hLmNwcAogICAgIE9wdGlvbmFsPFN5c3RlbUZvbnRLaW5kPiBzeXN0ZW1E
ZXNpZ247CkBAIC0xMjAxLDcgKzExOTMsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4g
Zm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksCiAgICAg
aWYgKGZhbWlseS5zdGFydHNXaXRoKCJVSUNURm9udFRleHRTdHlsZSIpKSB7CiAgICAgICAgIGNv
bnN0IGF1dG8mIHJlcXVlc3QgPSBmb250RGVzY3JpcHRpb24uZm9udFNlbGVjdGlvblJlcXVlc3Qo
KTsKICAgICAgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgdHJhaXRzID0gKGlzRm9udFdlaWdodEJv
bGQocmVxdWVzdC53ZWlnaHQpIHx8IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkTW9ja0Jv
bGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSgpID8ga0NURm9udFRyYWl0Qm9sZCA6IDApIHwg
KGlzSXRhbGljKHJlcXVlc3Quc2xvcGUpID8ga0NURm9udFRyYWl0SXRhbGljIDogMCk7Ci0gICAg
ICAgIGF1dG8gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhU
ZXh0U3R5bGUoZmFtaWx5LnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIFJlbmRlclRo
ZW1lQ29jb2E6OnNpbmdsZXRvbigpLmNvbnRlbnRTaXplQ2F0ZWdvcnkoKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkTG9jYWxlKCkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSkpOwor
ICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoVGV4dFN0eWxlKGZhbWlseS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCBSZW5kZXJUaGVtZUNv
Y29hOjpzaW5nbGV0b24oKS5jb250ZW50U2l6ZUNhdGVnb3J5KCksIGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZExvY2FsZSgpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpKTsKICAgICAg
ICAgaWYgKHRyYWl0cykKICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERl
c2NyaXB0b3JDcmVhdGVDb3B5V2l0aFN5bWJvbGljVHJhaXRzKGRlc2NyaXB0b3IuZ2V0KCksIHRy
YWl0cywgdHJhaXRzKSk7CiAgICAgICAgIHJldHVybiBjcmVhdGVGb250Rm9ySW5zdGFsbGVkRm9u
dHMoZGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMpOwpAQCAt
MTIzNSw3ICsxMjI3LDcgQEAgc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFt
aWx5U3BlY2lhbENhc2UoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5LAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gZm9udFdpdGhGYW1pbHkoY29u
c3QgQXRvbVN0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgZmxvYXQg
c2l6ZSkKK3N0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25T
cGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMsIGZsb2F0IHNpemUpCiB7
CiAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
MTI3OCw3ICsxMjcwLDcgQEAgc3RhdGljIHZvaWQgYXV0b0FjdGl2YXRlRm9udChjb25zdCBTdHJp
bmcmIG5hbWUsIENHRmxvYXQgc2l6ZSkKIH0KICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHks
IGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRpZXMpCitzdGQ6OnVuaXF1
ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIGZh
bWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgRm9udFNl
bGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcykKIHsKICAg
ICBmbG9hdCBzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCk7CiAKQEAg
LTEyOTEsNyArMTI4Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlCiAKICAgICAgICAgLy8g
QXV0byBhY3RpdmF0ZSB0aGUgZm9udCBiZWZvcmUgbG9va2luZyBmb3IgaXQgYSBzZWNvbmQgdGlt
ZS4KICAgICAgICAgLy8gSWdub3JlIHRoZSByZXN1bHQgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBv
dXIgb3duIGFsZ29yaXRobSB0byBhY3R1YWxseSBmaW5kIHRoZSBmb250LgotICAgICAgICBhdXRv
QWN0aXZhdGVGb250KGZhbWlseS5zdHJpbmcoKSwgc2l6ZSk7CisgICAgICAgIGF1dG9BY3RpdmF0
ZUZvbnQoZmFtaWx5LCBzaXplKTsKIAogICAgICAgICBmb250ID0gZm9udFdpdGhGYW1pbHkoZmFt
aWx5LCBmb250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlQ2FwYWJpbGl0
aWVzLCBzaXplKTsKICAgICB9CkBAIC0xNDIzLDcgKzE0MTUsNyBAQCBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcgogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0ZUZvbnQpOwog
fQogCi1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5
TmFtZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFs
PiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZh
bWlseU5hbWUpCiB7CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIGhlaXRpU3RyaW5nW10gPSB7IDB4
OWVkMSwgMHg0ZjUzIH07CiAgICAgc3RhdGljIGNvbnN0IFVDaGFyIHNvbmd0aVN0cmluZ1tdID0g
eyAweDViOGIsIDB4NGY1MyB9OwpAQCAtMTQzMSwxMCArMTQyMywxMCBAQCBjb25zdCBBdG9tU3Ry
aW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3Ry
aW5nJiBmYW1pbAogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB3ZWlydWFuWWFIZWlTdHJpbmdbXSA9
IHsgMHg1ZmFlLCAweDhmNmYsIDB4OTZjNSwgMHg5ZWQxIH07CiAgICAgc3RhdGljIGNvbnN0IFVD
aGFyIHdlaXJ1YW5aaGVuZ0hlaXRpU3RyaW5nW10gPSB7IDB4NWZhZSwgMHg4ZWRmLCAweDZiNjMs
IDB4OWVkMSwgMHg5YWQ0IH07CiAKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IHNvbmd0aVNDKCJTb25ndGkgU0MiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBzb25ndGlUQygiU29uZ3RpIFRDIiwgQXRvbVN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgQXRvbVN0cmluZz4gaGVpdGlTQ1JlcGxhY2VtZW50KCJQaW5nRmFuZyBTQyIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGhlaXRpVENSZXBsYWNlbWVudCgiUGluZ0ZhbmcgVEMi
LCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBBU0NJSUxpdGVyYWwgc29uZ3RpU0MgPSAiU29uZ3RpIFNDIl9zOworICAgIHN0YXRpYyBjb25z
dGV4cHIgQVNDSUlMaXRlcmFsIHNvbmd0aVRDID0gIlNvbmd0aSBUQyJfczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEFTQ0lJTGl0ZXJhbCBoZWl0aVNDUmVwbGFjZW1lbnQgPSAiUGluZ0ZhbmcgU0Mi
X3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBBU0NJSUxpdGVyYWwgaGVpdGlUQ1JlcGxhY2VtZW50
ID0gIlBpbmdGYW5nIFRDIl9zOwogCiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7
CiAgICAgY2FzZSAyOgpAQCAtMTQ2OSw3ICsxNDYxLDcgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9u
dENhY2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFt
aWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxBdG9tKCk7CisgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBhZGRBdHRyaWJ1dGVzRm9ySW5zdGFsbGVk
Rm9udHMoQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRyaWJ1dGVzLCBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cykKQEAgLTE1NDIsNyArMTUzNCw3IEBAIFJl
ZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBmb250RGVzY3JpcHRpCiB7CiAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0
dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuICBGb3Igbm93
IHdlJ2xsIHBpY2sKICAgICAvLyB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3
aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBpZiAoYXV0byByZXN1bHQgPSBmb250Rm9y
RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgQXRvbVN0cmluZygiVGltZXMiLCBBdG9tU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgIGlmIChhdXRvIHJlc3VsdCA9IGZvbnRGb3JGYW1p
bHkoZm9udERlc2NyaXB0aW9uLCAiVGltZXMiX3MpKQogICAgICAgICByZXR1cm4gKnJlc3VsdDsK
IAogICAgIC8vIExhc3RSZXNvcnQgaXMgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5oCmluZGV4IDlhYmE4OWYyMTM3MDcyZDQzYThmODk4YWRkZDE4ZGFkNjI0OTAz
OTUuLmU4N2I5NjE3ZWRmOTAyNGI0MGQwN2M4MTE4MGZiZDAwNGNmMTNmN2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuaApAQCAtNjIsNyArNjIsNyBAQCB0eXBlZGVmIEhhc2hNYXA8Rm9udFRhZywgVmFy
aWF0aW9uRGVmYXVsdHMsIEZvdXJDaGFyYWN0ZXJUYWdIYXNoLCBGb3VyQ2hhcmFjdGVyVAogUmV0
YWluUHRyPENURm9udFJlZj4gcHJlcGFyZVBsYXRmb3JtRm9udChDVEZvbnRSZWYsIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVy
ZXMsIEZvbnRTZWxlY3Rpb25TcGVjaWZpZWRDYXBhYmlsaXRpZXMgZm9udEZhY2VDYXBhYmlsaXRp
ZXMsIGJvb2wgYXBwbHlXZWlnaHRXaWR0aFNsb3BlVmFyaWF0aW9ucyA9IHRydWUpOwogZW51bSBj
bGFzcyBTaG91bGRDb21wdXRlUGh5c2ljYWxUcmFpdHMgOiBib29sIHsgTm8sIFllcyB9OwogU3lu
dGhlc2lzUGFpciBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKENURm9udFJlZiwgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgU2hvdWxkQ29tcHV0ZVBoeXNpY2FsVHJhaXRzID0gU2hvdWxkQ29tcHV0
ZVBoeXNpY2FsVHJhaXRzOjpObywgYm9vbCBpc1BsYXRmb3JtRm9udCA9IGZhbHNlKTsKLVJldGFp
blB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udFdpdGhGYW1pbHkoY29uc3QgQXRvbVN0cmluZyYg
ZmFtaWx5LCBGb250U2VsZWN0aW9uUmVxdWVzdCwgVGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNp
emUpOworUmV0YWluUHRyPENURm9udFJlZj4gcGxhdGZvcm1Gb250V2l0aEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgRm9udFNlbGVjdGlvblJlcXVlc3QsIFRleHRSZW5kZXJpbmdNb2RlLCBm
bG9hdCBzaXplKTsKIEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzRm9yRm9u
dERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJlZik7CiB2b2lkIGFkZEF0dHJpYnV0ZXNGb3JJ
bnN0YWxsZWRGb250cyhDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dHJpYnV0ZXMsIEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKTsKIFJldGFpblB0cjxDVEZvbnRSZWY+IGNyZWF0ZUZvbnRGb3JJbnN0
YWxsZWRGb250cyhDVEZvbnREZXNjcmlwdG9yUmVmLCBDR0Zsb2F0IHNpemUsIEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZm
MDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uMmJiNzEwMTU5MGVlYjE0ZGUx
NGY5NTFjNmIzYTBhM2NhODQyYzJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5j
cHAKQEAgLTMxNiw4ICszMTYsOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZQogCiAgICAgYm9v
bCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXJlTnVs
bChpKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmb250Rm9yQ2hhcmFjdGVy
KGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBjb250
aW51ZTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUu
Y3BwCmluZGV4IGYwMjdlZWQzMTcxNDQ0YmMzNmE0MzQ0NzYzYjczZTEyZGIyYTAyNjcuLjliOTBi
MDcyMTU2NmRkNDJlOGVmZWQ0MWU3MTNkZjk0MmUxNmYyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKQEAgLTMxOSwzOSArMzE5LDM4IEBAIFJlZjxGb250PiBGb250Q2FjaGU6Omxh
c3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
CiB7CiAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gYSBmYWxsYmFjayBmb250IGhlcmUsIG90aGVy
d2lzZSB0aGUgbG9naWMgcHJldmVudGluZyBGb250Q29uZmlnCiAgICAgLy8gbWF0Y2hlcyBmb3Ig
bm9uLWZhbGxiYWNrIGZvbnRzIG1pZ2h0IHJldHVybiAwLiBTZWUgaXNGYWxsYmFja0ZvbnRBbGxv
d2VkLgotICAgIHN0YXRpYyBBdG9tU3RyaW5nIHRpbWVzU3RyKCJzZXJpZiIpOwotICAgIGlmIChS
ZWZQdHI8Rm9udD4gZm9udCA9IGZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCB0aW1lc1N0
cikpCi0gICAgICAgIHJldHVybiAqZm9udDsKKyAgICBpZiAoUmVmUHRyPEZvbnQ+IGZvbnQgPSBm
b250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgInNlcmlmIl9zKSkKKyAgICAgICAgcmV0dXJu
IGZvbnQucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIC8vIFRoaXMgY291bGQgYmUgcmVhY2hlZCBk
dWUgdG8gaW1wcm9wZXJseS1pbnN0YWxsZWQgb3IgbWlzY29uZmlndXJlZCBmb250Y29uZmlnLgog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLVZlY3RvcjxGb250U2VsZWN0
aW9uQ2FwYWJpbGl0aWVzPiBGb250Q2FjaGU6OmdldEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJ
bkZhbWlseShjb25zdCBBdG9tU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9udHMpCitWZWN0
b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5nJiwgQWxsb3dVc2VySW5zdGFsbGVkRm9u
dHMpCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGYW1pbHlOYW1l
U3RyaW5nRnJvbUZhbWlseShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpCitzdGF0aWMgU3RyaW5n
IGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0IFN0cmluZyYgZmFtaWx5KQogewog
ICAgIC8vIElmIHdlJ3JlIGNyZWF0aW5nIGEgZmFsbGJhY2sgZm9udCAoZS5nLiAiLXdlYmtpdC1t
b25vc3BhY2UiKSwgY29udmVydCB0aGUgbmFtZSBpbnRvCiAgICAgLy8gdGhlIGZhbGxiYWNrIG5h
bWUgKGxpa2UgIm1vbm9zcGFjZSIpIHRoYXQgZm9udGNvbmZpZyB1bmRlcnN0YW5kcy4KICAgICBp
ZiAoZmFtaWx5Lmxlbmd0aCgpICYmICFmYW1pbHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iKSkKLSAg
ICAgICAgcmV0dXJuIGZhbWlseS5zdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbWlseTsKIAot
ICAgIGlmIChmYW1pbHkgPT0gc3RhbmRhcmRGYW1pbHkgfHwgZmFtaWx5ID09IHNlcmlmRmFtaWx5
KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRGYW1pbHkpKSB8fCBmYW1pbHkgPT0gZmFt
aWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6
U2VyaWZGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJzZXJpZiI7Ci0gICAgaWYgKGZhbWlseSA9
PSBzYW5zU2VyaWZGYW1pbHkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTYW5zU2VyaWZGYW1pbHkp
KSkKICAgICAgICAgcmV0dXJuICJzYW5zLXNlcmlmIjsKLSAgICBpZiAoZmFtaWx5ID09IG1vbm9z
cGFjZUZhbWlseSkKKyAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpKQogICAg
ICAgICByZXR1cm4gIm1vbm9zcGFjZSI7Ci0gICAgaWYgKGZhbWlseSA9PSBjdXJzaXZlRmFtaWx5
KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oRmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWlseSkpKQogICAgICAgICByZXR1cm4g
ImN1cnNpdmUiOwotICAgIGlmIChmYW1pbHkgPT0gZmFudGFzeUZhbWlseSkKKyAgICBpZiAoZmFt
aWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5h
bWVzSW5kZXg6OkZhbnRhc3lGYW1pbHkpKSkKICAgICAgICAgcmV0dXJuICJmYW50YXN5IjsKIAog
I2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoZmFtaWx5ID09IHN5c3RlbVVpRmFtaWx5IHx8IGZh
bWlseSA9PSAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlO
YW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTeXN0
ZW1VaUZhbWlseSkpIHx8IGZhbWlseSA9PSAiLXdlYmtpdC1zeXN0ZW0tZm9udCIpCiAgICAgICAg
IHJldHVybiBkZWZhdWx0R3RrU3lzdGVtRm9udCgpOwogI2VuZGlmCiAKQEAgLTUwMCw3ICs0OTks
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb21tb25seVVzZWRHZW5lcmljRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5TmFtZVN0cmluZykKICAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFtaWx5TmFtZVN0cmluZywgImN1cnNpdmUiKTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmlu
ZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBG
b250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlxdWVfcHRyPEZvbnRQ
bGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0
IEZvbnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIEZvbnRTZWxlY3Rpb25TcGVj
aWZpZWRDYXBhYmlsaXRpZXMpCiB7CiAgICAgLy8gVGhlIENTUyBmb250IG1hdGNoaW5nIGFsZ29y
aXRobSAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mb250cy8jZm9udC1tYXRjaGluZy1hbGdv
cml0aG0pCiAgICAgLy8gc2F5cyB0aGF0IHdlIG11c3QgZmluZCBhbiBleGFjdCBtYXRjaCBmb3Ig
Zm9udCBmYW1pbHksIHNsYW50IChpdGFsaWMgb3Igb2JsaXF1ZSBjYW4gYmUgdXNlZCkKQEAgLTU5
OSw5ICs1OTgsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hl
OjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIHJldHVybiBwbGF0Zm9y
bURhdGE7CiB9CiAKLWNvbnN0IEF0b21TdHJpbmcmIEZvbnRDYWNoZTo6cGxhdGZvcm1BbHRlcm5h
dGVGYW1pbHlOYW1lKGNvbnN0IEF0b21TdHJpbmcmKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBG
b250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmKQogewot
ICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKICNp
ZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNv
cmVUZXh0Lm1tCmluZGV4IDAzMjA5Njk4OGZjZGUyMTcxNzU5MzM1MDAxMzkwZWIzZmJiOTlhNWIu
LmMzMmNlNzlhZTQ2OGQxZjNiMDM2M2YyOTE1MjEzOThkN2ZmNTZlNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJD
b3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29t
cGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTEyNSw5ICsxMjUsOSBAQCB2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIGNwLAogICAgICAgICBpc1N5c3RlbUZhbGxiYWNrID0gdHJ1ZTsKIAogICAg
ICAgICBVMTZfR0VUKGNwLCAwLCAwLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBm
b250ID0gbV9mb250LmZhbGxiYWNrUmFuZ2VzQXQoMCkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hh
cmFjdGVyKTsKKyAgICAgICAgZm9udCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKDAsIGJhc2VD
aGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWZvbnQpCi0gICAgICAgICAgICBmb250ID0gJm1fZm9u
dC5mYWxsYmFja1Jhbmdlc0F0KDApLmZvbnRGb3JGaXJzdFJhbmdlKCk7CisgICAgICAgICAgICBm
b250ID0gJm1fZm9udC5mb250Rm9yRmlyc3RSYW5nZSgpOwogICAgICAgICBzdHJpbmdBdHRyaWJ1
dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlQ29weShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwLCBmb250LT5nZXRDRlN0cmluZ0F0dHJpYnV0ZXMobV9mb250LmVuYWJsZUtlcm5p
bmcoKSwgZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSwgbV9mb250LmZvbnREZXNj
cmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpLmdldCgpKSk7CiAgICAgICAgIC8vIFdlIGRvbid0
IGtub3cgd2hpY2ggZm9udCBzaG91bGQgYmUgdXNlZCB0byByZW5kZXIgdGhpcyBncmFwaGVtZSBj
bHVzdGVyLCBzbyBlbmFibGUgQ29yZVRleHQncyBmYWxsYmFjayBtZWNoYW5pc20gYnkgdXNpbmcg
dGhlIENURm9udCB3aGljaCBkb2Vzbid0IGhhdmUgQ29yZVRleHQncyBmYWxsYmFjayBkaXNhYmxl
ZC4KICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29uc3RfY2FzdDxDRk11dGFibGVEaWN0
aW9uYXJ5UmVmPihzdHJpbmdBdHRyaWJ1dGVzLmdldCgpKSwga0NURm9udEF0dHJpYnV0ZU5hbWUs
IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CkBAIC0xODcsOCArMTg3LDggQEAgdm9pZCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJz
KGNvbnN0IFVDaGFyKiBjcCwKICAgICAgICAgICAgIFJldGFpblB0cjxDRlR5cGVSZWY+IHJ1bkZv
bnRFcXVhbGl0eU9iamVjdCA9IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hl
Y2socnVuQ1RGb250KTsKICAgICAgICAgICAgIGlmICghV1RGOjpzYWZlQ0ZFcXVhbChydW5Gb250
RXF1YWxpdHlPYmplY3QuZ2V0KCksIGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9iamVjdEZvckVxdWFs
aXR5Q2hlY2soKS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBCZWdpbiB0cnlpbmcgdG8g
c2VlIGlmIHJ1bkZvbnQgbWF0Y2hlcyBhbnkgb2YgdGhlIGZvbnRzIGluIHRoZSBmYWxsYmFjayBs
aXN0LgotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFsbGJh
Y2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bkZv
bnQgPSBtX2ZvbnQuZmFsbGJhY2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFtX2ZvbnQuZmFs
bGJhY2tSYW5nZXNBcmVOdWxsKGkpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcnVuRm9u
dCA9IG1fZm9udC5mb250Rm9yQ2hhcmFjdGVyKGksIGJhc2VDaGFyYWN0ZXIpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIXJ1bkZvbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFdURjo6c2FmZUNGRXF1YWwocnVuRm9udC0+cGxh
dGZvcm1EYXRhKCkub2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpLmdldCgpLCBydW5Gb250RXF1YWxp
dHlPYmplY3QuZ2V0KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4M2I0YjBmNGFh
NjRmOTZjOTYzODJmNjEzLi43ZjU3MjMyZTA3ZDI1MDdiNDk0ZjYxODllMWZiZDRhNmViOGQyZTg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENh
Y2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENhY2hlV2luLmNwcApAQCAtMzYyLDkgKzM2Miw5IEBAIGJvb2wgRm9udENhY2hlOjppc1N5c3Rl
bUZvbnRGb3JiaWRkZW5Gb3JFZGl0aW5nKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9n
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9O
VCYgZm9udCwgQXRvbVN0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpCitSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgTE9HRk9OVCYgZm9udCwgU3RyaW5nJiBvdXRGb250
RmFtaWx5TmFtZSkKIHsKLSAgICBBdG9tU3RyaW5nIGZhbWlseU5hbWUoZm9udC5sZkZhY2VOYW1l
LCB3Y3NubGVuKGZvbnQubGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUpKTsKKyAgICBTdHJpbmcgZmFt
aWx5TmFtZShmb250LmxmRmFjZU5hbWUsIHdjc25sZW4oZm9udC5sZkZhY2VOYW1lLCBMRl9GQUNF
U0laRSkpOwogICAgIFJlZlB0cjxGb250PiBmb250RGF0YSA9IGZvbnRGb3JGYW1pbHkoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHlOYW1lKTsKICAgICBpZiAoZm9udERhdGEpCiAgICAgICAgIG91dEZv
bnRGYW1pbHlOYW1lID0gZmFtaWx5TmFtZTsKQEAgLTM3Myw1NiArMzczLDU3IEBAIFJlZlB0cjxG
b250PiBGb250Q2FjaGU6OmZvbnRGcm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9uCiAKIFJlZjxGb250PiBGb250Q2FjaGU6Omxhc3RSZXNvcnRGYWxsYmFj
a0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7Ci0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxBdG9tU3RyaW5nPiBmYWxsYmFja0ZvbnROYW1l
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGZhbGxiYWNrRm9udE5hbWU7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9u
Y2VGbGFnLCBbJl0oKSB7CisgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0
byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLiBGb3Igbm93IHdlJ2xs
IHBpY2sKKyAgICAgICAgLy8gdGhlIGRlZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0
aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMuCisKKyAgICAgICAgLy8gU2VhcmNoIGFsbCB0eXBpY2Fs
IFdpbmRvd3MtaW5zdGFsbGVkIGZ1bGwgVW5pY29kZSBmb250cy4KKyAgICAgICAgLy8gU29ydGVk
IGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRwOi8vZW4ud2lraXBlZGlh
Lm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCisgICAgICAgIC8vIFN0YXJ0IHdpdGggVGltZXMg
TmV3IFJvbWFuIGFsc28gc2luY2UgaXQgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIHVzZXIgZG9lc24n
dCBjaGFuZ2UgcHJlZnMuCisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJp
bmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKKyAgICAgICAgICAgIFN0cmluZygiVGltZXMgTmV3IFJv
bWFuIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmco
Ik1pY3Jvc29mdCBTYW5zIFNlcmlmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisg
ICAgICAgICAgICBTdHJpbmcoIlRhaG9tYSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICAgICAgU3RyaW5nKCJMdWNpZGEgU2FucyBVbmljb2RlIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIkFyaWFsIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkKKyAgICAgICAgfTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFsbGJhY2tGb250c1tpXSkp
IHsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0ZvbnROYW1lLmdldCgpID0gZmFsbGJhY2tGb250
c1tpXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
IAotICAgIGlmICghZmFsbGJhY2tGb250TmFtZS5nZXQoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiAqZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIGZhbGxiYWNrRm9udE5hbWUpOwor
ICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERFRkFVTFRfR1VJX0ZPTlQgaWYgbm8ga25vd24g
VW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgorICAgICAgICBpZiAoSEZPTlQgZGVmYXVsdEdV
SUZvbnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9O
VCkpKSB7CisgICAgICAgICAgICBMT0dGT05UIGRlZmF1bHRHVUlMb2dGb250OworICAgICAgICAg
ICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2YoZGVmYXVsdEdVSUxvZ0ZvbnQpLCAm
ZGVmYXVsdEdVSUxvZ0ZvbnQpOworICAgICAgICAgICAgaWYgKGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgZGVmYXVsdEdVSUxvZ0ZvbnQsIGZhbGxiYWNrRm9u
dE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVs
dCBmb250IGhlcmUuICBGb3Igbm93IHdlJ2xsIHBpY2sKLSAgICAvLyB0aGUgZGVmYXVsdCB0aGF0
IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLQotICAgIC8v
IFNlYXJjaCBhbGwgdHlwaWNhbCBXaW5kb3dzLWluc3RhbGxlZCBmdWxsIFVuaWNvZGUgZm9udHMu
Ci0gICAgLy8gU29ydGVkIGJ5IG1vc3QgdG8gbGVhc3QgZ2x5cGhzIGFjY29yZGluZyB0byBodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaWNvZGVfdHlwZWZhY2VzCi0gICAgLy8gU3RhcnQg
d2l0aCBUaW1lcyBOZXcgUm9tYW4gYWxzbyBzaW5jZSBpdCBpcyB0aGUgZGVmYXVsdCBpZiB0aGUg
dXNlciBkb2Vzbid0IGNoYW5nZSBwcmVmcy4KLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVz
dHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IGZhbGxiYWNrRm9udHNbXSA9IHsKLSAgICAgICAgQXRv
bVN0cmluZygiVGltZXMgTmV3IFJvbWFuIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIEF0b21TdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKLSAgICAgICAgQXRvbVN0cmluZygiVGFob21hIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAotICAgICAgICBBdG9tU3RyaW5nKCJM
dWNpZGEgU2FucyBVbmljb2RlIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAot
ICAgICAgICBBdG9tU3RyaW5nKCJBcmlhbCIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKQotICAgIH07Ci0gICAgUmVmUHRyPEZvbnQ+IHNpbXBsZUZvbnQ7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGZhbGxiYWNrRm9udHMpOyArK2kpIHsKLSAg
ICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250Rm9yRmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgZmFs
bGJhY2tGb250c1tpXSkpIHsKLSAgICAgICAgICAgIGZhbGxiYWNrRm9udE5hbWUuZ2V0KCkgPSBm
YWxsYmFja0ZvbnRzW2ldOwotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250OworICAgICAg
ICAvLyBGYWxsIGJhY2sgdG8gTm9uLWNsaWVudCBtZXRyaWNzIGZvbnRzLgorICAgICAgICBOT05D
TElFTlRNRVRSSUNTIG5vbkNsaWVudE1ldHJpY3MgeyB9OworICAgICAgICBub25DbGllbnRNZXRy
aWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKKyAgICAgICAgaWYgKFN5c3Rl
bVBhcmFtZXRlcnNJbmZvKFNQSV9HRVROT05DTElFTlRNRVRSSUNTLCBzaXplb2Yobm9uQ2xpZW50
TWV0cmljcyksICZub25DbGllbnRNZXRyaWNzLCAwKSkgeworICAgICAgICAgICAgaWYgKGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmlj
cy5sZk1lc3NhZ2VGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERl
c2NyaXB0aW9uLCBub25DbGllbnRNZXRyaWNzLmxmTWVudUZvbnQsIGZhbGxiYWNrRm9udE5hbWUp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTdGF0
dXNGb250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBpZiAoZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9u
LCBub25DbGllbnRNZXRyaWNzLmxmQ2FwdGlvbkZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmb250RnJvbURlc2NyaXB0aW9u
QW5kTG9nRm9udChmb250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTbUNhcHRpb25G
b250LCBmYWxsYmFja0ZvbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICB9CisgICAgfSk7CiAKLSAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIERFRkFVTFRfR1VJ
X0ZPTlQgaWYgbm8ga25vd24gVW5pY29kZSBmb250cyBhcmUgYXZhaWxhYmxlLgotICAgIGlmIChI
Rk9OVCBkZWZhdWx0R1VJRm9udCA9IHN0YXRpY19jYXN0PEhGT05UPihHZXRTdG9ja09iamVjdChE
RUZBVUxUX0dVSV9GT05UKSkpIHsKLSAgICAgICAgTE9HRk9OVCBkZWZhdWx0R1VJTG9nRm9udDsK
LSAgICAgICAgR2V0T2JqZWN0KGRlZmF1bHRHVUlGb250LCBzaXplb2YoZGVmYXVsdEdVSUxvZ0Zv
bnQpLCAmZGVmYXVsdEdVSUxvZ0ZvbnQpOwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRG
cm9tRGVzY3JpcHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgZGVmYXVsdEdVSUxvZ0Zv
bnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0dXJuICpzaW1wbGVGb250Owot
ICAgIH0KKyAgICBpZiAoIWZhbGxiYWNrRm9udE5hbWUuZ2V0KCkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gKmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBmYWxsYmFja0ZvbnROYW1l
KTsKIAotICAgIC8vIEZhbGwgYmFjayB0byBOb24tY2xpZW50IG1ldHJpY3MgZm9udHMuCi0gICAg
Tk9OQ0xJRU5UTUVUUklDUyBub25DbGllbnRNZXRyaWNzIHsgfTsKLSAgICBub25DbGllbnRNZXRy
aWNzLmNiU2l6ZSA9IHNpemVvZihub25DbGllbnRNZXRyaWNzKTsKLSAgICBpZiAoU3lzdGVtUGFy
YW1ldGVyc0luZm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIHNpemVvZihub25DbGllbnRNZXRy
aWNzKSwgJm5vbkNsaWVudE1ldHJpY3MsIDApKSB7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0g
Zm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRN
ZXRyaWNzLmxmTWVzc2FnZUZvbnQsIGZhbGxiYWNrRm9udE5hbWUpKQotICAgICAgICAgICAgcmV0
dXJuICpzaW1wbGVGb250OwotICAgICAgICBpZiAoc2ltcGxlRm9udCA9IGZvbnRGcm9tRGVzY3Jp
cHRpb25BbmRMb2dGb250KGZvbnREZXNjcmlwdGlvbiwgbm9uQ2xpZW50TWV0cmljcy5sZk1lbnVG
b250LCBmYWxsYmFja0ZvbnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsK
LSAgICAgICAgaWYgKHNpbXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChm
b250RGVzY3JpcHRpb24sIG5vbkNsaWVudE1ldHJpY3MubGZTdGF0dXNGb250LCBmYWxsYmFja0Zv
bnROYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAqc2ltcGxlRm9udDsKLSAgICAgICAgaWYgKHNp
bXBsZUZvbnQgPSBmb250RnJvbURlc2NyaXB0aW9uQW5kTG9nRm9udChmb250RGVzY3JpcHRpb24s
IG5vbkNsaWVudE1ldHJpY3MubGZDYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAg
ICAgICAgICByZXR1cm4gKnNpbXBsZUZvbnQ7Ci0gICAgICAgIGlmIChzaW1wbGVGb250ID0gZm9u
dEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoZm9udERlc2NyaXB0aW9uLCBub25DbGllbnRNZXRy
aWNzLmxmU21DYXB0aW9uRm9udCwgZmFsbGJhY2tGb250TmFtZSkpCi0gICAgICAgICAgICByZXR1
cm4gKnNpbXBsZUZvbnQ7Ci0gICAgfQotICAgIAogICAgIGF1dG8gaEZvbnQgPSBhZG9wdEdESU9i
amVjdChzdGF0aWNfY2FzdDxIRk9OVD4oR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkp
KTsKICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShXVEZNb3ZlKGhGb250KSwgZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwog
ICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSk7CkBAIC01MTIsNyAr
NTEzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyBtYXRjaEltcHJvdmluZ0VudW1Qcm9jKENPTlNU
IExPR0ZPTlQqIGNhbmRpZGF0ZSwgQ09OU1QgVEVYVE0KICAgICByZXR1cm4gMTsKIH0KIAotc3Rh
dGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1p
bHksIExPTkcgZGVzaXJlZFdlaWdodCwgYm9vbCBkZXNpcmVkSXRhbGljLCBpbnQgc2l6ZSwgYm9v
bCBzeW50aGVzaXplSXRhbGljKQorc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3JlYXRlR0RJRm9u
dChjb25zdCBTdHJpbmcmIGZhbWlseSwgTE9ORyBkZXNpcmVkV2VpZ2h0LCBib29sIGRlc2lyZWRJ
dGFsaWMsIGludCBzaXplLCBib29sIHN5bnRoZXNpemVJdGFsaWMpCiB7CiAgICAgSFduZERDIGhk
YygwKTsKIApAQCAtNTcwLDEyICs1NzEsMTIgQEAgc3RhdGljIEdESU9iamVjdDxIRk9OVD4gY3Jl
YXRlR0RJRm9udChjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIExPTkcgZGVzaXJlZFdlaWcKIH0K
IAogc3RydWN0IFRyYWl0c0luRmFtaWx5UHJvY0RhdGEgewotICAgIFRyYWl0c0luRmFtaWx5UHJv
Y0RhdGEoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKKyAgICBUcmFpdHNJbkZhbWlseVBy
b2NEYXRhKGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSkKICAgICAgICAgOiBtX2ZhbWlseU5hbWUo
ZmFtaWx5TmFtZSkKICAgICB7CiAgICAgfQogCi0gICAgY29uc3QgQXRvbVN0cmluZyYgbV9mYW1p
bHlOYW1lOworICAgIGNvbnN0IFN0cmluZyYgbV9mYW1pbHlOYW1lOwogICAgIFZlY3RvcjxGb250
U2VsZWN0aW9uQ2FwYWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKIH07CiAKQEAgLTYyNiw3ICs2
MjcsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByb2MoQ09OU1Qg
TE9HRk9OVCogbG9nRm9udCwgQ09OU1QgVEVYVE1FVAogICAgIHJldHVybiAxOwogfQogCi1WZWN0
b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9udENhY2hlOjpnZXRGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSwgQWxsb3dV
c2VySW5zdGFsbGVkRm9udHMpCitWZWN0b3I8Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcz4gRm9u
dENhY2hlOjpnZXRGb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzSW5GYW1pbHkoY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lLCBBbGxvd1VzZXJJbnN0YWxsZWRGb250cykKIHsKICAgICBIV25kREMgaGRj
KDApOwogCkBAIC02NDYsNyArNjQ3LDcgQEAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXM+IEZvbnRDYWNoZTo6Z2V0Rm9udFNlbGVjdGlvbkNhcGFiaWxpdGllc0luRmFtaWwKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRGZWF0dXJl
U2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVkQ2FwYWJpbGl0aWVzKQorc3RkOjp1bmlx
dWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiBm
YW1pbHksIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MqLCBGb250U2VsZWN0aW9uU3BlY2lmaWVk
Q2FwYWJpbGl0aWVzKQogewogICAgIGJvb2wgaXNMdWNpZGFHcmFuZGUgPSBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShmYW1pbHksICJsdWNpZGEgZ3JhbmRlIik7CiAKQEAgLTY5MiwxMSAr
NjkzLDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGUKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1jb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFt
ZShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQorT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBG
b250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBTdHJpbmcmIGZhbWls
eU5hbWUpCiB7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
U3RyaW5nPiB0aW1lc05ld1JvbWFuKCJUaW1lcyBOZXcgUm9tYW4iLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBtaWNyb3NvZnRTYW5zU2VyaWYoIk1pY3Jvc29mdCBTYW5zIFNlcmlm
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCiAgICAgc3dpdGNoIChmYW1p
bHlOYW1lLmxlbmd0aCgpKSB7CiAgICAgLy8gT24gV2luZG93cywgd2UgZG9uJ3Qgc3VwcG9ydCBi
aXRtYXAgZm9udHMsIGJ1dCBsZWdhY3kgY29udGVudCBleHBlY3RzIHN1cHBvcnQuCiAgICAgLy8g
VGh1cyB3ZSBhbGxvdyBUaW1lcyBOZXcgUm9tYW4gYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBi
aXRtYXAgZm9udCBNUyBTZXJpZiwKQEAgLTcwNSw3ICs3MDMsNyBAQCBjb25zdCBBdG9tU3RyaW5n
JiBGb250Q2FjaGU6OnBsYXRmb3JtQWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9tU3RyaW5n
JiBmYW1pbAogICAgIC8vIHdvdWxkIG5lZWQgaXQgb24gb3RoZXIgcGxhdGZvcm1zIHRvby4KICAg
ICBjYXNlIDg6CiAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYW1p
bHlOYW1lLCAibXMgc2VyaWYiKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lc05ld1JvbWFuOwor
ICAgICAgICAgICAgcmV0dXJuICJUaW1lcyBOZXcgUm9tYW4iX3M7CiAgICAgICAgIGJyZWFrOwog
ICAgIC8vIE9uIFdpbmRvd3MsIHdlIGRvbid0IHN1cHBvcnQgYml0bWFwIGZvbnRzLCBidXQgbGVn
YWN5IGNvbnRlbnQgZXhwZWN0cyBzdXBwb3J0LgogICAgIC8vIFRodXMgd2UgYWxsb3cgTWljcm9z
b2Z0IFNhbnMgU2VyaWYgYXMgYW4gYWx0ZXJuYXRpdmUgZm9yIHRoZSBiaXRtYXAgZm9udCBNUyBT
YW5zIFNlcmlmLApAQCAtNzE0LDEwICs3MTIsMTAgQEAgY29uc3QgQXRvbVN0cmluZyYgRm9udENh
Y2hlOjpwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWwK
ICAgICAvLyB3b3VsZCBuZWVkIGl0IG9uIG90aGVyIHBsYXRmb3JtcyB0b28uCiAgICAgY2FzZSAx
MzoKICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhbWlseU5hbWUs
ICJtcyBzYW5zIHNlcmlmIikpCi0gICAgICAgICAgICByZXR1cm4gbWljcm9zb2Z0U2Fuc1Nlcmlm
OworICAgICAgICAgICAgcmV0dXJuICJNaWNyb3NvZnQgU2FucyBTZXJpZiJfczsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIHJldHVybiBudWxsQXRvbSgpOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4
dC5jcHAKaW5kZXggYzlmMGY4MTNiY2I2MzY2MTU0YmMwNGJlYTUwM2M2MjRmYWVhMDFiNS4uNTVm
MWIxYWY3ZmExZDljOTI2YTAxNzYwOTI1NDFiZmJhMDc2YmQ3NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0JpZGlDb250ZXh0IDogcHVibGlj
IFJlZkNvdW50ZWQ8U2FtZVNpemVBc0JpZGlDb250ZXh0PiB7CitzdHJ1Y3QgU2FtZVNpemVBc0Jp
ZGlDb250ZXh0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNhbWVTaXplQXNCaWRpQ29u
dGV4dD4gewogICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDE2OwogICAgIHZvaWQqIHBhcmVudDsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgKaW5kZXggZDRj
NGU1NzA4YTBkNDJjYjljYjQ3MWEyYzA2OTY3MGQzOWJkMzRkMS4uNWE4ZDkwOWVlYTkxYjYxOWU1
Mzk0NjlmZGFjZmM0ZjNhMjYwM2Q3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuaApAQCAtMjIsMTUgKzIyLDE1IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIEJpZGlFbWJlZGRpbmdTb3VyY2UgeyBGcm9t
U3R5bGVPckRPTSwgRnJvbVVuaWNvZGUgfTsKIAogLy8gVXNlZCB0byBrZWVwIHRyYWNrIG9mIGV4
cGxpY2l0IGVtYmVkZGluZ3MuCi1jbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVk
PEJpZGlDb250ZXh0PiB7CitjbGFzcyBCaWRpQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxCaWRpQ29udGV4dD4gewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8QmlkaUNvbnRleHQ+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVj
dGlvbiwgYm9vbCBvdmVycmlkZSA9IGZhbHNlLCBCaWRpRW1iZWRkaW5nU291cmNlID0gRnJvbVN0
eWxlT3JET00sIEJpZGlDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>