<?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>202793</bug_id>
          
          <creation_ts>2019-10-10 06:10:11 -0700</creation_ts>
          <short_desc>Implement text rendering on OffscreenCanvas in a Worker</short_desc>
          <delta_ts>2021-04-02 12:50:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186759</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>202626</dependson>
    
    <dependson>202794</dependson>
    
    <dependson>202797</dependson>
    
    <dependson>220801</dependson>
    
    <dependson>220854</dependson>
    
    <dependson>220858</dependson>
    
    <dependson>222550</dependson>
    
    <dependson>222665</dependson>
    
    <dependson>222735</dependson>
    
    <dependson>223630</dependson>
    
    <dependson>223995</dependson>
    
    <dependson>223997</dependson>
          <blocked>183720</blocked>
    
    <blocked>186759</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hotaru</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>wilander</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1578612</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 06:10:11 -0700</bug_when>
    <thetext>Bug 186759 tracks making font functions available on OffscreenCanvas, this bug tracks making them complete and fully available to use within workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578613</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 06:14:11 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #0)
&gt; Bug 186759 tracks making font functions available on OffscreenCanvas, this
&gt; bug tracks making them complete and fully available to use within workers.

Change of heart - Bug 186759 is the meta bug, this tracks implementing font functions on OffscreenCanvas in workers, a later bug will cover making fonts stylable within workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578648</commentid>
    <comment_count>2</comment_count>
      <attachid>380641</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 08:13:21 -0700</bug_when>
    <thetext>Created attachment 380641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578746</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-10-10 11:23:04 -0700</bug_when>
    <thetext>What&apos;s the difference between this bug and https://bugs.webkit.org/show_bug.cgi?id=186759 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578802</commentid>
    <comment_count>4</comment_count>
      <attachid>380641</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-10 12:56:49 -0700</bug_when>
    <thetext>Comment on attachment 380641
Patch

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

&gt; Source/WebCore/css/CSSFontFace.cpp:107
&gt; +            const Settings* settings = globalScope ? &amp;globalScope-&gt;settings() : nullptr;

Settings object isn&apos;t thread safe. r- because of this.

&gt; Source/WebCore/css/CSSFontFace.cpp:623
&gt; +    if (m_fontSelector &amp;&amp; !m_fontSelector-&gt;destroyed())

WebKit&apos;s term of art is stopped(), not destroyed() because that would imply UAF.

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:253
&gt; +    if (isMainThread() || fontCascadeCache().contains(hash)) {

It&apos;s not safe to ever access fontCascadeCache(), which is HashMap from a different thread as it can result in UAF.
r- because of this.

&gt; Source/WebCore/workers/WorkerGlobalScope.h:226
&gt; +    const Ref&lt;Settings&gt; m_settings;

Settings object isn&apos;t ThreadSafeRefCounted.
r- because of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578834</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-10-10 13:58:21 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #3)
&gt; What&apos;s the difference between this bug and
&gt; https://bugs.webkit.org/show_bug.cgi?id=186759 ?

Oh, whoops, you answered this directly above. Sorry for not reading. Please disregard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579034</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-11 01:57:48 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #4)
&gt; Comment on attachment 380641 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=380641&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSFontFace.cpp:107
&gt; &gt; +            const Settings* settings = globalScope ? &amp;globalScope-&gt;settings() : nullptr;
&gt; 
&gt; Settings object isn&apos;t thread safe. r- because of this.

This Settings object is only used within the thread it was created on.

&gt; &gt; Source/WebCore/css/CSSFontFace.cpp:623
&gt; &gt; +    if (m_fontSelector &amp;&amp; !m_fontSelector-&gt;destroyed())
&gt; 
&gt; WebKit&apos;s term of art is stopped(), not destroyed() because that would imply
&gt; UAF.

Thanks, I&apos;ll make this change.

&gt; &gt; Source/WebCore/platform/graphics/FontCascade.cpp:253
&gt; &gt; +    if (isMainThread() || fontCascadeCache().contains(hash)) {
&gt; 
&gt; It&apos;s not safe to ever access fontCascadeCache(), which is HashMap from a
&gt; different thread as it can result in UAF.
&gt; r- because of this.

Thanks, good catch.

&gt; &gt; Source/WebCore/workers/WorkerGlobalScope.h:226
&gt; &gt; +    const Ref&lt;Settings&gt; m_settings;
&gt; 
&gt; Settings object isn&apos;t ThreadSafeRefCounted.
&gt; r- because of this.

Does it need to be ThreadSafeRefCounted if it&apos;s created and used only within this thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579045</commentid>
    <comment_count>7</comment_count>
      <attachid>380641</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-11 02:47:39 -0700</bug_when>
    <thetext>Comment on attachment 380641
Patch

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

&gt; Source/WebCore/workers/WorkerGlobalScope.cpp:84
&gt; +    , m_settings(Settings::create(nullptr))

Oops, sorry, I somehow didn&apos;t see this critical piece of code.
How are values of this m_settings updated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579046</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-11 02:49:19 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #6)
&gt;
&gt; &gt; &gt; Source/WebCore/workers/WorkerGlobalScope.h:226
&gt; &gt; &gt; +    const Ref&lt;Settings&gt; m_settings;
&gt; &gt; 
&gt; &gt; Settings object isn&apos;t ThreadSafeRefCounted.
&gt; &gt; r- because of this.
&gt; 
&gt; Does it need to be ThreadSafeRefCounted if it&apos;s created and used only within
&gt; this thread?

It needs to be if you&apos;re creating it in the main thread and passing it to the worker thread. How else are we going to initialize it with the right values? Note that settings values aren&apos;t always initialized to the &quot;right&quot; values when it&apos;s created. Many settings&apos; values are set forth by WebKit&apos;s WebPreferences&apos; values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579049</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-11 02:51:30 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #8)
&gt; (In reply to Chris Lord from comment #6)
&gt; &gt;
&gt; &gt; &gt; &gt; Source/WebCore/workers/WorkerGlobalScope.h:226
&gt; &gt; &gt; &gt; +    const Ref&lt;Settings&gt; m_settings;
&gt; &gt; &gt; 
&gt; &gt; &gt; Settings object isn&apos;t ThreadSafeRefCounted.
&gt; &gt; &gt; r- because of this.
&gt; &gt; 
&gt; &gt; Does it need to be ThreadSafeRefCounted if it&apos;s created and used only within
&gt; &gt; this thread?
&gt; 
&gt; It needs to be if you&apos;re creating it in the main thread and passing it to
&gt; the worker thread. How else are we going to initialize it with the right
&gt; values? Note that settings values aren&apos;t always initialized to the &quot;right&quot;
&gt; values when it&apos;s created. Many settings&apos; values are set forth by WebKit&apos;s
&gt; WebPreferences&apos; values.

Thanks, knowing this I need to re-think how this is going to work (suggestions welcome).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1579052</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-11 03:17:19 -0700</bug_when>
    <thetext>I think you want to follow how online / offline / geolocation states are passed to the worker. While settings can be updated dynamically overtime, it&apos;s probably not the end of the world if we didn&apos;t update it once the worker had started. So you can probably just create Settings object in the main thread and hand it off to the worker thread when it&apos;s created.

Alternatively, you can create an object which contains a smaller set of settings that are used by OffscreenCanvas / worker. See CSSParserContext for an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583314</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-24 05:02:15 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #10)
&gt; I think you want to follow how online / offline / geolocation states are
&gt; passed to the worker. While settings can be updated dynamically overtime,
&gt; it&apos;s probably not the end of the world if we didn&apos;t update it once the
&gt; worker had started. So you can probably just create Settings object in the
&gt; main thread and hand it off to the worker thread when it&apos;s created.
&gt; 
&gt; Alternatively, you can create an object which contains a smaller set of
&gt; settings that are used by OffscreenCanvas / worker. See CSSParserContext for
&gt; an example.

So I&apos;ve just been looking at this - I guess the options here are:

- Make Settings ThreadSafeRefCounted, add main-thread asserts to all setter functions and share the object when creating a worker.
- Create a new Settings object and pass all relevant settings on creation (I guess we&apos;d want a structure and helper functions to retrieve, store and set all relevant settings).
- Create a new type of Settings class that only holds the relevant settings for using with FontSelector (and which can be augmented with other settings workers may use in the future). This still involves retrieving all relevant settings from the Document&apos;s Settings object and passing them along when creating the worker. I guess this makes sense as an interface that both Settings and this new object can implement.

I&apos;m leaning towards this third option, it feels like the cleanest and probably involves the fewest changes to existing files. Not sure what to call the interface though... WindowOrWorkerGlobalScopeSettings would fit in with current naming, with a new WorkerGlobalScopeSettings class. Seems a little wordy, but does what it says on the tin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583337</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-24 07:17:02 -0700</bug_when>
    <thetext>And after looking at implementing this, I realise how much more work needs to be done on the font support... I may refactor so that this settings change happens in bug 202525 instead and misses out the font settings for now, as this part is considerably harder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720873</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-01-20 07:02:25 -0800</bug_when>
    <thetext>I have a patch queue that I think is a viable route for getting this landed now, I&apos;ll be opening bugs for the smaller and least controversial parts to lay the foundations.

Work can be seen in this branch: https://github.com/Cwiiis/webkit/commits/offscreen-canvas-text-worker-2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746065</commentid>
    <comment_count>14</comment_count>
      <attachid>424904</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-01 09:31:42 -0700</bug_when>
    <thetext>Created attachment 424904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746067</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-01 09:37:01 -0700</bug_when>
    <thetext>The dependent patches have done most of the work for this - this last patch adds a CSSFontSelector and FontCache to WorkerGlobalScope and just uses them as appropriate via the ScriptExecutionContext and FontSelector interfaces.

After this patch, text functions now work on OffscreenCanvas in a Worker, but FontFace in Workers is still unimplemented - I&apos;ll open a separate bug for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746069</commentid>
    <comment_count>16</comment_count>
      <attachid>424906</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-01 09:41:51 -0700</bug_when>
    <thetext>Created attachment 424906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746083</commentid>
    <comment_count>17</comment_count>
      <attachid>424906</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-01 10:05:28 -0700</bug_when>
    <thetext>Comment on attachment 424906
Patch

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

I think this patch will be much smaller if we don’t change Document::fontSelector to return a pointer (see comments below).

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.h:177
&gt;  const AtomString&amp; genericFontFamilyFromValueID(CSSValueID);
&gt; +WebKitFontFamilyNames::FamilyNamesIndex genericFontFamilyIndexFromValueID(CSSValueID);

Not thrilled with these &quot;FromValueID&quot; names. C++ overloading means we don’t need to include the types of parameters in function names unless they are needed for clarity and CSSValueID is a real enumeration type, not just a typedef for something like int. Maybe leave it off from the new function name. Maybe even remove it from the old?

&gt; Source/WebCore/dom/Document.cpp:2065
&gt; +        fontSelector()-&gt;loadPendingFonts();

This isn’t great. If we have a function that returns a pointer, normally that’s because it can be null. And if it can be null, normally we’d want to have a null check.

&gt; Source/WebCore/dom/Document.h:545
&gt; -    CSSFontSelector&amp; fontSelector() { return m_fontSelector; }
&gt; -    const CSSFontSelector&amp; fontSelector() const { return m_fontSelector; }
&gt; +    CSSFontSelector* fontSelector() final { return m_fontSelector.ptr(); }
&gt; +    const CSSFontSelector* fontSelector() const { return m_fontSelector.ptr(); }

Are we changing this to a pointer because this can be null? If so, then under what conditions? If not, then why are we making this a pointer?

Lets find a way to still have a reference-returning function in Document even if we also need a virtual pointer-returning function in ScriptExecutionContext. It’s much harder to confidently program with functions that return pointers that just happen to have a &quot;never returns null&quot; guarantee. Returning a reference is a much clearer way to express that.

&gt; Source/WebCore/dom/ScriptExecutionContext.h:167
&gt; +    virtual CSSFontSelector* fontSelector() { return nullptr; }

As I suggested above, I think we should consider giving this a different name. Maybe even one to emphasize it can be null or one that hints at what it means if it’s null. Sadly, the WebKit standard for such names is fontSelectorIfExists, which I find a clunky naming scheme.

If we do give it a different name, we should be sure to make the Document override of this function private, so that clients who have a Document remember to call the one that returns a reference instead.

&gt; Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp:93
&gt; +        modifiableState().font.initialize(*context.fontSelector(), *fontCascade);

What guarantees the fontSelector won’t be null here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746090</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-01 10:17:56 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #17)
&gt; Comment on attachment 424906 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424906&amp;action=review
&gt; 
&gt; I think this patch will be much smaller if we don’t change
&gt; Document::fontSelector to return a pointer (see comments below).

You&apos;re right, and I&apos;m actually not certain why I made this change now... At least, I don&apos;t think there&apos;s a good reason for it, I don&apos;t think it can be null. I&apos;ll change this.

Looks like the build error is something to do with incomplete types with the UniqueRefs added in bug 223997, so perhaps this is a good time to group those into a structure that&apos;s private to FontCache entirely and remove them from the header.

Will fix/revise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746196</commentid>
    <comment_count>19</comment_count>
      <attachid>424942</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-01 12:49:48 -0700</bug_when>
    <thetext>Created attachment 424942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746289</commentid>
    <comment_count>20</comment_count>
      <attachid>424942</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-01 15:19:17 -0700</bug_when>
    <thetext>Comment on attachment 424942
Patch

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

&gt; Source/WebCore/css/CSSFontSelector.h:127
&gt; +    RefPtr&lt;FontCache&gt; m_fontCache;

Can this be a Ref instead of a RefPtr? Does it ever have to be null?

&gt; Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp:92
&gt; +    auto fontCascade = Style::resolveForFontRaw(*fontRaw, WTFMove(fontDescription), context);
&gt; +    if (fontCascade) {

Slightly better style to define inside the if:

    if (auto fontCascade = ...

&gt; Source/WebCore/platform/graphics/FontCache.cpp:121
&gt; +struct FontDataCacheKeyHash {

So frustrating! Another patch I need to merge with (since I am redoing some of this hashing code a bit).

Anyway, I can handle it.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:132
&gt; +    static const bool safeToCompareToEmptyOrDeleted = true;

When touching code like this we can switch from const to constexpr.

&gt; Source/WebCore/platform/graphics/FontCache.cpp:160
&gt; +    WTF_MAKE_FAST_ALLOCATED;
&gt; +public:

Should be WTF_MAKE_STRUCT_FAST_ALLOCATED and then no need for public: here.

&gt; Source/WebCore/platform/graphics/FontCache.h:71
&gt; +struct FontDataCaches;

Could consider making this struct be a member of FontCache instead of at the file level. Would have little effect, but I think be a bit clearer.

&gt; Source/WebCore/platform/graphics/FontCache.h:222
&gt; +    static Ref&lt;FontCache&gt; create();

Should have commented when we added reference counting. I don’t fully understand why we need multiple owners for a single FontCache, or ref/deref to help keep the cache alive during the destruction process. If neither is required, then this class could just be a normal one that we create and destroy at will, and store in a UniqueRef or unique_ptr if we want it on the heap. Don’t need reference counting just to have multiple instances of a class!

&gt; Source/WebCore/platform/graphics/FontCache.h:225
&gt; +    FontCache();

This constructor should probably be private if possible. If it’s reference counted then we don’t want someone accidentally creating one not on the heap outside the create function.

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:171
&gt; +    auto&amp; fontCache = fontSelector ? fontSelector-&gt;fontCache() : FontCache::singleton();

Seems like we might want a helper function that does this operation. It’s a repeated idiom. Just something that takes a possibly-null FontSelector* and returns the FontCache&amp;. Inline if necessary.

Having the helper function could help rid us of the urge to put it in a local variable, too.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:105
&gt; +    , m_generation(m_fontSelector ? m_fontSelector-&gt;fontCache().generation() : FontCache::singleton().generation())

Here.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:147
&gt; +    auto&amp; fontCache = fontSelector ? fontSelector-&gt;fontCache() : FontCache::singleton();

Here.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:185
&gt; +    auto&amp; fontCache = m_fontSelector ? m_fontSelector-&gt;fontCache() : FontCache::singleton();

Here.

&gt; Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:141
&gt; +    auto&amp; fontCache = fontSelector() ? fontSelector()-&gt;fontCache() : FontCache::singleton();

Here.

&gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:55
&gt; +    return fontDescription.familyCount() == 1 &amp;&amp; fontDescription.firstFamily() == familyNamesData-&gt;at(static_cast&lt;unsigned&gt;(FamilyNamesIndex::MonospaceFamily));

We typically compare family names with a special equality operator, not by actually doing == on two strings. (In my patch I was toying with the idea of a class, FontFamilyName, instead of special == and hash functions.)

&gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:78
&gt; +                family = familyNamesData-&gt;at(static_cast&lt;unsigned&gt;(CSSPropertyParserHelpers::genericFontFamilyIndex(ident)));

This index type thing is not great. Is there some way we can change familyNamesData so it’s easier to use the enum values with it without a static_cast at the call site each time? Maybe just add an overload for at?

&gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:205
&gt; +            return static_cast&lt;float&gt;(CSSPrimitiveValue::computeUnzoomedNonCalcLengthDouble(length.type, length.value, CSSPropertyFontSize, &amp;fontCascade.fontMetrics(), &amp;fontCascade.fontDescription(), &amp;fontCascade.fontDescription(), is&lt;Document&gt;(context) ? downcast&lt;Document&gt;(context).renderView() : nullptr));

Is the nullptr behavior OK for offscreen canvas here? I’d like to understand more why this is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746446</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-02 03:29:42 -0700</bug_when>
    <thetext>Addressed everything, except:

(In reply to Darin Adler from comment #20)
&gt; Comment on attachment 424942 [details]
&gt; &gt; Source/WebCore/platform/graphics/FontCache.h:222
&gt; &gt; +    static Ref&lt;FontCache&gt; create();
&gt; 
&gt; Should have commented when we added reference counting. I don’t fully
&gt; understand why we need multiple owners for a single FontCache, or ref/deref
&gt; to help keep the cache alive during the destruction process. If neither is
&gt; required, then this class could just be a normal one that we create and
&gt; destroy at will, and store in a UniqueRef or unique_ptr if we want it on the
&gt; heap. Don’t need reference counting just to have multiple instances of a
&gt; class!

This is because the FontCache is created by the ScriptExecutionContext, which can disappear before the CSSFontSelector, as fonts retain a reference to CSSFontSelector and require the FontCache to stay alive during that time. An alternative is for CSSFontSelector to own a FontCache but only for Workers, though I think I prefer it this way. I don&apos;t mind changing this though.

&gt; &gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:55
&gt; &gt; +    return fontDescription.familyCount() == 1 &amp;&amp; fontDescription.firstFamily() == familyNamesData-&gt;at(static_cast&lt;unsigned&gt;(FamilyNamesIndex::MonospaceFamily));
&gt; 
&gt; We typically compare family names with a special equality operator, not by
&gt; actually doing == on two strings. (In my patch I was toying with the idea of
&gt; a class, FontFamilyName, instead of special == and hash functions.)

I&apos;ve left this as is as it&apos;s copied from the same function on FontDescription.

&gt; &gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:78
&gt; &gt; +                family = familyNamesData-&gt;at(static_cast&lt;unsigned&gt;(CSSPropertyParserHelpers::genericFontFamilyIndex(ident)));
&gt; 
&gt; This index type thing is not great. Is there some way we can change
&gt; familyNamesData so it’s easier to use the enum values with it without a
&gt; static_cast at the call site each time? Maybe just add an overload for at?

Actually, I&apos;ve not dealt with this yet, but I will, or at least I&apos;ll try - I like the idea of overriding at(), though this will involve editing the generator again to do it nicely...

&gt; &gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:205
&gt; &gt; +            return static_cast&lt;float&gt;(CSSPrimitiveValue::computeUnzoomedNonCalcLengthDouble(length.type, length.value, CSSPropertyFontSize, &amp;fontCascade.fontMetrics(), &amp;fontCascade.fontDescription(), &amp;fontCascade.fontDescription(), is&lt;Document&gt;(context) ? downcast&lt;Document&gt;(context).renderView() : nullptr));
&gt; 
&gt; Is the nullptr behavior OK for offscreen canvas here? I’d like to understand
&gt; more why this is OK.

The RenderView is only required for viewport units - while this isn&apos;t specifically mentioned in the specs, this seems iffy to me - OffscreenCanvas isn&apos;t really on a viewport... I think ideally this would work (I need to check Chrome&apos;s behaviour), but I&apos;d like to deal with this separately if needed. I&apos;ll leave a comment about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746453</commentid>
    <comment_count>22</comment_count>
      <attachid>425005</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-02 04:34:52 -0700</bug_when>
    <thetext>Created attachment 425005
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746463</commentid>
    <comment_count>23</comment_count>
      <attachid>425011</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-02 05:37:56 -0700</bug_when>
    <thetext>Created attachment 425011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746465</commentid>
    <comment_count>24</comment_count>
      <attachid>425011</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-04-02 05:38:39 -0700</bug_when>
    <thetext>Comment on attachment 425011
Patch

Added the comment I mentioned that I&apos;d forgotten in the last patch - no code changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746481</commentid>
    <comment_count>25</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-02 07:06:21 -0700</bug_when>
    <thetext>Committed r275420: &lt;https://commits.webkit.org/r275420&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 425011.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746482</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-02 07:07:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/76147794&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1746619</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-04-02 12:50:43 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #21)
&gt; The RenderView is only required for viewport units - while this isn&apos;t
&gt; specifically mentioned in the specs, this seems iffy to me - OffscreenCanvas
&gt; isn&apos;t really on a viewport... I think ideally this would work (I need to
&gt; check Chrome&apos;s behaviour), but I&apos;d like to deal with this separately if
&gt; needed. I&apos;ll leave a comment about it.

Best thing to do for the project’s future is to add one or more test cases, I guess.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380641</attachid>
            <date>2019-10-10 08:13:21 -0700</date>
            <delta_ts>2021-01-20 07:00:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202793-20191010161319.patch</filename>
            <type>text/plain</type>
            <size>94796</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGFlMjU3NjU0MzU5
YWZhOWJjNDM2NGNkY2E3NGJmMjJhMzMwMmQzZWEuLmFiMmFmNmQ2ZDJhNzk5ODdjOTk1NjIyZTk5
MmNjYWNlNDRhYmJiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC02ODQsNiArNjg0LDcgQEAgY3NzL0NT
U0ZvbnRGYWNlUnVsZS5jcHAKIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKIGNzcy9DU1NGb250
RmFjZVNyY1ZhbHVlLmNwcAogY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuY3BwCitjc3MvRm9udFNl
bGVjdG9yQmFzZS5jcHAKIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwCiBjc3MvQ1NTRm9udFN0eWxl
UmFuZ2VWYWx1ZS5jcHAKIGNzcy9DU1NGb250U3R5bGVWYWx1ZS5jcHAKQEAgLTc1OSw2ICs3NjAs
NyBAQCBjc3MvTWVkaWFRdWVyeUV4cHJlc3Npb24uY3BwCiBjc3MvTWVkaWFRdWVyeUxpc3QuY3Bw
CiBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCiBjc3MvTWVkaWFRdWVyeVBhcnNlckNvbnRleHQu
Y3BwCitjc3MvT2Zmc2NyZWVuRm9udFNlbGVjdG9yLmNwcAogY3NzL1BhZ2VSdWxlQ29sbGVjdG9y
LmNwcAogY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKIGNzcy9SR0JDb2xv
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCmluZGV4IDY0NmMxNGExMWFjNjQ1Yjk5
MjYxNDlmMjllOTgwMGM0YzcyNjdiY2QuLmJlMDc1ZmMyODE3ZTAxY2U5ZDE1NjRkNTgyYTk0YTRj
MGJkNTdiMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcApAQCAtNDAsMTEgKzQwLDEz
IEBACiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CiAjaW5jbHVkZSAiRm9udEZhY2UuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3JCYXNlLmgiCiAj
aW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRp
ZXMuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29w
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg4LDcgKzkwLDM2IEBAIHZvaWQgQ1NT
Rm9udEZhY2U6OmFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxp
c3QmIHNyY0xpc3QsIERvCiAgICAgZm9udEZhY2Uuc291cmNlc1BvcHVsYXRlZCgpOwogfQogCi1D
U1NGb250RmFjZTo6Q1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IsIFN0
eWxlUnVsZUZvbnRGYWNlKiBjc3NDb25uZWN0aW9uLCBGb250RmFjZSogd3JhcHBlciwgYm9vbCBp
c0xvY2FsRmFsbGJhY2spCit2b2lkIENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKENTU0ZvbnRG
YWNlJiBmb250RmFjZSwgQ1NTVmFsdWVMaXN0JiBzcmNMaXN0LCBXb3JrZXJHbG9iYWxTY29wZSog
Z2xvYmFsU2NvcGUsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJl
ZSkKK3sKKyAgICBmb3IgKGF1dG8mIHNyYyA6IHNyY0xpc3QpIHsKKyAgICAgICAgLy8gQW4gaXRl
bSBpbiB0aGUgbGlzdCBlaXRoZXIgc3BlY2lmaWVzIGEgc3RyaW5nIChsb2NhbCBmb250IG5hbWUp
IG9yIGEgVVJMIChyZW1vdGUgZm9udCB0byBkb3dubG9hZCkuCisgICAgICAgIENTU0ZvbnRGYWNl
U3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlPihzcmMuZ2V0KCkp
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+IHNvdXJjZTsKKyAg
ICAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSBudWxscHRyOworICAg
ICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNlOworCisjaWYgRU5BQkxFKFNWR19GT05UUykK
KyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNlU3JjKCkgfHwgaXRlbS5z
dmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm9udEZhY2VFbGVtZW50ID0gaXRlbS5zdmdG
b250RmFjZUVsZW1lbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAoIWl0ZW0uaXNMb2NhbCgpKSB7
CisgICAgICAgICAgICBjb25zdCBTZXR0aW5ncyogc2V0dGluZ3MgPSBnbG9iYWxTY29wZSA/ICZn
bG9iYWxTY29wZS0+c2V0dGluZ3MoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBib29sIGFsbG93
RG93bmxvYWRpbmcgPSBmb3VuZFNWR0ZvbnQgfHwgKHNldHRpbmdzICYmIHNldHRpbmdzLT5kb3du
bG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSk7CisgICAgICAgICAgICBpZiAoYWxsb3dEb3du
bG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgZ2xvYmFsU2NvcGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9u
dChnbG9iYWxTY29wZSwgZm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdl
bnRTaGFkb3dUcmVlKSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbWFrZVVuaXF1ZTxD
U1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc291cmNlID0gbWFr
ZVVuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgbnVs
bHB0ciwgZm9udEZhY2VFbGVtZW50KTsKKworICAgICAgICBpZiAoc291cmNlKQorICAgICAgICAg
ICAgZm9udEZhY2UuYWRvcHRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKyAgICB9CisgICAgZm9u
dEZhY2Uuc291cmNlc1BvcHVsYXRlZCgpOworfQorCitDU1NGb250RmFjZTo6Q1NTRm9udEZhY2Uo
Rm9udFNlbGVjdG9yQmFzZSogZm9udFNlbGVjdG9yLCBTdHlsZVJ1bGVGb250RmFjZSogY3NzQ29u
bmVjdGlvbiwgRm9udEZhY2UqIHdyYXBwZXIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrKQogICAgIDog
bV9mb250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQogICAgICwgbV9jc3NDb25uZWN0aW9uKGNzc0Nv
bm5lY3Rpb24pCiAgICAgLCBtX3dyYXBwZXIobWFrZVdlYWtQdHIod3JhcHBlcikpCkBAIC01ODks
MjMgKzYyMCwyMyBAQCB2b2lkIENTU0ZvbnRGYWNlOjphZG9wdFNvdXJjZShzdGQ6OnVuaXF1ZV9w
dHI8Q1NTRm9udEZhY2VTb3VyY2U+JiYgc291cmNlKQogCiBBbGxvd1VzZXJJbnN0YWxsZWRGb250
cyBDU1NGb250RmFjZTo6YWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSBjb25zdAogewotICAgIGlm
IChtX2ZvbnRTZWxlY3RvciAmJiBtX2ZvbnRTZWxlY3Rvci0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIG1fZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpLnNob3VsZEFsbG93
VXNlckluc3RhbGxlZEZvbnRzKCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vOworICAgIGlmIChtX2ZvbnRTZWxlY3RvciAmJiAhbV9m
b250U2VsZWN0b3ItPmRlc3Ryb3llZCgpKQorICAgICAgICByZXR1cm4gbV9mb250U2VsZWN0b3It
PnNldHRpbmdzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm87CiAgICAgcmV0
dXJuIEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpZZXM7CiB9CiAKIGJvb2wgQ1NTRm9udEZhY2U6
OnNob3VsZEFsbG93RGVzaWduU3lzdGVtVUlGb250cygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZm9u
dFNlbGVjdG9yICYmIG1fZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
bV9mb250U2VsZWN0b3ItPmRvY3VtZW50KCktPnNldHRpbmdzKCkuc2hvdWxkQWxsb3dEZXNpZ25T
eXN0ZW1VSUZvbnRzKCk7CisgICAgaWYgKG1fZm9udFNlbGVjdG9yICYmICFtX2ZvbnRTZWxlY3Rv
ci0+ZGVzdHJveWVkKCkpCisgICAgICAgIHJldHVybiBtX2ZvbnRTZWxlY3Rvci0+c2V0dGluZ3Mo
KS5zaG91bGRBbGxvd0Rlc2lnblN5c3RlbVVJRm9udHMoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXN0YXRpYyBTZXR0aW5nczo6Rm9udExvYWRUaW1pbmdPdmVycmlkZSBmb250TG9hZFRpbWlu
Z092ZXJyaWRlKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQorc3RhdGljIFNldHRpbmdz
OjpGb250TG9hZFRpbWluZ092ZXJyaWRlIGZvbnRMb2FkVGltaW5nT3ZlcnJpZGUoRm9udFNlbGVj
dG9yQmFzZSogZm9udFNlbGVjdG9yKQogewogICAgIGF1dG8gb3ZlcnJpZGVWYWx1ZSA9IFNldHRp
bmdzOjpGb250TG9hZFRpbWluZ092ZXJyaWRlOjpOb25lOwotICAgIGlmIChmb250U2VsZWN0b3Ig
JiYgZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpKQotICAgICAgICBvdmVycmlkZVZhbHVlID0gZm9u
dFNlbGVjdG9yLT5kb2N1bWVudCgpLT5zZXR0aW5ncygpLmZvbnRMb2FkVGltaW5nT3ZlcnJpZGUo
KTsKKyAgICBpZiAoZm9udFNlbGVjdG9yICYmICFmb250U2VsZWN0b3ItPmRlc3Ryb3llZCgpKQor
ICAgICAgICBvdmVycmlkZVZhbHVlID0gZm9udFNlbGVjdG9yLT5zZXR0aW5ncygpLmZvbnRMb2Fk
VGltaW5nT3ZlcnJpZGUoKTsKICAgICByZXR1cm4gb3ZlcnJpZGVWYWx1ZTsKIH0KIApAQCAtNzAz
LDEyICs3MzQsMTIgQEAgdm9pZCBDU1NGb250RmFjZTo6Zm9udExvYWRlZChDU1NGb250RmFjZVNv
dXJjZSYpCiAKIGJvb2wgQ1NTRm9udEZhY2U6OnNob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxldGlv
bnMoKSBjb25zdAogewotICAgIGlmIChtX2ZvbnRTZWxlY3RvciAmJiBtX2ZvbnRTZWxlY3Rvci0+
ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIG1fZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpLT5z
ZXR0aW5ncygpLnNob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxldGlvbnMoKTsKKyAgICBpZiAobV9m
b250U2VsZWN0b3IgJiYgIW1fZm9udFNlbGVjdG9yLT5kZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0
dXJuIG1fZm9udFNlbGVjdG9yLT5zZXR0aW5ncygpLnNob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxl
dGlvbnMoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2U6Om9wcG9y
dHVuaXN0aWNhbGx5U3RhcnRGb250RGF0YVVSTExvYWRpbmcoQ1NTRm9udFNlbGVjdG9yJiBmb250
U2VsZWN0b3IpCit2b2lkIENTU0ZvbnRGYWNlOjpvcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERh
dGFVUkxMb2FkaW5nKEZvbnRTZWxlY3RvckJhc2UmIGZvbnRTZWxlY3RvcikKIHsKICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIGdvIGNyYXp5IGhlcmUgYW5kIGJsb3cgdGhlIGNhY2hlLiBVc3VhbGx5
IHRoZXNlIGRhdGEgVVJMcyBhcmUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNyYzogbGlzdCwgc28g
bGV0J3MganVzdCBjaGVjayB0aGF0IG9uZS4KICAgICBpZiAoIW1fc291cmNlcy5pc0VtcHR5KCkp
CkBAIC04MzgsOCArODY5LDggQEAgYm9vbCBDU1NGb250RmFjZTo6cHVyZ2VhYmxlKCkgY29uc3QK
IAogdm9pZCBDU1NGb250RmFjZTo6dXBkYXRlU3R5bGVJZk5lZWRlZCgpCiB7Ci0gICAgaWYgKG1f
Zm9udFNlbGVjdG9yICYmIG1fZm9udFNlbGVjdG9yLT5kb2N1bWVudCgpKQotICAgICAgICBtX2Zv
bnRTZWxlY3Rvci0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIGlmICht
X2ZvbnRTZWxlY3RvciAmJiAhbV9mb250U2VsZWN0b3ItPmRlc3Ryb3llZCgpICYmIG1fZm9udFNl
bGVjdG9yLT5pc0NTU0ZvbnRTZWxlY3RvcigpKQorICAgICAgICBkb3duY2FzdDxDU1NGb250U2Vs
ZWN0b3I+KCptX2ZvbnRTZWxlY3RvcikuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKaW5k
ZXggZjUyMmRmNGJiMTI2NzIxMGU4NmY4NTFiNmViNjYzNjE2ZThhNDBjZi4uMTY4Mzg0NDIwZGZj
OGM2Y2ZhYzRjNTg5YzIzYTA2NDU3ZjU2YzA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgK
QEAgLTQ1LDcgKzQ1LDYgQEAgdXNpbmcgRXhlY1N0YXRlID0gQ2FsbEZyYW1lOwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDU1NGb250RmFjZVNvdXJjZTsKLWNsYXNzIENTU0ZvbnRTZWxl
Y3RvcjsKIGNsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFz
cyBDU1NWYWx1ZUxpc3Q7CkBAIC01MywxMSArNTIsMTMgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250OwogY2xhc3MgRm9udEZhY2U7CitjbGFzcyBG
b250U2VsZWN0b3JCYXNlOwogZW51bSBjbGFzcyBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xp
Y3k7CitjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKIAogY2xhc3MgQ1NTRm9udEZhY2UgZmluYWwg
OiBwdWJsaWMgUmVmQ291bnRlZDxDU1NGb250RmFjZT4gewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8Q1NTRm9udEZhY2U+IGNyZWF0ZShDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvciwgU3R5
bGVSdWxlRm9udEZhY2UqIGNzc0Nvbm5lY3Rpb24gPSBudWxscHRyLCBGb250RmFjZSogd3JhcHBl
ciA9IG51bGxwdHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpCisgICAgc3RhdGljIFJl
ZjxDU1NGb250RmFjZT4gY3JlYXRlKEZvbnRTZWxlY3RvckJhc2UqIGZvbnRTZWxlY3RvciwgU3R5
bGVSdWxlRm9udEZhY2UqIGNzc0Nvbm5lY3Rpb24gPSBudWxscHRyLCBGb250RmFjZSogd3JhcHBl
ciA9IG51bGxwdHIsIGJvb2wgaXNMb2NhbEZhbGxiYWNrID0gZmFsc2UpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZShmb250U2VsZWN0b3IsIGNzc0Nvbm5l
Y3Rpb24sIHdyYXBwZXIsIGlzTG9jYWxGYWxsYmFjaykpOwogICAgIH0KQEAgLTEwNSw3ICsxMDYs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbXB1dGVGYWlsdXJlU3RhdGUoKSBjb25zdDsKIAot
ICAgIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhDU1NGb250
U2VsZWN0b3ImKTsKKyAgICB2b2lkIG9wcG9ydHVuaXN0aWNhbGx5U3RhcnRGb250RGF0YVVSTExv
YWRpbmcoRm9udFNlbGVjdG9yQmFzZSYpOwogCiAgICAgdm9pZCBhZG9wdFNvdXJjZShzdGQ6OnVu
aXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3VyY2U+JiYpOwogICAgIHZvaWQgc291cmNlc1BvcHVsYXRl
ZCgpIHsgbV9zb3VyY2VzUG9wdWxhdGVkID0gdHJ1ZTsgfQpAQCAtMTE3LDYgKzExOCw3IEBAIHB1
YmxpYzoKICAgICBSZWZQdHI8Rm9udD4gZm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBib29s
IHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBFeHRlcm5hbFJlc291cmNlRG93
bmxvYWRQb2xpY3kpOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNlcyhDU1NGb250RmFj
ZSYsIENTU1ZhbHVlTGlzdCYsIERvY3VtZW50KiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5V
c2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VzKENTU0Zv
bnRGYWNlJiwgQ1NTVmFsdWVMaXN0JiwgV29ya2VyR2xvYmFsU2NvcGUqLCBib29sIGlzSW5pdGlh
dGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogCiAgICAgY2xhc3MgQ2xpZW50IHsK
ICAgICBwdWJsaWM6CkBAIC0xNzIsNyArMTc0LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZh
dGU6Ci0gICAgQ1NTRm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yKiwgU3R5bGVSdWxlRm9udEZhY2Uq
LCBGb250RmFjZSosIGJvb2wgaXNMb2NhbEZhbGxiYWNrKTsKKyAgICBDU1NGb250RmFjZShGb250
U2VsZWN0b3JCYXNlKiwgU3R5bGVSdWxlRm9udEZhY2UqLCBGb250RmFjZSosIGJvb2wgaXNMb2Nh
bEZhbGxiYWNrKTsKIAogICAgIHNpemVfdCBwdW1wKEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBv
bGljeSk7CiAgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzKTsKQEAgLTE5MSw3ICsxOTMsNyBAQCBw
cml2YXRlOgogICAgIEZvbnRMb2FkaW5nQmVoYXZpb3IgbV9sb2FkaW5nQmVoYXZpb3IgeyBGb250
TG9hZGluZ0JlaGF2aW9yOjpBdXRvIH07CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENT
U0ZvbnRGYWNlU291cmNlPiwgMCwgQ3Jhc2hPbk92ZXJmbG93LCAwPiBtX3NvdXJjZXM7Ci0gICAg
UmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250U2VsZWN0b3I7IC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NDM3IFRoZXJlJ3MgYSByZXRhaW4g
Y3ljbGU6IENTU0ZvbnRTZWxlY3RvciAtPiBDU1NGb250RmFjZVNldCAtPiBDU1NGb250RmFjZSAt
PiBDU1NGb250U2VsZWN0b3IKKyAgICBSZWZQdHI8Rm9udFNlbGVjdG9yQmFzZT4gbV9mb250U2Vs
ZWN0b3I7IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk2NDM3IFRoZXJlJ3MgYSByZXRhaW4gY3ljbGU6IENTU0ZvbnRTZWxlY3RvciAtPiBDU1NGb250
RmFjZVNldCAtPiBDU1NGb250RmFjZSAtPiBDU1NGb250U2VsZWN0b3IKICAgICBSZWZQdHI8U3R5
bGVSdWxlRm9udEZhY2U+IG1fY3NzQ29ubmVjdGlvbjsKICAgICBIYXNoU2V0PENsaWVudCo+IG1f
Y2xpZW50czsKICAgICBXZWFrUHRyPEZvbnRGYWNlPiBtX3dyYXBwZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU2V0LmNwcAppbmRleCAxOGU4MzRkNjkwYTZlYjUxMDFkYzkwYzhkZTVkYjVl
N2ExYjBjNWRmLi4yYTI3MjA1MjljMjU3YWEzMTg3YTViNjAzMjRmYjRkNDUwNTljZWVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lu
Y2x1ZGUgIkNTU0ZvbnRGYWNlU291cmNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgot
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTdHlsZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUu
aCIKQEAgLTM2LDEyICszNSwxMyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZv
bnRTZWxlY3RvckJhc2UuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNp
bmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NG
b250RmFjZVNldDo6Q1NTRm9udEZhY2VTZXQoQ1NTRm9udFNlbGVjdG9yKiBvd25pbmdGb250U2Vs
ZWN0b3IpCitDU1NGb250RmFjZVNldDo6Q1NTRm9udEZhY2VTZXQoRm9udFNlbGVjdG9yQmFzZSog
b3duaW5nRm9udFNlbGVjdG9yKQogICAgIDogbV9vd25pbmdGb250U2VsZWN0b3IobWFrZVdlYWtQ
dHIob3duaW5nRm9udFNlbGVjdG9yKSkKIHsKIH0KQEAgLTEwNSw4ICsxMDUsOCBAQCB2b2lkIENT
U0ZvbnRGYWNlU2V0OjplbnN1cmVMb2NhbEZvbnRGYWNlc0ZvckZhbWlseVJlZ2lzdGVyZWQoY29u
c3QgU3RyaW5nJiBmYW1pbAogICAgICAgICByZXR1cm47CiAKICAgICBBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cyBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9IEFsbG93VXNlckluc3RhbGxlZEZvbnRz
OjpZZXM7Ci0gICAgaWYgKG1fb3duaW5nRm9udFNlbGVjdG9yLT5kb2N1bWVudCgpKQotICAgICAg
ICBhbGxvd1VzZXJJbnN0YWxsZWRGb250cyA9IG1fb3duaW5nRm9udFNlbGVjdG9yLT5kb2N1bWVu
dCgpLT5zZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPyBBbGxvd1Vz
ZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vOworICAg
IGlmICghbV9vd25pbmdGb250U2VsZWN0b3ItPmRlc3Ryb3llZCgpKQorICAgICAgICBhbGxvd1Vz
ZXJJbnN0YWxsZWRGb250cyA9IG1fb3duaW5nRm9udFNlbGVjdG9yLT5zZXR0aW5ncygpLnNob3Vs
ZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVz
IDogQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vOwogICAgIFZlY3RvcjxGb250U2VsZWN0aW9u
Q2FwYWJpbGl0aWVzPiBjYXBhYmlsaXRpZXMgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdldEZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNJbkZhbWlseShmYW1pbHlOYW1lLCBhbGxvd1VzZXJJbnN0
YWxsZWRGb250cyk7CiAgICAgaWYgKGNhcGFiaWxpdGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKaW5kZXggNjljMTg1NjhhMjkwNmQ3
ZTMyNTRiYzkyNTA5YmM3MWI2YjRlZWFhNy4uMzE1YzRlOWFhNWY2MmViZThiMzM2OTgyOGJmMDc4
OTFlOTViZmZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmgKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHVibGljOgogCiBjbGFzcyBDU1NGb250RmFjZVNldCBmaW5hbCA6IHB1YmxpYyBSZWZD
b3VudGVkPENTU0ZvbnRGYWNlU2V0PiwgcHVibGljIENTU0ZvbnRGYWNlOjpDbGllbnQgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q1NTRm9udEZhY2VTZXQ+IGNyZWF0ZShDU1NGb250U2VsZWN0
b3IqIG93bmluZ0ZvbnRTZWxlY3RvciA9IG51bGxwdHIpCisgICAgc3RhdGljIFJlZjxDU1NGb250
RmFjZVNldD4gY3JlYXRlKEZvbnRTZWxlY3RvckJhc2UqIG93bmluZ0ZvbnRTZWxlY3RvciA9IG51
bGxwdHIpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250RmFjZVNl
dChvd25pbmdGb250U2VsZWN0b3IpKTsKICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRlcmVmKCkgZmluYWwgeyBSZWZDb3VudGVkOjpkZXJlZigpOyB9CiAKIHByaXZh
dGU6Ci0gICAgQ1NTRm9udEZhY2VTZXQoQ1NTRm9udFNlbGVjdG9yKik7CisgICAgQ1NTRm9udEZh
Y2VTZXQoRm9udFNlbGVjdG9yQmFzZSopOwogCiAgICAgdm9pZCByZW1vdmVGcm9tRmFjZXNMb29r
dXBUYWJsZShjb25zdCBDU1NGb250RmFjZSYsIGNvbnN0IENTU1ZhbHVlTGlzdCYgZmFtaWxpZXNU
b1NlYXJjaEZvcik7CiAgICAgdm9pZCBhZGRUb0ZhY2VzTG9va3VwVGFibGUoQ1NTRm9udEZhY2Um
KTsKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2ZhY2VzUGFydGl0
aW9uSW5kZXggeyAwIH07IC8vIEFsbCBlbnRyaWVzIGluIG1fZmFjZXMgYmVmb3JlIHRoaXMgaW5k
ZXggYXJlIENTUy1jb25uZWN0ZWQuCiAgICAgU3RhdHVzIG1fc3RhdHVzIHsgU3RhdHVzOjpMb2Fk
ZWQgfTsKICAgICBIYXNoU2V0PENTU0ZvbnRGYWNlU2V0Q2xpZW50Kj4gbV9jbGllbnRzOwotICAg
IFdlYWtQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX293bmluZ0ZvbnRTZWxlY3RvcjsKKyAgICBXZWFr
UHRyPEZvbnRTZWxlY3RvckJhc2U+IG1fb3duaW5nRm9udFNlbGVjdG9yOwogICAgIHVuc2lnbmVk
IG1fYWN0aXZlQ291bnQgeyAwIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcAppbmRleCA2NzQ3YTIzZmNmYjkwMzU4MzA1YmQ2ODA3YzVkMDJkNGU1YjE5MzQx
Li4xMzk0NGFhMDcyZDVjYjc1ZGUzYmUyMzY2MDZkYmRiMzcxZjFmNzgyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJGb250Q2FzY2FkZURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkZvbnRTZWxl
Y3RvckJhc2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdUb09URkZvbnRDb252ZXJz
aW9uLmgiCkBAIC0xMTAsNyArMTExLDcgQEAgYm9vbCBDU1NGb250RmFjZVNvdXJjZTo6c2hvdWxk
SWdub3JlRm9udExvYWRDb21wbGV0aW9ucygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZmFjZS5zaG91
bGRJZ25vcmVGb250TG9hZENvbXBsZXRpb25zKCk7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTb3Vy
Y2U6Om9wcG9ydHVuaXN0aWNhbGx5U3RhcnRGb250RGF0YVVSTExvYWRpbmcoQ1NTRm9udFNlbGVj
dG9yJiBmb250U2VsZWN0b3IpCit2b2lkIENTU0ZvbnRGYWNlU291cmNlOjpvcHBvcnR1bmlzdGlj
YWxseVN0YXJ0Rm9udERhdGFVUkxMb2FkaW5nKEZvbnRTZWxlY3RvckJhc2UmIGZvbnRTZWxlY3Rv
cikKIHsKICAgICBpZiAoc3RhdHVzKCkgPT0gU3RhdHVzOjpQZW5kaW5nICYmIG1fZm9udCAmJiBt
X2ZvbnQtPnVybCgpLnByb3RvY29sSXNEYXRhKCkgJiYgbV9mYW1pbHlOYW1lT3JVUkkubGVuZ3Ro
KCkgPCBNQikKICAgICAgICAgbG9hZCgmZm9udFNlbGVjdG9yKTsKQEAgLTE0Miw3ICsxNDMsNyBA
QCB2b2lkIENTU0ZvbnRGYWNlU291cmNlOjpmb250TG9hZGVkKENhY2hlZEZvbnQmIGxvYWRlZEZv
bnQpCiAgICAgbV9mYWNlLmZvbnRMb2FkZWQoKnRoaXMpOwogfQogCi12b2lkIENTU0ZvbnRGYWNl
U291cmNlOjpsb2FkKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQordm9pZCBDU1NGb250
RmFjZVNvdXJjZTo6bG9hZChGb250U2VsZWN0b3JCYXNlKiBmb250U2VsZWN0b3IpCiB7CiAgICAg
c2V0U3RhdHVzKFN0YXR1czo6TG9hZGluZyk7CiAKQEAgLTE4Miw4ICsxODMsOCBAQCB2b2lkIENT
U0ZvbnRGYWNlU291cmNlOjpsb2FkKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQogICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFsbG93RGVzaWduU3lzdGVtVUlGb250
cyhtX2ZhY2Uuc2hvdWxkQWxsb3dEZXNpZ25TeXN0ZW1VSUZvbnRzKCkpOwogICAgICAgICAgICAg
c3VjY2VzcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShmb250RGVzY3Jp
cHRpb24sIG1fZmFtaWx5TmFtZU9yVVJJLCBudWxscHRyLCBudWxscHRyLCBGb250U2VsZWN0aW9u
U3BlY2lmaWVkQ2FwYWJpbGl0aWVzKCksIHRydWUpOwogICAgICAgICAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZvbnRTZWxlY3Rvci0+
ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1bWVudCwgbV9mYW1pbHlOYW1lT3JVUkkuc3RyaW5nKCks
IHN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIGlmIChmb250U2VsZWN0b3ItPmlzQ1NTRm9udFNl
bGVjdG9yKCkgJiYgIWZvbnRTZWxlY3Rvci0+ZGVzdHJveWVkKCkpCisgICAgICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG93bmNhc3Q8
Q1NTRm9udFNlbGVjdG9yPigqZm9udFNlbGVjdG9yKS5kb2N1bWVudCgpLCBtX2ZhbWlseU5hbWVP
clVSSS5zdHJpbmcoKSwgc3VjY2Vzcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgc2V0U3RhdHVzKHN1Y2Nlc3MgPyBTdGF0dXM6OlN1Y2Nlc3MgOiBTdGF0dXM6OkZhaWx1cmUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAppbmRleCAyOTFiMjQ4MDkyNjM3
ZmNiNGM3NzA4ZjQ1Mzc3NzYwOTE4ZWQ0ZDM1Li4xZWI5NzYzMzU5ZTM2MzgyMzZlYjIwM2ZiODk1
Zjg2N2ZhMzgxOTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaApAQCAt
MzQsMTEgKzM0LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU0ZvbnRGYWNl
OwotY2xhc3MgQ1NTRm9udFNlbGVjdG9yOwogY2xhc3MgRm9udDsKIHN0cnVjdCBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhOwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogc3RydWN0IEZvbnRTZWxlY3Rp
b25TcGVjaWZpZWRDYXBhYmlsaXRpZXM7CitjbGFzcyBGb250U2VsZWN0b3JCYXNlOwogc3RydWN0
IEZvbnRWYXJpYW50U2V0dGluZ3M7CiBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7CiBjbGFzcyBT
aGFyZWRCdWZmZXI7CkBAIC02Nyw5ICs2Nyw5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEF0b21T
dHJpbmcmIGZhbWlseU5hbWVPclVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5TmFtZU9yVVJJ
OyB9CiAKLSAgICB2b2lkIG9wcG9ydHVuaXN0aWNhbGx5U3RhcnRGb250RGF0YVVSTExvYWRpbmco
Q1NTRm9udFNlbGVjdG9yJik7CisgICAgdm9pZCBvcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERh
dGFVUkxMb2FkaW5nKEZvbnRTZWxlY3RvckJhc2UmKTsKIAotICAgIHZvaWQgbG9hZChDU1NGb250
U2VsZWN0b3IqKTsKKyAgICB2b2lkIGxvYWQoRm9udFNlbGVjdG9yQmFzZSopOwogICAgIFJlZlB0
cjxGb250PiBmb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwg
Ym9vbCBzeW50aGV0aWNJdGFsaWMsIGNvbnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmLCBjb25zdCBG
b250VmFyaWFudFNldHRpbmdzJiwgRm9udFNlbGVjdGlvblNwZWNpZmllZENhcGFiaWxpdGllcyk7
CiAKICAgICBib29sIHJlcXVpcmVzRXh0ZXJuYWxSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCmluZGV4
IGE0MzBlOTNhYWI0NTRmODgyN2ZlZGM4NjE2ODM5YWQ4Njg1ZmNjODEuLmMxZjA0ZGMwNmNhMTVl
YzdlYzA3Njc5OTZhZGUyNjgzOTk0ZDIxZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlNWR0ZvbnRGYWNl
RWxlbWVudC5oIgorI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Nyw2ICs5
OCwyMSBAQCBDYWNoZWRGb250KiBDU1NGb250RmFjZVNyY1ZhbHVlOjpjYWNoZWRGb250KERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBpc1NWRywgYm9vbAogICAgIHJldHVybiBtX2NhY2hlZEZvbnQu
Z2V0KCk7CiB9CiAKK0NhY2hlZEZvbnQqIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmNhY2hlZEZvbnQo
V29ya2VyR2xvYmFsU2NvcGUqIHNjb3BlLCBib29sIGlzU1ZHLCBib29sIGlzSW5pdGlhdGluZ0Vs
ZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCit7CisgICAgaWYgKG1fY2FjaGVkRm9udCkKKyAg
ICAgICAgcmV0dXJuIG1fY2FjaGVkRm9udC5nZXQoKTsKKworICAgIFJlc291cmNlTG9hZGVyT3B0
aW9ucyBvcHRpb25zID0gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRlZmF1bHRDYWNoZWRSZXNvdXJj
ZU9wdGlvbnMoKTsKKyAgICBvcHRpb25zLmNvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24g
PSBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlID8gQ29udGVudFNlY3Vy
aXR5UG9saWN5SW1wb3NpdGlvbjo6U2tpcFBvbGljeUNoZWNrIDogQ29udGVudFNlY3VyaXR5UG9s
aWN5SW1wb3NpdGlvbjo6RG9Qb2xpY3lDaGVjazsKKyAgICBvcHRpb25zLmxvYWRlZEZyb21PcGFx
dWVTb3VyY2UgPSBtX2xvYWRlZEZyb21PcGFxdWVTb3VyY2U7CisKKyAgICBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qoc2NvcGUtPmNvbXBsZXRlVVJMKG1fcmVz
b3VyY2UpKSwgb3B0aW9ucyk7CisgICAgcmVxdWVzdC5zZXRJbml0aWF0b3IoY2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0SW5pdGlhdG9ycygpLmNzcyk7CisgICAgbV9jYWNoZWRGb250ID0gc2NvcGUtPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCkucmVxdWVzdEZvbnQoV1RGTW92ZShyZXF1ZXN0KSwgaXNTVkcp
LnZhbHVlX29yKG51bGxwdHIpOworICAgIHJldHVybiBtX2NhY2hlZEZvbnQuZ2V0KCk7Cit9CisK
IGJvb2wgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0ZvbnRGYWNlU3JjVmFs
dWUmIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiBtX2lzTG9jYWwgPT0gb3RoZXIubV9pc0xv
Y2FsICYmIG1fZm9ybWF0ID09IG90aGVyLm1fZm9ybWF0ICYmIG1fcmVzb3VyY2UgPT0gb3RoZXIu
bV9yZXNvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNy
Y1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCmluZGV4
IGYxYjk1ZTc5NWU5OGY5ZGRiODIyZjgxNTkzOGUyNjU3YjY3MGE0NDkuLjU0NWU4MjNiMzQyMjRh
Y2JiMzQ0ZTJlYzQ3YmZkYTFjY2UxYmJmZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU3JjVmFsdWUuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDYWNoZWRGb250OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTVkdGb250RmFjZUVsZW1lbnQ7
CitjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKIAogY2xhc3MgQ1NTRm9udEZhY2VTcmNWYWx1ZSBm
aW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6CkBAIC02OSw2ICs3MCw3IEBAIHB1Ymxp
YzoKICAgICBib29sIHRyYXZlcnNlU3VicmVzb3VyY2VzKGNvbnN0IFdURjo6RnVuY3Rpb248Ym9v
bCAoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKT4mIGhhbmRsZXIpIGNvbnN0OwogCiAgICAgQ2FjaGVk
Rm9udCogY2FjaGVkRm9udChEb2N1bWVudCosIGJvb2wgaXNTVkcsIGJvb2wgaXNJbml0aWF0aW5n
RWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CisgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9u
dChXb3JrZXJHbG9iYWxTY29wZSosIGJvb2wgaXNTVkcsIGJvb2wgaXNJbml0aWF0aW5nRWxlbWVu
dEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAKICAgICBib29sIGVxdWFscyhjb25zdCBDU1NGb250
RmFjZVNyY1ZhbHVlJikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKaW5kZXggNWViOGJhNDQ0ZDE3N2RiNzQwZTQ3OGE5ZDA2NDY2NzBkMmQxNTZhNC4uMTc5ZWIx
MzMwY2ZiZDg1OTdmYzMxNTMzNzMxYTI3ZTM5YjBhMzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTI3LDYxICsyNywxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkRm9udC5o
IgotI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCi0jaW5jbHVkZSAiQ1NTRm9udEZhY2VTb3VyY2Uu
aCIKLSNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU2VnbWVu
dGVkRm9udEZhY2UuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAi
Q1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUu
aCIKLSNpbmNsdWRlICJGb250RmFjZS5oIgogI2luY2x1ZGUgIkZvbnRGYWNlU2V0LmgiCi0jaW5j
bHVkZSAiRm9udFNlbGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJRdWlya3Mu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgotI2luY2x1ZGUgIlJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxl
UHJvcGVydGllcy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJTdHls
ZVJ1bGUuaCIKLSNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKICNpbmNsdWRlIDx3
dGYvUmVmLmg+Ci0jaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB1bnNpZ25l
ZCBmb250U2VsZWN0b3JJZDsKLQogQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoRG9j
dW1lbnQmIGRvY3VtZW50KQotICAgIDogbV9kb2N1bWVudChtYWtlV2Vha1B0cihkb2N1bWVudCkp
Ci0gICAgLCBtX2Nzc0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUodGhpcykpCi0g
ICAgLCBtX2JlZ2luTG9hZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxv
YWRUaW1lckZpcmVkKQotICAgICwgbV91bmlxdWVJZCgrK2ZvbnRTZWxlY3RvcklkKQotICAgICwg
bV92ZXJzaW9uKDApCisgICAgOiBGb250U2VsZWN0b3JCYXNlKCkKKyAgICAsIG1fZG9jdW1lbnQo
bWFrZVdlYWtQdHIoZG9jdW1lbnQpKQogewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICBG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmFkZENsaWVudCgqdGhpcyk7Ci0gICAgbV9jc3NGb250RmFj
ZVNldC0+YWRkQ2xpZW50KCp0aGlzKTsKLSAgICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3Ig
JXAgY3RvciIsIHRoaXMpOwotfQotCi1DU1NGb250U2VsZWN0b3I6On5DU1NGb250U2VsZWN0b3Io
KQotewotICAgIExPRyhGb250cywgIkNTU0ZvbnRTZWxlY3RvciAlcCBkdG9yIiwgdGhpcyk7Ci0K
LSAgICBjbGVhckRvY3VtZW50KCk7Ci0gICAgbV9jc3NGb250RmFjZVNldC0+cmVtb3ZlQ2xpZW50
KCp0aGlzKTsKLSAgICBGb250Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZUNsaWVudCgqdGhpcyk7
CiB9CiAKIEZvbnRGYWNlU2V0KiBDU1NGb250U2VsZWN0b3I6Om9wdGlvbmFsRm9udEZhY2VTZXQo
KQpAQCAtOTksMzQzICs1NCwxNCBAQCBGb250RmFjZVNldCYgQ1NTRm9udFNlbGVjdG9yOjpmb250
RmFjZVNldCgpCiAgICAgcmV0dXJuICptX2ZvbnRGYWNlU2V0OwogfQogCi1ib29sIENTU0ZvbnRT
ZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2Nzc0ZvbnRGYWNlU2V0
LT5mYWNlQ291bnQoKTsKLX0KLQotdm9pZCBDU1NGb250U2VsZWN0b3I6OmVtcHR5Q2FjaGVzKCkK
LXsKLSAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5lbXB0eUNhY2hlcygpOwotfQotCi12b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YnVpbGRTdGFydGVkKCkKLXsKLSAgICBtX2J1aWxkSXNVbmRlcndheSA9IHRy
dWU7Ci0gICAgbV9jc3NGb250RmFjZVNldC0+cHVyZ2UoKTsKLSAgICArK21fdmVyc2lvbjsKLQot
ICAgIEFTU0VSVChtX2Nzc0Nvbm5lY3Rpb25zUG9zc2libHlUb1JlbW92ZS5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVChtX2Nzc0Nvbm5lY3Rpb25zRW5jb3VudGVyZWREdXJpbmdCdWlsZC5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVChtX3N0YWdpbmdBcmVhLmlzRW1wdHkoKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2Nzc0ZvbnRGYWNlU2V0LT5mYWNlQ291bnQoKTsgKytpKSB7Ci0gICAg
ICAgIENTU0ZvbnRGYWNlJiBmYWNlID0gbV9jc3NGb250RmFjZVNldC5nZXQoKVtpXTsKLSAgICAg
ICAgaWYgKGZhY2UuY3NzQ29ubmVjdGlvbigpKQotICAgICAgICAgICAgbV9jc3NDb25uZWN0aW9u
c1Bvc3NpYmx5VG9SZW1vdmUuYWRkKCZmYWNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTRm9udFNl
bGVjdG9yOjpidWlsZENvbXBsZXRlZCgpCi17Ci0gICAgaWYgKCFtX2J1aWxkSXNVbmRlcndheSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9idWlsZElzVW5kZXJ3YXkgPSBmYWxzZTsKLQotICAg
IC8vIFNvbWUgZm9udCBmYWNlcyB3ZXJlbid0IHJlLWFkZGVkIGR1cmluZyB0aGUgYnVpbGQgcHJv
Y2Vzcy4KLSAgICBmb3IgKGF1dG8mIGZhY2UgOiBtX2Nzc0Nvbm5lY3Rpb25zUG9zc2libHlUb1Jl
bW92ZSkgewotICAgICAgICBhdXRvKiBjb25uZWN0aW9uID0gZmFjZS0+Y3NzQ29ubmVjdGlvbigp
OwotICAgICAgICBBU1NFUlQoY29ubmVjdGlvbik7Ci0gICAgICAgIGlmICghbV9jc3NDb25uZWN0
aW9uc0VuY291bnRlcmVkRHVyaW5nQnVpbGQuY29udGFpbnMoY29ubmVjdGlvbikpCi0gICAgICAg
ICAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5yZW1vdmUoKmZhY2UpOwotICAgIH0KLQotICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fc3RhZ2luZ0FyZWEpCi0gICAgICAgIGFkZEZvbnRGYWNlUnVsZShpdGVt
LnN0eWxlUnVsZUZvbnRGYWNlLCBpdGVtLmlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNo
YWRvd1RyZWUpOwotICAgIG1fY3NzQ29ubmVjdGlvbnNFbmNvdW50ZXJlZER1cmluZ0J1aWxkLmNs
ZWFyKCk7Ci0gICAgbV9zdGFnaW5nQXJlYS5jbGVhcigpOwotICAgIG1fY3NzQ29ubmVjdGlvbnNQ
b3NzaWJseVRvUmVtb3ZlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRG
b250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmIGZvbnRGYWNlUnVsZSwgYm9vbCBpc0luaXRp
YXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKQotewotICAgIGlmIChtX2J1aWxkSXNV
bmRlcndheSkgewotICAgICAgICBtX2Nzc0Nvbm5lY3Rpb25zRW5jb3VudGVyZWREdXJpbmdCdWls
ZC5hZGQoJmZvbnRGYWNlUnVsZSk7Ci0gICAgICAgIG1fc3RhZ2luZ0FyZWEuYXBwZW5kKHtmb250
RmFjZVJ1bGUsIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWV9KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUg
PSBmb250RmFjZVJ1bGUucHJvcGVydGllcygpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udEZh
bWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHlsZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlGb250U3R5bGUpOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9udFdlaWdo
dCA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKLSAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHJldGNoID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRTdHJldGNoKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0
eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOwotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdW5pY29kZVJhbmdlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eVVuaWNvZGVSYW5nZSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBmZWF0dXJlU2V0dGluZ3MgPSBz
dHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZlYXR1cmVTZXR0aW5ncyk7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YXJpYW50TGlnYXR1cmVzID0gc3R5bGUuZ2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzKTsKLSAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhcmlhbnRQb3NpdGlvbiA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlGb250VmFyaWFudFBvc2l0aW9uKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhcmlh
bnRDYXBzID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50
Q2Fwcyk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YXJpYW50TnVtZXJpYyA9IHN0eWxlLmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudE51bWVyaWMpOwotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFyaWFudEFsdGVybmF0ZXMgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5hdGVzKTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhcmlhbnRFYXN0QXNpYW4gPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udFZhcmlhbnRFYXN0QXNpYW4pOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbG9hZGluZ0JlaGF2
aW9yID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnREaXNwbGF5KTsK
LSAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oZm9udEZhbWlseSkgfHwgIWlzPENTU1ZhbHVlTGlz
dD4oc3JjKSB8fCAodW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1bmljb2RlUmFu
Z2UpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0ID0g
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZm9udEZhbWlseSk7Ci0gICAgaWYgKCFmYW1pbHlMaXN0
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odW5pY29kZVJhbmdlLmdldCgpKTsKLQotICAgIENT
U1ZhbHVlTGlzdCYgc3JjTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnNyYyk7Ci0gICAg
aWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZXRGb3JTY29w
ZTxib29sPiBjcmVhdGluZ0ZvbnQobV9jcmVhdGluZ0ZvbnQsIHRydWUpOwotICAgIFJlZjxDU1NG
b250RmFjZT4gZm9udEZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKHRoaXMsICZmb250RmFjZVJ1
bGUpOwotCi0gICAgaWYgKCFmb250RmFjZS0+c2V0RmFtaWxpZXMoKmZvbnRGYW1pbHkpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKGZvbnRTdHlsZSkKLSAgICAgICAgZm9udEZhY2UtPnNldFN0
eWxlKCpmb250U3R5bGUpOwotICAgIGlmIChmb250V2VpZ2h0KQotICAgICAgICBmb250RmFjZS0+
c2V0V2VpZ2h0KCpmb250V2VpZ2h0KTsKLSAgICBpZiAoZm9udFN0cmV0Y2gpCi0gICAgICAgIGZv
bnRGYWNlLT5zZXRTdHJldGNoKCpmb250U3RyZXRjaCk7Ci0gICAgaWYgKHJhbmdlTGlzdCAmJiAh
Zm9udEZhY2UtPnNldFVuaWNvZGVSYW5nZSgqcmFuZ2VMaXN0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICh2YXJpYW50TGlnYXR1cmVzICYmICFmb250RmFjZS0+c2V0VmFyaWFudExpZ2F0dXJl
cygqdmFyaWFudExpZ2F0dXJlcykpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodmFyaWFudFBv
c2l0aW9uICYmICFmb250RmFjZS0+c2V0VmFyaWFudFBvc2l0aW9uKCp2YXJpYW50UG9zaXRpb24p
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHZhcmlhbnRDYXBzICYmICFmb250RmFjZS0+c2V0
VmFyaWFudENhcHMoKnZhcmlhbnRDYXBzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh2YXJp
YW50TnVtZXJpYyAmJiAhZm9udEZhY2UtPnNldFZhcmlhbnROdW1lcmljKCp2YXJpYW50TnVtZXJp
YykpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodmFyaWFudEFsdGVybmF0ZXMgJiYgIWZvbnRG
YWNlLT5zZXRWYXJpYW50QWx0ZXJuYXRlcygqdmFyaWFudEFsdGVybmF0ZXMpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKHZhcmlhbnRFYXN0QXNpYW4gJiYgIWZvbnRGYWNlLT5zZXRWYXJpYW50
RWFzdEFzaWFuKCp2YXJpYW50RWFzdEFzaWFuKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChm
ZWF0dXJlU2V0dGluZ3MpCi0gICAgICAgIGZvbnRGYWNlLT5zZXRGZWF0dXJlU2V0dGluZ3MoKmZl
YXR1cmVTZXR0aW5ncyk7Ci0gICAgaWYgKGxvYWRpbmdCZWhhdmlvcikKLSAgICAgICAgZm9udEZh
Y2UtPnNldExvYWRpbmdCZWhhdmlvcigqbG9hZGluZ0JlaGF2aW9yKTsKLQotICAgIENTU0ZvbnRG
YWNlOjphcHBlbmRTb3VyY2VzKGZvbnRGYWNlLCBzcmNMaXN0LCBtX2RvY3VtZW50LmdldCgpLCBp
c0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKLSAgICBpZiAoZm9udEZh
Y2UtPmNvbXB1dGVGYWlsdXJlU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFJl
ZlB0cjxDU1NGb250RmFjZT4gZXhpc3RpbmdGYWNlID0gbV9jc3NGb250RmFjZVNldC0+bG9va1Vw
QnlDU1NDb25uZWN0aW9uKGZvbnRGYWNlUnVsZSkpIHsKLSAgICAgICAgLy8gVGhpcyBhZG9wdGlv
biBpcyBmYWlybHkgc3VidGxlLiBTY3JpcHQgY2FuIHRyaWdnZXIgYSBwdXJnZSBvZiBtX2Nzc0Zv
bnRGYWNlU2V0IGF0IGFueSB0aW1lLAotICAgICAgICAvLyB3aGljaCB3aWxsIGNhdXNlIHVzIHRv
IGp1c3QgcmVseSBvbiB0aGUgbWVtb3J5IGNhY2hlIHRvIHJldGFpbiB0aGUgYnl0ZXMgb2YgdGhl
IGZpbGUgdGhlIG5leHQKLSAgICAgICAgLy8gdGltZSB3ZSBidWlsZCB1cCB0aGUgQ1NTRm9udEZh
Y2VTZXQuIEhvd2V2ZXIsIHdoZW4gdGhlIENTUyBGb250IExvYWRpbmcgQVBJIGlzIGludm9sdmVk
LAotICAgICAgICAvLyB0aGUgRm9udEZhY2UgYW5kIEZvbnRGYWNlU2V0IG9iamVjdHMgbmVlZCB0
byByZXRhaW4gc3RhdGUuIFdlIGNyZWF0ZSB0aGUgbmV3IENTU0ZvbnRGYWNlIG9iamVjdAotICAg
ICAgICAvLyB3aGlsZSB0aGUgb2xkIG9uZSBpcyBzdGlsbCBpbiBzY29wZSBzbyB0aGF0IHRoZSBt
ZW1vcnkgY2FjaGUgd2lsbCBiZSBmb3JjZWQgdG8gcmV0YWluIHRoZSBieXRlcwotICAgICAgICAv
LyBvZiB0aGUgcmVzb3VyY2UuIFRoaXMgbWVhbnMgdGhhdCB0aGUgQ2FjaGVkRm9udCB3aWxsIHRl
bXBvcmFyaWx5IGhhdmUgdHdvIGNsaWVudHMgKHVudGlsIHRoZQotICAgICAgICAvLyBvbGQgQ1NT
Rm9udEZhY2UgZ29lcyBvdXQgb2Ygc2NvcGUsIHdoaWNoIHNob3VsZCBoYXBwZW4gYXQgdGhlIGVu
ZCBvZiB0aGlzICJpZiIgYmxvY2spLiBCZWNhdXNlCi0gICAgICAgIC8vIHRoZSBDU1NGb250RmFj
ZVNvdXJjZSBvYmplY3RzIHdpbGwgaW5zcGVjdCB0aGVpciBDYWNoZWRGb250cywgdGhlIG5ldyBD
U1NGb250RmFjZSBpcyBzbWFydCBlbm91Z2gKLSAgICAgICAgLy8gdG8gZW50ZXIgdGhlIGNvcnJl
Y3Qgc3RhdGUoKSBkdXJpbmcgdGhlIG5leHQgcHVtcCgpLiBUaGlzIGFwcHJvYWNoIG9mIG1ha2lu
ZyBhIG5ldyBDU1NGb250RmFjZSBpcwotICAgICAgICAvLyBzaW1wbGVyIHRoYW4gY29tcHV0aW5n
IGFuZCBhcHBseWluZyBhIGRpZmYgb2YgdGhlIFN0eWxlUHJvcGVydGllcy4KLSAgICAgICAgbV9j
c3NGb250RmFjZVNldC0+cmVtb3ZlKCpleGlzdGluZ0ZhY2UpOwotICAgICAgICBpZiAoYXV0byog
ZXhpc3RpbmdXcmFwcGVyID0gZXhpc3RpbmdGYWNlLT5leGlzdGluZ1dyYXBwZXIoKSkKLSAgICAg
ICAgICAgIGV4aXN0aW5nV3JhcHBlci0+YWRvcHQoZm9udEZhY2UuZ2V0KCkpOwotICAgIH0KLQot
ICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZChmb250RmFjZS5nZXQoKSk7Ci0gICAgKyttX3ZlcnNp
b247Ci19Ci0KLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpyZWdpc3RlckZvckludmFsaWRhdGlvbkNh
bGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmIGNsaWVudCkKLXsKLSAgICBtX2NsaWVudHMuYWRk
KCZjbGllbnQpOwotfQotCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6dW5yZWdpc3RlckZvckludmFs
aWRhdGlvbkNhbGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmIGNsaWVudCkKLXsKLSAgICBtX2Ns
aWVudHMucmVtb3ZlKCZjbGllbnQpOwotfQotCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6ZGlzcGF0
Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKQotewotICAgICsrbV92ZXJzaW9uOwotCi0gICAgZm9y
IChhdXRvJiBjbGllbnQgOiBjb3B5VG9WZWN0b3IobV9jbGllbnRzKSkKLSAgICAgICAgY2xpZW50
LT5mb250c05lZWRVcGRhdGUoKnRoaXMpOwotfQotCi12b2lkIENTU0ZvbnRTZWxlY3Rvcjo6b3Bw
b3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKLXsK
LSAgICBjb25zdCBhdXRvJiBzZWdtZW50ZWRGb250RmFjZSA9IG1fY3NzRm9udEZhY2VTZXQtPmZv
bnRGYWNlKGRlc2NyaXB0aW9uLmZvbnRTZWxlY3Rpb25SZXF1ZXN0KCksIGZhbWlseU5hbWUpOwot
ICAgIGlmICghc2VnbWVudGVkRm9udEZhY2UpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGF1
dG8mIGZhY2UgOiBzZWdtZW50ZWRGb250RmFjZS0+Y29uc3RpdHVlbnRGYWNlcygpKQotICAgICAg
ICBmYWNlLT5vcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERhdGFVUkxMb2FkaW5nKCp0aGlzKTsK
LX0KLQotdm9pZCBDU1NGb250U2VsZWN0b3I6OmZvbnRMb2FkZWQoKQorQ2FjaGVkUmVzb3VyY2VM
b2FkZXImIENTU0ZvbnRTZWxlY3Rvcjo6Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBjb25zdAogewot
ICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7CisgICAgcmV0dXJuIG1fZG9jdW1l
bnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiB9CiAKLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpm
b250TW9kaWZpZWQoKQorY29uc3QgU2V0dGluZ3MmIENTU0ZvbnRTZWxlY3Rvcjo6c2V0dGluZ3Mo
KSBjb25zdAogewotICAgIGlmICghbV9jcmVhdGluZ0ZvbnQgJiYgIW1fYnVpbGRJc1VuZGVyd2F5
KQotICAgICAgICBkaXNwYXRjaEludmFsaWRhdGlvbkNhbGxiYWNrcygpOwotfQotCi12b2lkIENT
U0ZvbnRTZWxlY3Rvcjo6Zm9udENhY2hlSW52YWxpZGF0ZWQoKQotewotICAgIGRpc3BhdGNoSW52
YWxpZGF0aW9uQ2FsbGJhY2tzKCk7Ci19Ci0KLXN0YXRpYyBPcHRpb25hbDxBdG9tU3RyaW5nPiBy
ZXNvbHZlR2VuZXJpY0ZhbWlseShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQotewot
ICAgIGF1dG8gcGxhdGZvcm1SZXN1bHQgPSBGb250RGVzY3JpcHRpb246OnBsYXRmb3JtUmVzb2x2
ZUdlbmVyaWNGYW1pbHkoZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpLCBmb250RGVzY3JpcHRpb24u
bG9jYWxlKCksIGZhbWlseU5hbWUpOwotICAgIGlmICghcGxhdGZvcm1SZXN1bHQuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybVJlc3VsdDsKLQotICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGlu
Z3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKLQotICAgIFVTY3JpcHRDb2RlIHNjcmlwdCA9IGZv
bnREZXNjcmlwdGlvbi5zY3JpcHQoKTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBzZXJpZkZhbWls
eSkKLSAgICAgICAgcmV0dXJuIHNldHRpbmdzLnNlcmlmRm9udEZhbWlseShzY3JpcHQpOwotICAg
IGlmIChmYW1pbHlOYW1lID09IHNhbnNTZXJpZkZhbWlseSkKLSAgICAgICAgcmV0dXJuIHNldHRp
bmdzLnNhbnNTZXJpZkZvbnRGYW1pbHkoc2NyaXB0KTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBj
dXJzaXZlRmFtaWx5KQotICAgICAgICByZXR1cm4gc2V0dGluZ3MuY3Vyc2l2ZUZvbnRGYW1pbHko
c2NyaXB0KTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBmYW50YXN5RmFtaWx5KQotICAgICAgICBy
ZXR1cm4gc2V0dGluZ3MuZmFudGFzeUZvbnRGYW1pbHkoc2NyaXB0KTsKLSAgICBpZiAoZmFtaWx5
TmFtZSA9PSBtb25vc3BhY2VGYW1pbHkpCi0gICAgICAgIHJldHVybiBzZXR0aW5ncy5maXhlZEZv
bnRGYW1pbHkoc2NyaXB0KTsKLSAgICBpZiAoZmFtaWx5TmFtZSA9PSBwaWN0b2dyYXBoRmFtaWx5
KQotICAgICAgICByZXR1cm4gc2V0dGluZ3MucGljdG9ncmFwaEZvbnRGYW1pbHkoc2NyaXB0KTsK
LSAgICBpZiAoZmFtaWx5TmFtZSA9PSBzdGFuZGFyZEZhbWlseSkKLSAgICAgICAgcmV0dXJuIHNl
dHRpbmdzLnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpOwotCi0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLX0KLQotRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJp
bmcmIGZhbWlseU5hbWUpCi17Ci0gICAgLy8gSWYgdGhpcyBBU1NFUlQoKSBmaXJlcywgaXQgdXN1
YWxseSBtZWFucyB5b3UgZm9yZ290IGEgZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpIHNv
bWV3aGVyZS4KLSAgICBBU1NFUlQoIW1fYnVpbGRJc1VuZGVyd2F5IHx8IG1fY29tcHV0aW5nUm9v
dFN0eWxlRm9udENvdW50KTsKLQotICAgIC8vIEZJWE1FOiBUaGUgc3BlYyAoYW5kIEZpcmVmb3gp
IHNheXMgdXNlciBzcGVjaWZpZWQgZ2VuZXJpYyBmYW1pbGllcyAoc2Fucy1zZXJpZiBldGMuKSBz
aG91bGQgYmUgcmVzb2x2ZWQgYmVmb3JlIHRoZSBAZm9udC1mYWNlIGxvb2t1cCB0b28uCi0gICAg
Ym9vbCByZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0ID0gZmFtaWx5TmFtZSA9PSBzdGFuZGFyZEZh
bWlseTsKLQotICAgIEF0b21TdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gZmFtaWx5TmFtZTsKLSAg
ICBPcHRpb25hbDxGb250RGVzY3JpcHRpb24+IG92ZXJyaWRlRm9udERlc2NyaXB0aW9uOwotICAg
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uRm9yTG9va3VwID0gJmZvbnRE
ZXNjcmlwdGlvbjsKLSAgICBhdXRvIHJlc29sdmVHZW5lcmljRmFtaWx5ID0gWyZdKCkgewotICAg
ICAgICBpZiAoYXV0byBnZW5lcmljRmFtaWx5T3B0aW9uYWwgPSBXZWJDb3JlOjpyZXNvbHZlR2Vu
ZXJpY0ZhbWlseShtX2RvY3VtZW50LmdldCgpLCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUp
KSB7Ci0gICAgICAgICAgICBpZiAobV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5xdWlya3MoKS5z
aG91bGRMaWdodGVuSmFwYW5lc2VCb2xkU2Fuc1NlcmlmKCkgJiYgZmFtaWx5Rm9yTG9va3VwID09
IHNhbnNTZXJpZkZhbWlseSAmJiBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkgPT0gYm9sZFdlaWdo
dFZhbHVlKCkgJiYgZm9udERlc2NyaXB0aW9uLnNjcmlwdCgpID09IFVTQ1JJUFRfS0FUQUtBTkFf
T1JfSElSQUdBTkEpIHsKLSAgICAgICAgICAgICAgICBvdmVycmlkZUZvbnREZXNjcmlwdGlvbiA9
IGZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgICAgICAgICBvdmVycmlkZUZvbnREZXNjcmlwdGlv
bi0+c2V0V2VpZ2h0KEZvbnRTZWxlY3Rpb25WYWx1ZSg2MDApKTsKLSAgICAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb25Gb3JMb29rdXAgPSAmKm92ZXJyaWRlRm9udERlc2NyaXB0aW9uOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZmFtaWx5Rm9yTG9va3VwID0gKmdlbmVyaWNGYW1pbHlP
cHRpb25hbDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBpZiAocmVzb2x2ZUdlbmVyaWNGYW1p
bHlGaXJzdCkKLSAgICAgICAgcmVzb2x2ZUdlbmVyaWNGYW1pbHkoKTsKLSAgICBhdXRvKiBmYWNl
ID0gbV9jc3NGb250RmFjZVNldC0+Zm9udEZhY2UoZm9udERlc2NyaXB0aW9uRm9yTG9va3VwLT5m
b250U2VsZWN0aW9uUmVxdWVzdCgpLCBmYW1pbHlGb3JMb29rdXApOwotICAgIGlmIChmYWNlKSB7
Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2RvY3VtZW50KQot
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9h
ZCgqbV9kb2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCB0cnVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFjZS0+Zm9udFJhbmdlcygqZm9udERlc2NyaXB0aW9uRm9yTG9v
a3VwKTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QpCi0gICAg
ICAgIHJlc29sdmVHZW5lcmljRmFtaWx5KCk7Ci0gICAgYXV0byBmb250ID0gRm9udENhY2hlOjpz
aW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KCpmb250RGVzY3JpcHRpb25Gb3JMb29rdXAsIGZhbWls
eUZvckxvb2t1cCk7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewotICAgICAgICBpZiAobV9kb2N1bWVu
dCkKLSAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9h
ZCgqbV9kb2N1bWVudCwgZmFtaWx5Rm9yTG9va3VwLnN0cmluZygpLCAhIWZvbnQpOwotICAgIH0K
LSAgICByZXR1cm4gRm9udFJhbmdlcyB7IFdURk1vdmUoZm9udCkgfTsKLX0KLQotdm9pZCBDU1NG
b250U2VsZWN0b3I6OmNsZWFyRG9jdW1lbnQoKQotewotICAgIGlmICghbV9kb2N1bWVudCkgewot
ICAgICAgICBBU1NFUlQoIW1fYmVnaW5Mb2FkaW5nVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgICAg
IEFTU0VSVChtX2ZvbnRzVG9CZWdpbkxvYWRpbmcuaXNFbXB0eSgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fYmVnaW5Mb2FkaW5nVGltZXIuc3RvcCgpOwotCi0gICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXImIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9kb2N1bWVudC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKLSAgICBmb3IgKGF1dG8mIGZvbnRIYW5kbGUgOiBtX2ZvbnRzVG9C
ZWdpbkxvYWRpbmcpIHsKLSAgICAgICAgLy8gQmFsYW5jZXMgaW5jcmVtZW50UmVxdWVzdENvdW50
KCkgaW4gYmVnaW5Mb2FkaW5nRm9udFNvb24oKS4KLSAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuZGVjcmVtZW50UmVxdWVzdENvdW50KCpmb250SGFuZGxlKTsKLSAgICB9Ci0gICAgbV9mb250
c1RvQmVnaW5Mb2FkaW5nLmNsZWFyKCk7Ci0KLSAgICBtX2RvY3VtZW50ID0gbnVsbHB0cjsKLQot
ICAgIG1fY3NzRm9udEZhY2VTZXQtPmNsZWFyKCk7Ci0gICAgbV9jbGllbnRzLmNsZWFyKCk7Ci19
Ci0KLXZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRpbmdGb250U29vbihDYWNoZWRGb250
JiBmb250KQotewotICAgIGlmICghbV9kb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9mb250c1RvQmVnaW5Mb2FkaW5nLmFwcGVuZCgmZm9udCk7Ci0gICAgLy8gSW5jcmVtZW50IHRo
ZSByZXF1ZXN0IGNvdW50IG5vdywgaW4gb3JkZXIgdG8gcHJldmVudCBkaWRGaW5pc2hMb2FkIGZy
b20gYmVpbmcgZGlzcGF0Y2hlZAotICAgIC8vIGFmdGVyIHRoaXMgZm9udCBoYXMgYmVlbiByZXF1
ZXN0ZWQgYnV0IGJlZm9yZSBpdCBiZWdhbiBsb2FkaW5nLiBCYWxhbmNlZCBieQotICAgIC8vIGRl
Y3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9hZFRpbWVyRmlyZWQoKSBhbmQgaW4gY2xl
YXJEb2N1bWVudCgpLgotICAgIG1fZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuaW5j
cmVtZW50UmVxdWVzdENvdW50KGZvbnQpOwotCi0gICAgbV9iZWdpbkxvYWRpbmdUaW1lci5zdGFy
dE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZFRpbWVy
RmlyZWQoKQotewotICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250Pj4g
Zm9udHNUb0JlZ2luTG9hZGluZzsKLSAgICBmb250c1RvQmVnaW5Mb2FkaW5nLnN3YXAobV9mb250
c1RvQmVnaW5Mb2FkaW5nKTsKLQotICAgIC8vIENTU0ZvbnRTZWxlY3RvciBjb3VsZCBnZXQgZGVs
ZXRlZCB2aWEgYmVnaW5Mb2FkSWZOZWVkZWQoKSBvciBsb2FkRG9uZSgpIHVubGVzcyBwcm90ZWN0
ZWQuCi0gICAgUmVmPENTU0ZvbnRTZWxlY3Rvcj4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0KLSAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2RvY3VtZW50
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwotICAgIGZvciAoYXV0byYgZm9udEhhbmRsZSA6IGZv
bnRzVG9CZWdpbkxvYWRpbmcpIHsKLSAgICAgICAgZm9udEhhbmRsZS0+YmVnaW5Mb2FkSWZOZWVk
ZWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwotICAgICAgICAvLyBCYWxhbmNlcyBpbmNyZW1lbnRS
ZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxvYWRpbmdGb250U29vbigpLgotICAgICAgICBjYWNoZWRS
ZXNvdXJjZUxvYWRlci5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKmZvbnRIYW5kbGUpOwotICAgIH0K
LSAgICAvLyBFbnN1cmUgdGhhdCBpZiB0aGUgcmVxdWVzdCBjb3VudCByZWFjaGVzIHplcm8sIHRo
ZSBmcmFtZSBsb2FkZXIgd2lsbCBrbm93IGFib3V0IGl0LgotICAgIC8vIE5ldyBmb250IGxvYWRz
IG1heSBiZSB0cmlnZ2VyZWQgYnkgbGF5b3V0IGFmdGVyIHRoZSBkb2N1bWVudCBsb2FkIGlzIGNv
bXBsZXRlIGJ1dCBiZWZvcmUgd2UgaGF2ZSBkaXNwYXRjaGVkCi0gICAgLy8gZGlkRmluaXNoTG9h
ZGluZyBmb3IgdGhlIGZyYW1lLiBNYWtlIHN1cmUgdGhlIGRlbGVnYXRlIGlzIGFsd2F5cyBkaXNw
YXRjaGVkIGJ5IGNoZWNraW5nIGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fZG9jdW1lbnQgJiYgbV9k
b2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCku
Y2hlY2tMb2FkQ29tcGxldGUoKTsKLSAgICBjYWNoZWRSZXNvdXJjZUxvYWRlci5sb2FkRG9uZShM
b2FkQ29tcGxldGlvblR5cGU6OkZpbmlzaCk7Ci19Ci0KLQotc2l6ZV90IENTU0ZvbnRTZWxlY3Rv
cjo6ZmFsbGJhY2tGb250Q291bnQoKQotewotICAgIGlmICghbV9kb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9kb2N1bWVudC0+c2V0dGluZ3MoKS5mb250RmFsbGJh
Y2tQcmVmZXJzUGljdG9ncmFwaHMoKSA/IDEgOiAwOwotfQotCi1SZWZQdHI8Rm9udD4gQ1NTRm9u
dFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgc2l6ZV90IGluZGV4KQotewotICAgIEFTU0VSVF9VTlVTRUQoaW5kZXgsICFpbmRl
eCk7Ci0KLSAgICBpZiAoIW1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgaWYgKCFtX2RvY3VtZW50LT5zZXR0aW5ncygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dy
YXBocygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvJiBwaWN0b2dyYXBoRm9u
dEZhbWlseSA9IG1fZG9jdW1lbnQtPnNldHRpbmdzKCkucGljdG9ncmFwaEZvbnRGYW1pbHkoKTsK
LSAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9u
dERlc2NyaXB0aW9uLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7Ci0gICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkK
LSAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCptX2Rv
Y3VtZW50LCBwaWN0b2dyYXBoRm9udEZhbWlseS5zdHJpbmcoKSwgISFmb250KTsKLSAgICAKLSAg
ICByZXR1cm4gZm9udDsKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+c2V0dGluZ3MoKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IDJkOTEyMmQ3NTYzMTI3MTBl
OGRmMDI4NGIzZWMwMzYwNDY2YjFhOWIuLjlhMjA5MTgwMDQxZDMxYTcyZWRhMTcwZGNjNDZmZTA3
NjU3OWE1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTI4LDkgKzI4
LDcgQEAKICNpbmNsdWRlICJDU1NGb250RmFjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU2V0
LmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJGb250Lmgi
Ci0jaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJGb250U2VsZWN0b3JCYXNlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM5LDg2ICszNywzMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU0ZvbnRGYWNlUnVsZTsKLWNsYXNzIENT
U1ByaW1pdGl2ZVZhbHVlOwotY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2U7Ci1jbGFzcyBDU1NW
YWx1ZUxpc3Q7Ci1jbGFzcyBDYWNoZWRGb250OwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBTdHls
ZVJ1bGVGb250RmFjZTsKIAotY2xhc3MgQ1NTRm9udFNlbGVjdG9yIGZpbmFsIDogcHVibGljIEZv
bnRTZWxlY3RvciwgcHVibGljIENTU0ZvbnRGYWNlU2V0Q2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8Q1NTRm9udFNlbGVjdG9yPiB7CitjbGFzcyBDU1NGb250U2VsZWN0b3IgZmluYWwgOiBw
dWJsaWMgRm9udFNlbGVjdG9yQmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxDU1NGb250
U2VsZWN0b3I+IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDU1NGb250U2VsZWN0b3IoZG9jdW1lbnQpKTsKICAgICB9Ci0gICAg
dmlydHVhbCB+Q1NTRm9udFNlbGVjdG9yKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgdmVyc2lvbigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQotICAgIHVuc2lnbmVkIHVuaXF1ZUlk
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV91bmlxdWVJZDsgfQogCi0gICAgRm9udFJhbmdlcyBm
b250UmFuZ2VzRm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJp
bmcmKSBmaW5hbDsKLSAgICBzaXplX3QgZmFsbGJhY2tGb250Q291bnQoKSBmaW5hbDsKLSAgICBS
ZWZQdHI8Rm9udD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90
KSBmaW5hbDsKLQotICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwotICAgIHZvaWQgZW1wdHlDYWNo
ZXMoKTsKLSAgICB2b2lkIGJ1aWxkU3RhcnRlZCgpOwotICAgIHZvaWQgYnVpbGRDb21wbGV0ZWQo
KTsKLQotICAgIHZvaWQgYWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBp
c0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKLQotICAgIHZvaWQgZm9u
dExvYWRlZCgpOwotICAgIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSBmaW5hbDsKLQotICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotCi0gICAgdm9pZCByZWdpc3RlckZvckludmFsaWRhdGlv
bkNhbGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmKSBmaW5hbDsKLSAgICB2b2lkIHVucmVnaXN0
ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgZmluYWw7Ci0K
LSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LmdldCgp
OyB9Ci0KLSAgICB2b2lkIGJlZ2luTG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQmKTsKKyAgICBi
b29sIGlzQ1NTRm9udFNlbGVjdG9yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgRm9udEZhY2VTZXQqIG9wdGlvbmFsRm9udEZhY2VTZXQoKTsKICAgICBGb250RmFjZVNl
dCYgZm9udEZhY2VTZXQoKTsKIAotICAgIHZvaWQgaW5jcmVtZW50SXNDb21wdXRpbmdSb290U3R5
bGVGb250KCkgeyArK21fY29tcHV0aW5nUm9vdFN0eWxlRm9udENvdW50OyB9Ci0gICAgdm9pZCBk
ZWNyZW1lbnRJc0NvbXB1dGluZ1Jvb3RTdHlsZUZvbnQoKSB7IC0tbV9jb21wdXRpbmdSb290U3R5
bGVGb250Q291bnQ7IH0KKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50LmdldCgpOyB9CisKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVz
b3VyY2VMb2FkZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGlu
Z3MoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDU1NGb250U2Vs
ZWN0b3IoRG9jdW1lbnQmKTsKIAotICAgIHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFj
a3MoKTsKLQotICAgIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGlu
Zyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5
KSBmaW5hbDsKLQotICAgIHZvaWQgZm9udE1vZGlmaWVkKCkgZmluYWw7Ci0KLSAgICB2b2lkIGJl
Z2luTG9hZFRpbWVyRmlyZWQoKTsKLQotICAgIHN0cnVjdCBQZW5kaW5nRm9udEZhY2VSdWxlIHsK
LSAgICAgICAgU3R5bGVSdWxlRm9udEZhY2UmIHN0eWxlUnVsZUZvbnRGYWNlOwotICAgICAgICBi
b29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWU7Ci0gICAgfTsKLSAg
ICBWZWN0b3I8UGVuZGluZ0ZvbnRGYWNlUnVsZT4gbV9zdGFnaW5nQXJlYTsKLQogICAgIFdlYWtQ
dHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7Ci0gICAgUmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRG
YWNlU2V0OwotICAgIFJlZjxDU1NGb250RmFjZVNldD4gbV9jc3NGb250RmFjZVNldDsKLSAgICBI
YXNoU2V0PEZvbnRTZWxlY3RvckNsaWVudCo+IG1fY2xpZW50czsKLQotICAgIFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250Pj4gbV9mb250c1RvQmVnaW5Mb2FkaW5nOwotICAg
IEhhc2hTZXQ8UmVmUHRyPENTU0ZvbnRGYWNlPj4gbV9jc3NDb25uZWN0aW9uc1Bvc3NpYmx5VG9S
ZW1vdmU7Ci0gICAgSGFzaFNldDxSZWZQdHI8U3R5bGVSdWxlRm9udEZhY2U+PiBtX2Nzc0Nvbm5l
Y3Rpb25zRW5jb3VudGVyZWREdXJpbmdCdWlsZDsKLSAgICBUaW1lciBtX2JlZ2luTG9hZGluZ1Rp
bWVyOwogCi0gICAgdW5zaWduZWQgbV91bmlxdWVJZDsKLSAgICB1bnNpZ25lZCBtX3ZlcnNpb247
Ci0gICAgdW5zaWduZWQgbV9jb21wdXRpbmdSb290U3R5bGVGb250Q291bnQgeyAwIH07Ci0gICAg
Ym9vbCBtX2NyZWF0aW5nRm9udCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2J1aWxkSXNVbmRlcndh
eSB7IGZhbHNlIH07CisgICAgUmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRGYWNlU2V0OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZPTlRf
U0VMRUNUT1IoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yLCBpc0NTU0ZvbnRTZWxlY3RvcigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZS5jcHAKaW5kZXggYTJlOTNlOGVkY2E5NWZhMmRlYTYyODM5MTVjYmVl
MDk5NTUwZWI0OS4uMjQxMzMwMzE5MGJiN2U2MmFhMGUzYmYwMDBjNmMxMTRkZjI3YjU4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2UuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VTb3VyY2UuaCIK
ICNpbmNsdWRlICJDU1NGb250RmVhdHVyZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJz
ZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCkBAIC0zNywxMCAr
MzgsMTIgQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJET01Qcm9taXNl
UHJveHkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3RvckJh
c2UuaCIKICNpbmNsdWRlICJGb250VmFyaWFudEJ1aWxkZXIuaCIKICNpbmNsdWRlICJKU0ZvbnRG
YWNlLmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgi
CisjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyVmll
dy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KQEAgLTEyNSw3ICsx
MjgsNyBAQCBSZWY8Rm9udEZhY2U+IEZvbnRGYWNlOjpjcmVhdGUoQ1NTRm9udEZhY2UmIGZhY2Up
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udEZhY2UoZmFjZSkpOwogfQogCi1Gb250RmFj
ZTo6Rm9udEZhY2UoQ1NTRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IpCitGb250RmFjZTo6Rm9u
dEZhY2UoRm9udFNlbGVjdG9yQmFzZSYgZm9udFNlbGVjdG9yKQogICAgIDogbV9iYWNraW5nKENT
U0ZvbnRGYWNlOjpjcmVhdGUoJmZvbnRTZWxlY3RvciwgbnVsbHB0ciwgdGhpcykpCiAgICAgLCBt
X2xvYWRlZFByb21pc2UobWFrZVVuaXF1ZVJlZjxMb2FkZWRQcm9taXNlPigqdGhpcywgJkZvbnRG
YWNlOjpsb2FkZWRQcm9taXNlUmVzb2x2ZSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCmluZGV4IGRj
N2IxYWM2OWJjNTAzMjNiNzc2ZTllMWVkODgwMmE0YWMxMWEwZTcuLjdhOGVhZTAyOGIxYTllMDQw
Y2U1Y2FjZDU0ZmViYTlkMmI1MThmOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9G
b250RmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCkBAIC0zOSw2ICsz
OSw4IEBAIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBGb250U2VsZWN0b3JCYXNlOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiBjbGFz
cyBET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrOwogCiBjbGFzcyBGb250RmFjZSBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRGYWNlPiwgcHVibGljIENhbk1ha2VXZWFrUHRy
PEZvbnRGYWNlPiwgcHJpdmF0ZSBDU1NGb250RmFjZTo6Q2xpZW50IHsKQEAgLTk1LDcgKzk3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgZGVyZWYoKSBmaW5hbCB7IFJlZkNvdW50ZWQ6OmRlcmVmKCk7
IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBGb250RmFjZShDU1NGb250U2VsZWN0b3ImKTsK
KyAgICBleHBsaWNpdCBGb250RmFjZShGb250U2VsZWN0b3JCYXNlJik7CiAgICAgZXhwbGljaXQg
Rm9udEZhY2UoQ1NTRm9udEZhY2UmKTsKIAogICAgIC8vIENhbGxiYWNrIGZvciBMb2FkZWRQcm9t
aXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRTZWxlY3RvckJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRTZWxlY3RvckJhc2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2
NDU5MmViMjEzN2Y2ZDgzYjZhYzE0YzhjNDU4Nzc4NDQyNDkzMjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFNlbGVjdG9yQmFzZS5jcHAKQEAgLTAsMCArMSw0Mjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9u
dFNlbGVjdG9yQmFzZS5oIgorCisjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKKyNpbmNsdWRlICJD
U1NGb250RmFjZVNvdXJjZS5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKKyNpbmNsdWRl
ICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NTZWdtZW50ZWRGb250RmFj
ZS5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxp
c3QuaCIKKyNpbmNsdWRlICJDYWNoZWRGb250LmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RmFjZS5oIgorI2luY2x1ZGUgIkZvbnRG
YWNlU2V0LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJPZmZzY3JlZW5Gb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJRdWlya3MuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dGllcy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZVJ1bGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB1bnNpZ25lZCBmb250
U2VsZWN0b3JJZDsKKworRm9udFNlbGVjdG9yQmFzZTo6Rm9udFNlbGVjdG9yQmFzZSgpCisgICAg
OiBtX2Nzc0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUodGhpcykpCisgICAgLCBt
X2JlZ2luTG9hZGluZ1RpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkNTU0ZvbnRTZWxl
Y3Rvcjo6YmVnaW5Mb2FkVGltZXJGaXJlZCkKKyAgICAsIG1fdW5pcXVlSWQoKytmb250U2VsZWN0
b3JJZCkKKyAgICAsIG1fdmVyc2lvbigwKQoreworICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
YWRkQ2xpZW50KCp0aGlzKTsKKyAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRDbGllbnQoKnRoaXMp
OworICAgIExPRyhGb250cywgIiVzICVwIGN0b3IiLCBpc0NTU0ZvbnRTZWxlY3RvcigpID8gIkNT
U0ZvbnRTZWxlY3RvciIgOiAiT2Zmc2NyZWVuRm9udFNlbGVjdG9yIiwgdGhpcyk7Cit9CisKK0Zv
bnRTZWxlY3RvckJhc2U6On5Gb250U2VsZWN0b3JCYXNlKCkKK3sKKyAgICBMT0coRm9udHMsICIl
cyAlcCBkdG9yIiwgaXNDU1NGb250U2VsZWN0b3IoKSA/ICJDU1NGb250U2VsZWN0b3IiIDogIk9m
ZnNjcmVlbkZvbnRTZWxlY3RvciIsIHRoaXMpOworCisgICAgZGVzdHJveSgpOworICAgIG1fY3Nz
Rm9udEZhY2VTZXQtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisgICAgRm9udENhY2hlOjpzaW5nbGV0
b24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOworfQorCitib29sIEZvbnRTZWxlY3RvckJhc2U6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9jc3NGb250RmFjZVNldC0+ZmFjZUNvdW50
KCk7Cit9CisKK3ZvaWQgRm9udFNlbGVjdG9yQmFzZTo6ZW1wdHlDYWNoZXMoKQoreworICAgIG1f
Y3NzRm9udEZhY2VTZXQtPmVtcHR5Q2FjaGVzKCk7Cit9CisKK3ZvaWQgRm9udFNlbGVjdG9yQmFz
ZTo6YnVpbGRTdGFydGVkKCkKK3sKKyAgICBtX2J1aWxkSXNVbmRlcndheSA9IHRydWU7CisgICAg
bV9jc3NGb250RmFjZVNldC0+cHVyZ2UoKTsKKyAgICArK21fdmVyc2lvbjsKKworICAgIEFTU0VS
VChtX2Nzc0Nvbm5lY3Rpb25zUG9zc2libHlUb1JlbW92ZS5pc0VtcHR5KCkpOworICAgIEFTU0VS
VChtX2Nzc0Nvbm5lY3Rpb25zRW5jb3VudGVyZWREdXJpbmdCdWlsZC5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChtX3N0YWdpbmdBcmVhLmlzRW1wdHkoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2Nzc0ZvbnRGYWNlU2V0LT5mYWNlQ291bnQoKTsgKytpKSB7CisgICAgICAgIENTU0Zv
bnRGYWNlJiBmYWNlID0gbV9jc3NGb250RmFjZVNldC5nZXQoKVtpXTsKKyAgICAgICAgaWYgKGZh
Y2UuY3NzQ29ubmVjdGlvbigpKQorICAgICAgICAgICAgbV9jc3NDb25uZWN0aW9uc1Bvc3NpYmx5
VG9SZW1vdmUuYWRkKCZmYWNlKTsKKyAgICB9Cit9CisKK3ZvaWQgRm9udFNlbGVjdG9yQmFzZTo6
YnVpbGRDb21wbGV0ZWQoKQoreworICAgIGlmICghbV9idWlsZElzVW5kZXJ3YXkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fYnVpbGRJc1VuZGVyd2F5ID0gZmFsc2U7CisKKyAgICAvLyBTb21l
IGZvbnQgZmFjZXMgd2VyZW4ndCByZS1hZGRlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuCisg
ICAgZm9yIChhdXRvJiBmYWNlIDogbV9jc3NDb25uZWN0aW9uc1Bvc3NpYmx5VG9SZW1vdmUpIHsK
KyAgICAgICAgYXV0byogY29ubmVjdGlvbiA9IGZhY2UtPmNzc0Nvbm5lY3Rpb24oKTsKKyAgICAg
ICAgQVNTRVJUKGNvbm5lY3Rpb24pOworICAgICAgICBpZiAoIW1fY3NzQ29ubmVjdGlvbnNFbmNv
dW50ZXJlZER1cmluZ0J1aWxkLmNvbnRhaW5zKGNvbm5lY3Rpb24pKQorICAgICAgICAgICAgbV9j
c3NGb250RmFjZVNldC0+cmVtb3ZlKCpmYWNlKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBtX3N0YWdpbmdBcmVhKQorICAgICAgICBhZGRGb250RmFjZVJ1bGUoaXRlbS5zdHlsZVJ1
bGVGb250RmFjZSwgaXRlbS5pc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KTsKKyAgICBtX2Nzc0Nvbm5lY3Rpb25zRW5jb3VudGVyZWREdXJpbmdCdWlsZC5jbGVhcigpOwor
ICAgIG1fc3RhZ2luZ0FyZWEuY2xlYXIoKTsKKyAgICBtX2Nzc0Nvbm5lY3Rpb25zUG9zc2libHlU
b1JlbW92ZS5jbGVhcigpOworfQorCit2b2lkIEZvbnRTZWxlY3RvckJhc2U6OmFkZEZvbnRGYWNl
UnVsZShTdHlsZVJ1bGVGb250RmFjZSYgZm9udEZhY2VSdWxlLCBib29sIGlzSW5pdGlhdGluZ0Vs
ZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpCit7CisgICAgaWYgKG1fYnVpbGRJc1VuZGVyd2F5
KSB7CisgICAgICAgIG1fY3NzQ29ubmVjdGlvbnNFbmNvdW50ZXJlZER1cmluZ0J1aWxkLmFkZCgm
Zm9udEZhY2VSdWxlKTsKKyAgICAgICAgbV9zdGFnaW5nQXJlYS5hcHBlbmQoe2ZvbnRGYWNlUnVs
ZSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZX0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZSA9IGZvbnRG
YWNlUnVsZS5wcm9wZXJ0aWVzKCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFtaWx5ID0g
c3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOworICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gZm9udFN0eWxlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250V2VpZ2h0ID0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gZm9udFN0cmV0Y2ggPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFN0cmV0Y2gpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNyYyk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB1
bmljb2RlUmFuZ2UgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29k
ZVJhbmdlKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGZlYXR1cmVTZXR0aW5ncyA9IHN0eWxlLmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmVhdHVyZVNldHRpbmdzKTsKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhcmlhbnRMaWdhdHVyZXMgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXMpOworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmFyaWFudFBvc2l0aW9uID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50UG9zaXRpb24pOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFyaWFudENhcHMg
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzKTsK
KyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhcmlhbnROdW1lcmljID0gc3R5bGUuZ2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TnVtZXJpYyk7CisgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YXJpYW50QWx0ZXJuYXRlcyA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlGb250VmFyaWFudEFsdGVybmF0ZXMpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFyaWFu
dEVhc3RBc2lhbiA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFy
aWFudEVhc3RBc2lhbik7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBsb2FkaW5nQmVoYXZpb3IgPSBz
dHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udERpc3BsYXkpOworICAgIGlm
ICghaXM8Q1NTVmFsdWVMaXN0Pihmb250RmFtaWx5KSB8fCAhaXM8Q1NTVmFsdWVMaXN0PihzcmMp
IHx8ICh1bmljb2RlUmFuZ2UgJiYgIWlzPENTU1ZhbHVlTGlzdD4oKnVuaWNvZGVSYW5nZSkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDU1NWYWx1ZUxpc3QmIGZhbWlseUxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCpmb250RmFtaWx5KTsKKyAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1ZhbHVlTGlzdCogcmFuZ2VMaXN0ID0gZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0Pih1bmljb2RlUmFuZ2UuZ2V0KCkpOworCisgICAgQ1NTVmFsdWVM
aXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigqc3JjKTsKKyAgICBpZiAoIXNy
Y0xpc3QubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNldEZvclNjb3BlPGJvb2w+
IGNyZWF0aW5nRm9udChtX2NyZWF0aW5nRm9udCwgdHJ1ZSk7CisgICAgUmVmPENTU0ZvbnRGYWNl
PiBmb250RmFjZSA9IENTU0ZvbnRGYWNlOjpjcmVhdGUodGhpcywgJmZvbnRGYWNlUnVsZSk7CisK
KyAgICBpZiAoIWZvbnRGYWNlLT5zZXRGYW1pbGllcygqZm9udEZhbWlseSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZm9udFN0eWxlKQorICAgICAgICBmb250RmFjZS0+c2V0U3R5bGUoKmZv
bnRTdHlsZSk7CisgICAgaWYgKGZvbnRXZWlnaHQpCisgICAgICAgIGZvbnRGYWNlLT5zZXRXZWln
aHQoKmZvbnRXZWlnaHQpOworICAgIGlmIChmb250U3RyZXRjaCkKKyAgICAgICAgZm9udEZhY2Ut
PnNldFN0cmV0Y2goKmZvbnRTdHJldGNoKTsKKyAgICBpZiAocmFuZ2VMaXN0ICYmICFmb250RmFj
ZS0+c2V0VW5pY29kZVJhbmdlKCpyYW5nZUxpc3QpKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KHZhcmlhbnRMaWdhdHVyZXMgJiYgIWZvbnRGYWNlLT5zZXRWYXJpYW50TGlnYXR1cmVzKCp2YXJp
YW50TGlnYXR1cmVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh2YXJpYW50UG9zaXRpb24g
JiYgIWZvbnRGYWNlLT5zZXRWYXJpYW50UG9zaXRpb24oKnZhcmlhbnRQb3NpdGlvbikpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAodmFyaWFudENhcHMgJiYgIWZvbnRGYWNlLT5zZXRWYXJpYW50
Q2FwcygqdmFyaWFudENhcHMpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHZhcmlhbnROdW1l
cmljICYmICFmb250RmFjZS0+c2V0VmFyaWFudE51bWVyaWMoKnZhcmlhbnROdW1lcmljKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICh2YXJpYW50QWx0ZXJuYXRlcyAmJiAhZm9udEZhY2UtPnNl
dFZhcmlhbnRBbHRlcm5hdGVzKCp2YXJpYW50QWx0ZXJuYXRlcykpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAodmFyaWFudEVhc3RBc2lhbiAmJiAhZm9udEZhY2UtPnNldFZhcmlhbnRFYXN0QXNp
YW4oKnZhcmlhbnRFYXN0QXNpYW4pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZlYXR1cmVT
ZXR0aW5ncykKKyAgICAgICAgZm9udEZhY2UtPnNldEZlYXR1cmVTZXR0aW5ncygqZmVhdHVyZVNl
dHRpbmdzKTsKKyAgICBpZiAobG9hZGluZ0JlaGF2aW9yKQorICAgICAgICBmb250RmFjZS0+c2V0
TG9hZGluZ0JlaGF2aW9yKCpsb2FkaW5nQmVoYXZpb3IpOworCisgICAgaWYgKGlzQ1NTRm9udFNl
bGVjdG9yKCkpCisgICAgICAgIENTU0ZvbnRGYWNlOjphcHBlbmRTb3VyY2VzKGZvbnRGYWNlLCBz
cmNMaXN0LCBkb3duY2FzdDxDU1NGb250U2VsZWN0b3I+KCp0aGlzKS5kb2N1bWVudCgpLCBpc0lu
aXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKyAgICBlbHNlIGlmIChpc09m
ZnNjcmVlbkZvbnRTZWxlY3RvcigpKQorICAgICAgICBDU1NGb250RmFjZTo6YXBwZW5kU291cmNl
cyhmb250RmFjZSwgc3JjTGlzdCwgZG93bmNhc3Q8T2Zmc2NyZWVuRm9udFNlbGVjdG9yPigqdGhp
cykud29ya2VyR2xvYmFsU2NvcGUoKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hh
ZG93VHJlZSk7CisgICAgaWYgKGZvbnRGYWNlLT5jb21wdXRlRmFpbHVyZVN0YXRlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChSZWZQdHI8Q1NTRm9udEZhY2U+IGV4aXN0aW5nRmFjZSA9
IG1fY3NzRm9udEZhY2VTZXQtPmxvb2tVcEJ5Q1NTQ29ubmVjdGlvbihmb250RmFjZVJ1bGUpKSB7
CisgICAgICAgIC8vIFRoaXMgYWRvcHRpb24gaXMgZmFpcmx5IHN1YnRsZS4gU2NyaXB0IGNhbiB0
cmlnZ2VyIGEgcHVyZ2Ugb2YgbV9jc3NGb250RmFjZVNldCBhdCBhbnkgdGltZSwKKyAgICAgICAg
Ly8gd2hpY2ggd2lsbCBjYXVzZSB1cyB0byBqdXN0IHJlbHkgb24gdGhlIG1lbW9yeSBjYWNoZSB0
byByZXRhaW4gdGhlIGJ5dGVzIG9mIHRoZSBmaWxlIHRoZSBuZXh0CisgICAgICAgIC8vIHRpbWUg
d2UgYnVpbGQgdXAgdGhlIENTU0ZvbnRGYWNlU2V0LiBIb3dldmVyLCB3aGVuIHRoZSBDU1MgRm9u
dCBMb2FkaW5nIEFQSSBpcyBpbnZvbHZlZCwKKyAgICAgICAgLy8gdGhlIEZvbnRGYWNlIGFuZCBG
b250RmFjZVNldCBvYmplY3RzIG5lZWQgdG8gcmV0YWluIHN0YXRlLiBXZSBjcmVhdGUgdGhlIG5l
dyBDU1NGb250RmFjZSBvYmplY3QKKyAgICAgICAgLy8gd2hpbGUgdGhlIG9sZCBvbmUgaXMgc3Rp
bGwgaW4gc2NvcGUgc28gdGhhdCB0aGUgbWVtb3J5IGNhY2hlIHdpbGwgYmUgZm9yY2VkIHRvIHJl
dGFpbiB0aGUgYnl0ZXMKKyAgICAgICAgLy8gb2YgdGhlIHJlc291cmNlLiBUaGlzIG1lYW5zIHRo
YXQgdGhlIENhY2hlZEZvbnQgd2lsbCB0ZW1wb3JhcmlseSBoYXZlIHR3byBjbGllbnRzICh1bnRp
bCB0aGUKKyAgICAgICAgLy8gb2xkIENTU0ZvbnRGYWNlIGdvZXMgb3V0IG9mIHNjb3BlLCB3aGlj
aCBzaG91bGQgaGFwcGVuIGF0IHRoZSBlbmQgb2YgdGhpcyAiaWYiIGJsb2NrKS4gQmVjYXVzZQor
ICAgICAgICAvLyB0aGUgQ1NTRm9udEZhY2VTb3VyY2Ugb2JqZWN0cyB3aWxsIGluc3BlY3QgdGhl
aXIgQ2FjaGVkRm9udHMsIHRoZSBuZXcgQ1NTRm9udEZhY2UgaXMgc21hcnQgZW5vdWdoCisgICAg
ICAgIC8vIHRvIGVudGVyIHRoZSBjb3JyZWN0IHN0YXRlKCkgZHVyaW5nIHRoZSBuZXh0IHB1bXAo
KS4gVGhpcyBhcHByb2FjaCBvZiBtYWtpbmcgYSBuZXcgQ1NTRm9udEZhY2UgaXMKKyAgICAgICAg
Ly8gc2ltcGxlciB0aGFuIGNvbXB1dGluZyBhbmQgYXBwbHlpbmcgYSBkaWZmIG9mIHRoZSBTdHls
ZVByb3BlcnRpZXMuCisgICAgICAgIG1fY3NzRm9udEZhY2VTZXQtPnJlbW92ZSgqZXhpc3RpbmdG
YWNlKTsKKyAgICAgICAgaWYgKGF1dG8qIGV4aXN0aW5nV3JhcHBlciA9IGV4aXN0aW5nRmFjZS0+
ZXhpc3RpbmdXcmFwcGVyKCkpCisgICAgICAgICAgICBleGlzdGluZ1dyYXBwZXItPmFkb3B0KGZv
bnRGYWNlLmdldCgpKTsKKyAgICB9CisKKyAgICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGQoZm9udEZh
Y2UuZ2V0KCkpOworICAgICsrbV92ZXJzaW9uOworfQorCit2b2lkIEZvbnRTZWxlY3RvckJhc2U6
OnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYgY2xp
ZW50KQoreworICAgIG1fY2xpZW50cy5hZGQoJmNsaWVudCk7Cit9CisKK3ZvaWQgRm9udFNlbGVj
dG9yQmFzZTo6dW5yZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250U2VsZWN0b3JD
bGllbnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMucmVtb3ZlKCZjbGllbnQpOworfQorCit2
b2lkIEZvbnRTZWxlY3RvckJhc2U6OmRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCkKK3sK
KyAgICArK21fdmVyc2lvbjsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogY29weVRvVmVjdG9y
KG1fY2xpZW50cykpCisgICAgICAgIGNsaWVudC0+Zm9udHNOZWVkVXBkYXRlKCp0aGlzKTsKK30K
Kwordm9pZCBGb250U2VsZWN0b3JCYXNlOjpvcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERhdGFV
UkxMb2FkaW5nKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25z
dCBBdG9tU3RyaW5nJiBmYW1pbHlOYW1lKQoreworICAgIGNvbnN0IGF1dG8mIHNlZ21lbnRlZEZv
bnRGYWNlID0gbV9jc3NGb250RmFjZVNldC0+Zm9udEZhY2UoZGVzY3JpcHRpb24uZm9udFNlbGVj
dGlvblJlcXVlc3QoKSwgZmFtaWx5TmFtZSk7CisgICAgaWYgKCFzZWdtZW50ZWRGb250RmFjZSkK
KyAgICAgICAgcmV0dXJuOworICAgIGZvciAoYXV0byYgZmFjZSA6IHNlZ21lbnRlZEZvbnRGYWNl
LT5jb25zdGl0dWVudEZhY2VzKCkpCisgICAgICAgIGZhY2UtPm9wcG9ydHVuaXN0aWNhbGx5U3Rh
cnRGb250RGF0YVVSTExvYWRpbmcoKnRoaXMpOworfQorCit2b2lkIEZvbnRTZWxlY3RvckJhc2U6
OmZvbnRMb2FkZWQoKQoreworICAgIGRpc3BhdGNoSW52YWxpZGF0aW9uQ2FsbGJhY2tzKCk7Cit9
CisKK3ZvaWQgRm9udFNlbGVjdG9yQmFzZTo6Zm9udE1vZGlmaWVkKCkKK3sKKyAgICBpZiAoIW1f
Y3JlYXRpbmdGb250ICYmICFtX2J1aWxkSXNVbmRlcndheSkKKyAgICAgICAgZGlzcGF0Y2hJbnZh
bGlkYXRpb25DYWxsYmFja3MoKTsKK30KKwordm9pZCBGb250U2VsZWN0b3JCYXNlOjpmb250Q2Fj
aGVJbnZhbGlkYXRlZCgpCit7CisgICAgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsK
K30KKworc3RhdGljIE9wdGlvbmFsPEF0b21TdHJpbmc+IHJlc29sdmVHZW5lcmljRmFtaWx5KEZv
bnRTZWxlY3RvckJhc2UqIGZvbnRTZWxlY3RvciwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseU5hbWUpCit7CisgICAgYXV0byBw
bGF0Zm9ybVJlc3VsdCA9IEZvbnREZXNjcmlwdGlvbjo6cGxhdGZvcm1SZXNvbHZlR2VuZXJpY0Zh
bWlseShmb250RGVzY3JpcHRpb24uc2NyaXB0KCksIGZvbnREZXNjcmlwdGlvbi5sb2NhbGUoKSwg
ZmFtaWx5TmFtZSk7CisgICAgaWYgKCFwbGF0Zm9ybVJlc3VsdC5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuIHBsYXRmb3JtUmVzdWx0OworCisgICAgaWYgKGZvbnRTZWxlY3Rvci0+ZGVzdHJveWVk
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBVU2NyaXB0Q29kZSBzY3Jp
cHQgPSBmb250RGVzY3JpcHRpb24uc2NyaXB0KCk7CisgICAgaWYgKGZhbWlseU5hbWUgPT0gc2Vy
aWZGYW1pbHkpCisgICAgICAgIHJldHVybiBmb250U2VsZWN0b3ItPnNldHRpbmdzKCkuc2VyaWZG
b250RmFtaWx5KHNjcmlwdCk7CisgICAgaWYgKGZhbWlseU5hbWUgPT0gc2Fuc1NlcmlmRmFtaWx5
KQorICAgICAgICByZXR1cm4gZm9udFNlbGVjdG9yLT5zZXR0aW5ncygpLnNhbnNTZXJpZkZvbnRG
YW1pbHkoc2NyaXB0KTsKKyAgICBpZiAoZmFtaWx5TmFtZSA9PSBjdXJzaXZlRmFtaWx5KQorICAg
ICAgICByZXR1cm4gZm9udFNlbGVjdG9yLT5zZXR0aW5ncygpLmN1cnNpdmVGb250RmFtaWx5KHNj
cmlwdCk7CisgICAgaWYgKGZhbWlseU5hbWUgPT0gZmFudGFzeUZhbWlseSkKKyAgICAgICAgcmV0
dXJuIGZvbnRTZWxlY3Rvci0+c2V0dGluZ3MoKS5mYW50YXN5Rm9udEZhbWlseShzY3JpcHQpOwor
ICAgIGlmIChmYW1pbHlOYW1lID09IG1vbm9zcGFjZUZhbWlseSkKKyAgICAgICAgcmV0dXJuIGZv
bnRTZWxlY3Rvci0+c2V0dGluZ3MoKS5maXhlZEZvbnRGYW1pbHkoc2NyaXB0KTsKKyAgICBpZiAo
ZmFtaWx5TmFtZSA9PSBwaWN0b2dyYXBoRmFtaWx5KQorICAgICAgICByZXR1cm4gZm9udFNlbGVj
dG9yLT5zZXR0aW5ncygpLnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7CisgICAgaWYgKGZh
bWlseU5hbWUgPT0gc3RhbmRhcmRGYW1pbHkpCisgICAgICAgIHJldHVybiBmb250U2VsZWN0b3It
PnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCk7CisKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCitGb250UmFuZ2VzIEZvbnRTZWxlY3RvckJhc2U6OmZvbnRSYW5nZXNG
b3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0
b21TdHJpbmcmIGZhbWlseU5hbWUpCit7CisgICAgLy8gSWYgdGhpcyBBU1NFUlQoKSBmaXJlcywg
aXQgdXN1YWxseSBtZWFucyB5b3UgZm9yZ290IGEgZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRl
ZCgpIHNvbWV3aGVyZS4KKyAgICBBU1NFUlQoIW1fYnVpbGRJc1VuZGVyd2F5IHx8IG1fY29tcHV0
aW5nUm9vdFN0eWxlRm9udENvdW50KTsKKworICAgIC8vIEZJWE1FOiBUaGUgc3BlYyAoYW5kIEZp
cmVmb3gpIHNheXMgdXNlciBzcGVjaWZpZWQgZ2VuZXJpYyBmYW1pbGllcyAoc2Fucy1zZXJpZiBl
dGMuKSBzaG91bGQgYmUgcmVzb2x2ZWQgYmVmb3JlIHRoZSBAZm9udC1mYWNlIGxvb2t1cCB0b28u
CisgICAgYm9vbCByZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0ID0gZmFtaWx5TmFtZSA9PSBzdGFu
ZGFyZEZhbWlseTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGlzQ1NTRm9udFNlbGVjdG9y
KCkgPyBkb3duY2FzdDxDU1NGb250U2VsZWN0b3I+KCp0aGlzKS5kb2N1bWVudCgpIDogbnVsbHB0
cjsKKworICAgIEF0b21TdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gZmFtaWx5TmFtZTsKKyAgICBP
cHRpb25hbDxGb250RGVzY3JpcHRpb24+IG92ZXJyaWRlRm9udERlc2NyaXB0aW9uOworICAgIGNv
bnN0IEZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uRm9yTG9va3VwID0gJmZvbnREZXNj
cmlwdGlvbjsKKyAgICBhdXRvIHJlc29sdmVHZW5lcmljRmFtaWx5ID0gWyZdKCkgeworICAgICAg
ICBpZiAoYXV0byBnZW5lcmljRmFtaWx5T3B0aW9uYWwgPSBXZWJDb3JlOjpyZXNvbHZlR2VuZXJp
Y0ZhbWlseSh0aGlzLCBmb250RGVzY3JpcHRpb24sIGZhbWlseU5hbWUpKSB7CisgICAgICAgICAg
ICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnF1aXJrcygpLnNob3VsZExpZ2h0ZW5KYXBhbmVz
ZUJvbGRTYW5zU2VyaWYoKSAmJiBmYW1pbHlGb3JMb29rdXAgPT0gc2Fuc1NlcmlmRmFtaWx5ICYm
IGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSA9PSBib2xkV2VpZ2h0VmFsdWUoKSAmJiBmb250RGVz
Y3JpcHRpb24uc2NyaXB0KCkgPT0gVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSkgeworICAg
ICAgICAgICAgICAgIG92ZXJyaWRlRm9udERlc2NyaXB0aW9uID0gZm9udERlc2NyaXB0aW9uOwor
ICAgICAgICAgICAgICAgIG92ZXJyaWRlRm9udERlc2NyaXB0aW9uLT5zZXRXZWlnaHQoRm9udFNl
bGVjdGlvblZhbHVlKDYwMCkpOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbkZvckxv
b2t1cCA9ICYqb3ZlcnJpZGVGb250RGVzY3JpcHRpb247CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmYW1pbHlGb3JMb29rdXAgPSAqZ2VuZXJpY0ZhbWlseU9wdGlvbmFsOworICAgICAgICB9
CisgICAgfTsKKworICAgIGlmIChyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQorICAgICAgICBy
ZXNvbHZlR2VuZXJpY0ZhbWlseSgpOworICAgIGF1dG8qIGZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0
LT5mb250RmFjZShmb250RGVzY3JpcHRpb25Gb3JMb29rdXAtPmZvbnRTZWxlY3Rpb25SZXF1ZXN0
KCksIGZhbWlseUZvckxvb2t1cCk7CisgICAgaWYgKGZhY2UpIHsKKyAgICAgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICAgICAgaWYgKGRvY3VtZW50KQorICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZv
ckxvb2t1cC5zdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhY2Ut
PmZvbnRSYW5nZXMoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCk7CisgICAgfQorCisgICAgaWYg
KCFyZXNvbHZlR2VuZXJpY0ZhbWlseUZpcnN0KQorICAgICAgICByZXNvbHZlR2VuZXJpY0ZhbWls
eSgpOworICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWls
eSgqZm9udERlc2NyaXB0aW9uRm9yTG9va3VwLCBmYW1pbHlGb3JMb29rdXApOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50KQorICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKCpkb2N1bWVudCwgZmFtaWx5Rm9yTG9v
a3VwLnN0cmluZygpLCAhIWZvbnQpOworICAgIH0KKyAgICByZXR1cm4gRm9udFJhbmdlcyB7IFdU
Rk1vdmUoZm9udCkgfTsKK30KKwordm9pZCBGb250U2VsZWN0b3JCYXNlOjpkZXN0cm95KCkKK3sK
KyAgICBpZiAobV9kZXN0cm95ZWQpIHsKKyAgICAgICAgQVNTRVJUKCFtX2JlZ2luTG9hZGluZ1Rp
bWVyLmlzQWN0aXZlKCkpOworICAgICAgICBBU1NFUlQobV9mb250c1RvQmVnaW5Mb2FkaW5nLmlz
RW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2JlZ2luTG9hZGluZ1Rp
bWVyLnN0b3AoKTsKKworICAgIGZvciAoYXV0byYgZm9udEhhbmRsZSA6IG1fZm9udHNUb0JlZ2lu
TG9hZGluZykgeworICAgICAgICAvLyBCYWxhbmNlcyBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKSBp
biBiZWdpbkxvYWRpbmdGb250U29vbigpLgorICAgICAgICBjYWNoZWRSZXNvdXJjZUxvYWRlcigp
LmRlY3JlbWVudFJlcXVlc3RDb3VudCgqZm9udEhhbmRsZSk7CisgICAgfQorICAgIG1fZm9udHNU
b0JlZ2luTG9hZGluZy5jbGVhcigpOworCisgICAgbV9kZXN0cm95ZWQgPSB0cnVlOworICAgIG1f
Y3NzRm9udEZhY2VTZXQtPmNsZWFyKCk7CisgICAgbV9jbGllbnRzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgRm9udFNlbGVjdG9yQmFzZTo6YmVnaW5Mb2FkaW5nRm9udFNvb24oQ2FjaGVkRm9udCYgZm9u
dCkKK3sKKyAgICBpZiAobV9kZXN0cm95ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZm9u
dHNUb0JlZ2luTG9hZGluZy5hcHBlbmQoJmZvbnQpOworICAgIC8vIEluY3JlbWVudCB0aGUgcmVx
dWVzdCBjb3VudCBub3csIGluIG9yZGVyIHRvIHByZXZlbnQgZGlkRmluaXNoTG9hZCBmcm9tIGJl
aW5nIGRpc3BhdGNoZWQKKyAgICAvLyBhZnRlciB0aGlzIGZvbnQgaGFzIGJlZW4gcmVxdWVzdGVk
IGJ1dCBiZWZvcmUgaXQgYmVnYW4gbG9hZGluZy4gQmFsYW5jZWQgYnkKKyAgICAvLyBkZWNyZW1l
bnRSZXF1ZXN0Q291bnQoKSBpbiBiZWdpbkxvYWRUaW1lckZpcmVkKCkgYW5kIGluIGNsZWFyRG9j
dW1lbnQoKS4KKyAgICBjYWNoZWRSZXNvdXJjZUxvYWRlcigpLmluY3JlbWVudFJlcXVlc3RDb3Vu
dChmb250KTsKKworICAgIG1fYmVnaW5Mb2FkaW5nVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9
CisKK3ZvaWQgRm9udFNlbGVjdG9yQmFzZTo6YmVnaW5Mb2FkVGltZXJGaXJlZCgpCit7CisgICAg
VmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+PiBmb250c1RvQmVnaW5Mb2Fk
aW5nOworICAgIGZvbnRzVG9CZWdpbkxvYWRpbmcuc3dhcChtX2ZvbnRzVG9CZWdpbkxvYWRpbmcp
OworCisgICAgLy8gRm9udFNlbGVjdG9yQmFzZSBjb3VsZCBnZXQgZGVsZXRlZCB2aWEgYmVnaW5M
b2FkSWZOZWVkZWQoKSBvciBsb2FkRG9uZSgpIHVubGVzcyBwcm90ZWN0ZWQuCisgICAgUmVmPEZv
bnRTZWxlY3RvckJhc2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOworCisgICAgZm9yIChhdXRvJiBm
b250SGFuZGxlIDogZm9udHNUb0JlZ2luTG9hZGluZykgeworICAgICAgICBmb250SGFuZGxlLT5i
ZWdpbkxvYWRJZk5lZWRlZChjYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKKyAgICAgICAgLy8gQmFs
YW5jZXMgaW5jcmVtZW50UmVxdWVzdENvdW50KCkgaW4gYmVnaW5Mb2FkaW5nRm9udFNvb24oKS4K
KyAgICAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKmZv
bnRIYW5kbGUpOworICAgIH0KKyAgICAvLyBFbnN1cmUgdGhhdCBpZiB0aGUgcmVxdWVzdCBjb3Vu
dCByZWFjaGVzIHplcm8sIHRoZSBmcmFtZSBsb2FkZXIgd2lsbCBrbm93IGFib3V0IGl0LgorICAg
IC8vIE5ldyBmb250IGxvYWRzIG1heSBiZSB0cmlnZ2VyZWQgYnkgbGF5b3V0IGFmdGVyIHRoZSBk
b2N1bWVudCBsb2FkIGlzIGNvbXBsZXRlIGJ1dCBiZWZvcmUgd2UgaGF2ZSBkaXNwYXRjaGVkCisg
ICAgLy8gZGlkRmluaXNoTG9hZGluZyBmb3IgdGhlIGZyYW1lLiBNYWtlIHN1cmUgdGhlIGRlbGVn
YXRlIGlzIGFsd2F5cyBkaXNwYXRjaGVkIGJ5IGNoZWNraW5nIGV4cGxpY2l0bHkuCisgICAgaWYg
KGlzQ1NTRm9udFNlbGVjdG9yKCkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaXND
U1NGb250U2VsZWN0b3IoKSA/IGRvd25jYXN0PENTU0ZvbnRTZWxlY3Rvcj4oKnRoaXMpLmRvY3Vt
ZW50KCkgOiBudWxscHRyOworICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1l
KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkuY2hlY2tMb2FkQ29t
cGxldGUoKTsKKyAgICB9CisgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5sb2FkRG9uZShMb2Fk
Q29tcGxldGlvblR5cGU6OkZpbmlzaCk7Cit9CisKKworc2l6ZV90IEZvbnRTZWxlY3RvckJhc2U6
OmZhbGxiYWNrRm9udENvdW50KCkKK3sKKyAgICBpZiAobV9kZXN0cm95ZWQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHNldHRpbmdzKCkuZm9udEZhbGxiYWNrUHJlZmVyc1BpY3Rv
Z3JhcGhzKCkgPyAxIDogMDsKK30KKworUmVmUHRyPEZvbnQ+IEZvbnRTZWxlY3RvckJhc2U6OmZh
bGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBzaXpl
X3QgaW5kZXgpCit7CisgICAgQVNTRVJUX1VOVVNFRChpbmRleCwgIWluZGV4KTsKKworICAgIGlm
IChtX2Rlc3Ryb3llZCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNldHRp
bmdzKCkuZm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGF1dG8mIHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gc2V0dGluZ3MoKS5waWN0
b2dyYXBoRm9udEZhbWlseSgpOworICAgIGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpICYmIGlzQ1NTRm9udFNlbGVjdG9yKCkpCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG93bmNhc3Q8Q1NTRm9udFNl
bGVjdG9yPigqdGhpcykuZG9jdW1lbnQoKSwgcGljdG9ncmFwaEZvbnRGYW1pbHkuc3RyaW5nKCks
ICEhZm9udCk7CisKKyAgICByZXR1cm4gZm9udDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0ZvbnRTZWxlY3RvckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250
U2VsZWN0b3JCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY0YWJlZGIzYTgzY2UxMTdlMjhlMWFkMWY0OTNj
ZmYyNDM0N2ExMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250U2Vs
ZWN0b3JCYXNlLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNTU0ZvbnRGYWNlLmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VTZXQuaCIKKyNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250
U2VsZWN0b3IuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI7CitjbGFzcyBDU1NGb250RmFjZVJ1bGU7CitjbGFzcyBDU1NQ
cmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1NlZ21lbnRlZEZvbnRGYWNlOworY2xhc3MgQ1NTVmFs
dWVMaXN0OworY2xhc3MgQ2FjaGVkRm9udDsKK2NsYXNzIFNldHRpbmdzOworY2xhc3MgU3R5bGVS
dWxlRm9udEZhY2U7CisKK2NsYXNzIEZvbnRTZWxlY3RvckJhc2UgOiBwdWJsaWMgRm9udFNlbGVj
dG9yLCBwdWJsaWMgQ1NTRm9udEZhY2VTZXRDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxG
b250U2VsZWN0b3JCYXNlPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yQmFz
ZSgpOworCisgICAgdmlydHVhbCBib29sIGlzQ1NTRm9udFNlbGVjdG9yKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNPZmZzY3JlZW5Gb250U2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdW5zaWduZWQgdmVyc2lvbigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fdmVyc2lvbjsgfQorICAgIHVuc2lnbmVkIHVuaXF1ZUlkKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV91bmlxdWVJZDsgfQorCisgICAgRm9udFJhbmdlcyBmb250UmFuZ2Vz
Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21TdHJpbmcmKSBmaW5h
bDsKKyAgICBzaXplX3QgZmFsbGJhY2tGb250Q291bnQoKSBmaW5hbDsKKyAgICBSZWZQdHI8Rm9u
dD4gZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgc2l6ZV90KSBmaW5hbDsK
KworICAgIHZvaWQgZGVzdHJveSgpOworICAgIHZvaWQgZW1wdHlDYWNoZXMoKTsKKyAgICB2b2lk
IGJ1aWxkU3RhcnRlZCgpOworICAgIHZvaWQgYnVpbGRDb21wbGV0ZWQoKTsKKworICAgIHZvaWQg
YWRkRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0luaXRpYXRpbmdFbGVt
ZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKKworICAgIHZvaWQgZm9udExvYWRlZCgpOworICAg
IHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSBmaW5hbDsKKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OworCisgICAgdm9pZCByZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250
U2VsZWN0b3JDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJGb3JJbnZhbGlkYXRp
b25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgZmluYWw7CisKKyAgICB2b2lkIGJlZ2lu
TG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQmKTsKKworICAgIHZvaWQgaW5jcmVtZW50SXNDb21w
dXRpbmdSb290U3R5bGVGb250KCkgeyArK21fY29tcHV0aW5nUm9vdFN0eWxlRm9udENvdW50OyB9
CisgICAgdm9pZCBkZWNyZW1lbnRJc0NvbXB1dGluZ1Jvb3RTdHlsZUZvbnQoKSB7IC0tbV9jb21w
dXRpbmdSb290U3R5bGVGb250Q291bnQ7IH0KKworICAgIGJvb2wgZGVzdHJveWVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXN0cm95ZWQ7IH0KKworICAgIHZpcnR1YWwgQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXImIGNhY2hlZFJlc291cmNlTG9hZGVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3Qg
U2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgRm9udFNl
bGVjdG9yQmFzZSgpOworCisgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2Nzc0ZvbnRGYWNlU2V0
OworCitwcml2YXRlOgorICAgIHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsK
KworICAgIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSBmaW5h
bDsKKworICAgIHZvaWQgZm9udE1vZGlmaWVkKCkgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luTG9h
ZFRpbWVyRmlyZWQoKTsKKworICAgIHN0cnVjdCBQZW5kaW5nRm9udEZhY2VSdWxlIHsKKyAgICAg
ICAgU3R5bGVSdWxlRm9udEZhY2UmIHN0eWxlUnVsZUZvbnRGYWNlOworICAgICAgICBib29sIGlz
SW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWU7CisgICAgfTsKKyAgICBWZWN0
b3I8UGVuZGluZ0ZvbnRGYWNlUnVsZT4gbV9zdGFnaW5nQXJlYTsKKworICAgIEhhc2hTZXQ8Rm9u
dFNlbGVjdG9yQ2xpZW50Kj4gbV9jbGllbnRzOworCisgICAgVmVjdG9yPENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZEZvbnQ+PiBtX2ZvbnRzVG9CZWdpbkxvYWRpbmc7CisgICAgSGFzaFNldDxS
ZWZQdHI8Q1NTRm9udEZhY2U+PiBtX2Nzc0Nvbm5lY3Rpb25zUG9zc2libHlUb1JlbW92ZTsKKyAg
ICBIYXNoU2V0PFJlZlB0cjxTdHlsZVJ1bGVGb250RmFjZT4+IG1fY3NzQ29ubmVjdGlvbnNFbmNv
dW50ZXJlZER1cmluZ0J1aWxkOworICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRTZWxlY3RvckJhc2U+
IG1fYmVnaW5Mb2FkaW5nVGltZXI7CisKKyAgICB1bnNpZ25lZCBtX3VuaXF1ZUlkOworICAgIHVu
c2lnbmVkIG1fdmVyc2lvbjsKKyAgICB1bnNpZ25lZCBtX2NvbXB1dGluZ1Jvb3RTdHlsZUZvbnRD
b3VudCB7IDAgfTsKKyAgICBib29sIG1fY3JlYXRpbmdGb250IHsgZmFsc2UgfTsKKyAgICBib29s
IG1fYnVpbGRJc1VuZGVyd2F5IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGVzdHJveWVkIHsgZmFs
c2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZPTlRfU0VMRUNUT1IoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oVG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZvbnRTZWxlY3RvckJhc2UmIGZvbnRTZWxl
Y3RvcikgeyByZXR1cm4gZm9udFNlbGVjdG9yLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvT2Zmc2NyZWVu
Rm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9PZmZzY3JlZW5Gb250U2VsZWN0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMxNDhjYTg3ODI3YzhlYWE0NjFkOWE1ZWRkMGQ1NzA5ZWU0MjE0
ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvT2Zmc2NyZWVuRm9udFNl
bGVjdG9yLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk9mZnNjcmVlbkZvbnRTZWxlY3Rvci5oIgorCisjaW5jbHVkZSAi
Rm9udEZhY2VTZXQuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1
ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK09mZnNjcmVlbkZvbnRTZWxlY3Rvcjo6T2Zmc2NyZWVuRm9udFNlbGVj
dG9yKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKKyAgICA6IEZvbnRTZWxl
Y3RvckJhc2UoKQorICAgICwgbV93b3JrZXJHbG9iYWxTY29wZSgmd29ya2VyR2xvYmFsU2NvcGUp
Cit7Cit9CisKK0NhY2hlZFJlc291cmNlTG9hZGVyJiBPZmZzY3JlZW5Gb250U2VsZWN0b3I6OmNh
Y2hlZFJlc291cmNlTG9hZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93b3JrZXJHbG9iYWxT
Y29wZS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKK30KKworY29uc3QgU2V0dGluZ3MmIE9mZnNj
cmVlbkZvbnRTZWxlY3Rvcjo6c2V0dGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtX3dvcmtl
ckdsb2JhbFNjb3BlLT5zZXR0aW5ncygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvT2Zmc2NyZWVuRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvT2Zm
c2NyZWVuRm9udFNlbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU2MzE5NDZmMzdlNTZlYTk4MTQ2Yjhl
NjJkMjc5ZWIzYjI0YWNkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9P
ZmZzY3JlZW5Gb250U2VsZWN0b3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGb250U2VsZWN0b3JCYXNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7CisKK2NsYXNzIE9mZnNjcmVl
bkZvbnRTZWxlY3RvciBmaW5hbCA6IHB1YmxpYyBGb250U2VsZWN0b3JCYXNlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPE9mZnNjcmVlbkZvbnRTZWxlY3Rvcj4gY3JlYXRlKFdvcmtlckdsb2Jh
bFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE9mZnNjcmVlbkZvbnRTZWxlY3Rvcih3b3JrZXJHbG9iYWxTY29wZSkpOworICAgIH0K
KworICAgIGJvb2wgaXNPZmZzY3JlZW5Gb250U2VsZWN0b3IoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBXb3JrZXJHbG9iYWxTY29wZSogd29ya2VyR2xvYmFsU2NvcGUo
KSBjb25zdCB7IHJldHVybiBtX3dvcmtlckdsb2JhbFNjb3BlOyB9CisKKyAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBj
b25zdCBTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBPZmZzY3JlZW5Gb250U2VsZWN0b3IoV29ya2VyR2xvYmFsU2NvcGUmKTsKKwor
ICAgIFdvcmtlckdsb2JhbFNjb3BlKiBtX3dvcmtlckdsb2JhbFNjb3BlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZPTlRfU0VMRUNUT1Io
V2ViQ29yZTo6T2Zmc2NyZWVuRm9udFNlbGVjdG9yLCBpc09mZnNjcmVlbkZvbnRTZWxlY3Rvcigp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZWZiNDI2NzlkNjJmZDJiYWQzZWU1NDBjOTVh
ZTA2OTQ3MTZmODQ4YS4uZmJjMGI5MDEyYzEyNzQxMThlMjIzMjMzNDFhN2I2NTE2M2MyMzA5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC02NjEsNyArNjYxLDcgQEAgRG9jdW1lbnQ6On5E
b2N1bWVudCgpCiAgICAgZXh0ZW5zaW9uU3R5bGVTaGVldHMoKS5kZXRhY2hGcm9tRG9jdW1lbnQo
KTsKIAogICAgIHN0eWxlU2NvcGUoKS5jbGVhclJlc29sdmVyKCk7IC8vIFdlIG5lZWQgdG8gZGVz
dHJveSBDU1NGb250U2VsZWN0b3IgYmVmb3JlIGRlc3Ryb3lpbmcgbV9jYWNoZWRSZXNvdXJjZUxv
YWRlci4KLSAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJEb2N1bWVudCgpOworICAgIG1fZm9udFNl
bGVjdG9yLT5kZXN0cm95KCk7CiAgICAgbV9mb250U2VsZWN0b3ItPnVucmVnaXN0ZXJGb3JJbnZh
bGlkYXRpb25DYWxsYmFja3MoKnRoaXMpOwogCiAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3IgbXVs
dGlwbGUgRG9jdW1lbnRzIHRvIGVuZCB1cCByZWZlcmVuY2luZyB0aGUgc2FtZSBDYWNoZWRSZXNv
dXJjZUxvYWRlciAoZS5nLiwgU1ZHSW1hZ2VzCkBAIC03MTMsNyArNzEzLDcgQEAgdm9pZCBEb2N1
bWVudDo6cmVtb3ZlZExhc3RSZWYoKQogI2VuZGlmCiAgICAgICAgIG1fYXNzb2NpYXRlZEZvcm1D
b250cm9scy5jbGVhcigpOwogCi0gICAgICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50
KCk7CisgICAgICAgIG1fZm9udFNlbGVjdG9yLT5kZXN0cm95KCk7CiAgICAgICAgIG1fZm9udFNl
bGVjdG9yLT51bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKCp0aGlzKTsKIAogICAg
ICAgICBkZXRhY2hQYXJzZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1RleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4
dC5pZGwKaW5kZXggMTg2ZjJhMDI0NjBiN2VlNjMyY2M1N2E5Zjg3YTI1ZGU0N2M2YzE0Ny4uZTdi
YTU0MjQ5YzVlNzE3NTg5NTc3ZmJiYThjYzc3YzIyMjZiMTZhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzVGV4dC5pZGwKQEAgLTI1LDcgKzI1LDcgQEAKIAogWwogICAgIE5v
SW50ZXJmYWNlT2JqZWN0LAotICAgIEV4cG9zZWQ9V2luZG93CisgICAgRXhwb3NlZD0oV2luZG93
LFdvcmtlcikKIF0gaW50ZXJmYWNlIENhbnZhc1RleHQgewogICAgIC8vIEZJWE1FOiBBbGwgdGhl
IHVucmVzdHJpY3RlZCBmbG9hdCBwYXJhbWV0ZXJzIGJlbG93IHNob3VsZCBiZSB1bnJlc3RyaWN0
ZWQgZG91Ymxlcy4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzVGV4dERyYXdpbmdTdHlsZXMuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzVGV4dERyYXdpbmdTdHlsZXMuaWRsCmluZGV4IDE3ZDIzNjhhNWRjMDlmNzg2ZTU5Y2ZlNmQy
Y2ExNzU5Y2Q5YzExZDAuLmNiYjM1YjQ0MzZmZDg4NWQ4NzY2NWMxNThjNDM1MTIyOGNkYzY2Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1RleHREcmF3aW5n
U3R5bGVzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0RHJh
d2luZ1N0eWxlcy5pZGwKQEAgLTI1LDcgKzI1LDcgQEAKIAogWwogICAgIE5vSW50ZXJmYWNlT2Jq
ZWN0LAotICAgIEV4cG9zZWQ9V2luZG93CisgICAgRXhwb3NlZD0oV2luZG93LFdvcmtlcikKIF0g
aW50ZXJmYWNlIENhbnZhc1RleHREcmF3aW5nU3R5bGVzIHsKICAgICAvLyB0ZXh0CiAgICAgYXR0
cmlidXRlIERPTVN0cmluZyBmb250OyAvLyAoZGVmYXVsdCAxMHB4IHNhbnMtc2VyaWYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCBjZjk3ZjlmOTI5NzQ1ZTFiMDQwODRkMmE3
MTJlOTdkY2ZjYzAxMGNhLi43NTkxZDQxZDljZTQ1MzgzY2RjNTVkMDA1MzRkMjQwODUxM2RmNzli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM1LDggKzM1LDExIEBACiAK
ICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk9mZnNjcmVlbkZvbnRTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
KyNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcyLDE2ICs3NSwxMCBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcm
IG5ld0ZvbnQpCiAgICAgcmVhbGl6ZVNhdmVzKCk7CiAgICAgbW9kaWZpYWJsZVN0YXRlKCkudW5w
YXJzZWRGb250ID0gbmV3Rm9udFNhZmVDb3B5OwogCi0gICAgYXV0byogY29udGV4dCA9IGNhbnZh
c0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFpczxEb2N1bWVudD4o
KmNvbnRleHQpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBNYXAgdGhlIDxjYW52YXM+IGZv
bnQgaW50byB0aGUgdGV4dCBzdHlsZS4gSWYgdGhlIGZvbnQgdXNlcyBrZXl3b3JkcyBsaWtlIGxh
cmdlci9zbWFsbGVyLCB0aGVzZSB3aWxsIHdvcmsKICAgICAvLyByZWxhdGl2ZSB0byB0aGUgY2Fu
dmFzLgogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7CiAKLSAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwotCiAg
ICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOwogICAgIGRl
ZmF1bHRGb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKICAg
ICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXpl
KTsKQEAgLTg5LDI0ICs4Niw0NSBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAKICAgICBuZXdTdHlsZS0+c2V0
Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVmYXVsdEZvbnREZXNjcmlwdGlvbikpOwogCi0gICAg
bmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7
CisgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgeworICAgICAgICBX
VEZMb2dBbHdheXMoIkNhbnZhcyBzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQgaXMgV29ya2VyR2xv
YmFsU2NvcGUiKTsKKyAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3Bl
ID0gZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpjb250ZXh0KTsKKworICAgICAgICBuZXdT
dHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJndvcmtlckdsb2JhbFNjb3BlLmZvbnRTZWxlY3Rv
cigpKTsKKworICAgICAgICAvLyBGSVhNRTogU2V0IGZvbnQgcHJvcGVydGllcwogCi0gICAgLy8g
Tm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCi0gICAg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50LnVzZXJBZ2VudFNoYWRvd1Ry
ZWVTdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9TdHls
ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCksIFdURk1vdmUobmV3U3R5bGUpKTsKLSAgICBz
dHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5
bGUpLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKLSAgICBzdHlsZVJlc29s
dmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBh
cnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0
KCkpOworICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUod29ya2VyR2xv
YmFsU2NvcGUuZm9udFNlbGVjdG9yKCksICpuZXdTdHlsZS5nZXQoKSk7CiAKLSAgICAvLyBBcyBk
ZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBv
biBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91
YmxlIGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWls
YWJsZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2Vl
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAgICAvLyBUaGUgdXBk
YXRlRm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0
aGUgcHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KLSAgICBzdHls
ZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKLSAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci51cGRhdGVGb250KCk7Ci0gICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50
U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5
cygiQ2FudmFzIHNjcmlwdCBleGVjdXRpb24gY29udGV4dCBpcyBEb2N1bWVudCIpOworICAgICAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3Rv
cigpKTsKKworICAgICAgICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBp
bnRvIHRoZSBzdHlsZS4KKyAgICAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGRv
Y3VtZW50LnVzZXJBZ2VudFNoYWRvd1RyZWVTdHlsZVJlc29sdmVyKCk7CisgICAgICAgIHN0eWxl
UmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJz
ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgp
LCBXVEZNb3ZlKG5ld1N0eWxlKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0
eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOworICAgICAgICBzdHls
ZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250
VmFyaWFudENhcHMpLmdldCgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKKworICAgICAgICAv
LyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhl
aWdodCBvbiBhIGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoRG91YmxlIGNhbGwsCisgICAgICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNz
IGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFzaCBv
Y2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCisgICAg
ICAgIC8vIFRoZSB1cGRhdGVGb250KCkgY2FsbHMgYmVsb3cgdXBkYXRlIHRoZSBmb250TWV0cmlj
cyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgc2V0dGluZyBvZiBmb250LXNpemUgYW5kIGxpbmUtaGVp
Z2h0LgorICAgICAgICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U2l6ZSwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0
KCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQp
LmdldCgpKTsKKworICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9j
dW1lbnQuZm9udFNlbGVjdG9yKCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOworCisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUo
ZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBhdXRvIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29uc3QgRm9udFByb3h5JiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggOWY0MGIzMTRiZTJkNjNkOWQyNGRmMDZkMWFi
MjIyYTkzNTE5YWFjYy4uYjQ5YzdmZGFlNDY0ZGQyZjViYmU1MDE2OTkxZjFjZjlkNWM1YTk1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMzYsNiArMzYsNyBA
QAogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTYzLDcgKzY0LDcgQEAgZW51
bSBGb250VmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJp
YW50LCBFbXBoYXNpc01hcmtWYXIKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0
Y2gsIFZhcmlhYmxlUGl0Y2ggfTsKIGVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50
OF90IHsgTm8sIFllcyB9OwogCi1jbGFzcyBGb250IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udD4g
eworY2xhc3MgRm9udCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxGb250PiB7CiBwdWJs
aWM6CiAgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxhdGZvcm0gZm9udHMuCiAgICAgZW51bSBjbGFz
cyBPcmlnaW4gOiB1aW50OF90IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwCmluZGV4IDgyZjBiNjE5OThjNjkwYzRmZDFjMjE4M2E0MTBhOTI2MDRk
ZDJhNmIuLmZmMTU3NGRhYTdhYmE3NzEwMjM2MTk1NTU2Zjg2YWQ4ZjNiODkyMjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtMzYsOCAr
MzYsMTAgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWls
eU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4K
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00NiwxNSAr
NDgsOSBAQAogI2luY2x1ZGUgIk9wZW5UeXBlVmVydGljYWxEYXRhLmgiCiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3
dGYvUmVjdXJzaXZlTG9ja0FkYXB0ZXIuaD4KIAogc3RhdGljIFJlY3Vyc2l2ZUxvY2sgZm9udExv
Y2s7CiAKLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQotCi0KIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKQEAgLTY1LDcgKzYxLDcgQEAgRm9udENhY2hl
JiBGb250Q2FjaGU6OnNpbmdsZXRvbigpCiB9CiAKIEZvbnRDYWNoZTo6Rm9udENhY2hlKCkKLSAg
ICA6IG1fcHVyZ2VUaW1lcigqdGhpcywgJkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
SWZOZWVkZWQpCisgICAgOiBtX3B1cmdlVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKIHsKIH0KIApAQCAtMjAyLDEw
ICsxOTgsOCBAQCBjb25zdCBBdG9tU3RyaW5nJiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5h
bWUoY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5TmFtZSkKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRD
YWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbVN0cmluZyYgcGFzc2VkRmFtaWx5TmFtZSwKICAgICBj
b25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFy
aWFudFNldHRpbmdzKiBmb250RmFjZVZhcmlhbnRTZXR0aW5ncywgRm9udFNlbGVjdGlvblNwZWNp
ZmllZENhcGFiaWxpdGllcyBmb250RmFjZUNhcGFiaWxpdGllcywgYm9vbCBjaGVja2luZ0FsdGVy
bmF0ZU5hbWUpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGZvbnRMb2NrKTsKLSNlbmRpZgotICAgIAorCiAjaWYgT1MoV0lORE9XUykgJiYg
RU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIC8vIExlYWRpbmcgIkAiIGluIHRoZSBmb250
IG5hbWUgZW5hYmxlcyBXaW5kb3dzIHZlcnRpY2FsIGZsb3cgZmxhZyBmb3IgdGhlIGZvbnQuCiAg
ICAgLy8gQmVjYXVzZSB3ZSBkbyB2ZXJ0aWNhbCBmbG93IGJ5IG91cnNlbHZlcywgd2UgZG9uJ3Qg
d2FudCB0byB1c2UgdGhlIFdpbmRvd3MgZmVhdHVyZS4KQEAgLTMyOSwxMCArMzIzLDggQEAgUmVm
UHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY28KIAogUmVmPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvclBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCiB7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsK
LSNlbmRpZgotICAgIAorCiAgICAgYXV0byBhZGRSZXN1bHQgPSBjYWNoZWRGb250cygpLmVuc3Vy
ZShwbGF0Zm9ybURhdGEsIFsmXSB7CiAgICAgICAgIHJldHVybiBGb250OjpjcmVhdGUocGxhdGZv
cm1EYXRhKTsKICAgICB9KTsKQEAgLTM2Niw5ICszNTgsNyBAQCB2b2lkIEZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiAgICAgcHJ1bmVVbnJlZmVy
ZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBwcnVuZVN5c3RlbUZhbGxi
YWNrRm9udHMoKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhmb250TG9jayk7Ci0jZW5kaWYKIAogICAgIHdoaWxlIChwdXJnZUNvdW50KSB7
CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250c1RvRGVsZXRlOwpAQCAtNDE0LDkg
KzQwNCw3IEBAIHNpemVfdCBGb250Q2FjaGU6OmZvbnRDb3VudCgpCiAKIHNpemVfdCBGb250Q2Fj
aGU6OmluYWN0aXZlRm9udENvdW50KCkKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwotI2VuZGlmCiAgICAgdW5zaWduZWQg
Y291bnQgPSAwOwogICAgIGZvciAoYXV0byYgZm9udCA6IGNhY2hlZEZvbnRzKCkudmFsdWVzKCkp
IHsKICAgICAgICAgaWYgKGZvbnQtPmhhc09uZVJlZigpKQpAQCAtNDI5LDYgKzQxNyw3IEBAIHN0
YXRpYyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+KiBnQ2xpZW50czsKIAogdm9pZCBGb250Q2FjaGU6
OmFkZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKGZvbnRMb2NrKTsKICAgICBpZiAoIWdDbGllbnRzKQogICAgICAgICBnQ2xpZW50cyA9
IG5ldyBIYXNoU2V0PEZvbnRTZWxlY3Rvcio+OwogCkBAIC00MzgsNiArNDI3LDcgQEAgdm9pZCBG
b250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIAogdm9pZCBGb250Q2Fj
aGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3ImIGNsaWVudCkKIHsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGZvbnRMb2NrKTsKICAgICBBU1NFUlQoZ0NsaWVudHMpOwogICAgIEFTU0VS
VChnQ2xpZW50cy0+Y29udGFpbnMoJmNsaWVudCkpOwogCkBAIC00NTMsNiArNDQzLDcgQEAgdW5z
aWduZWQgc2hvcnQgRm9udENhY2hlOjpnZW5lcmF0aW9uKCkKIAogdm9pZCBGb250Q2FjaGU6Omlu
dmFsaWRhdGUoKQogeworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9udExvY2spOwogICAg
IGlmICghZ0NsaWVudHMpIHsKICAgICAgICAgQVNTRVJUKGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgp
LmlzRW1wdHkoKSk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgKaW5kZXggMGEzYTMzZjkzYjFmNTVhZGU3OTNhNWZmNDU3OGRj
MWYyNDRlZTZjZC4uNDc2ZTc4ODNkZjA0YmY1ODE0Yjg2MmNmYmYyYjU0N2NkMWFiOWRlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKQEAgLTMyLDEy
ICszMiwxMiBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQ
bGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJUaW1lci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nSGFzaC5oPgpAQCAtMjc0LDggKzI3NCw4IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0IEF0b21TdHJpbmcmIGFsdGVybmF0ZUZhbWlseU5hbWUoY29uc3QgQXRvbVN0cmlu
ZyYpOwogICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBwbGF0Zm9ybUFsdGVybmF0ZUZhbWls
eU5hbWUoY29uc3QgQXRvbVN0cmluZyYpOwogCi0gICAgVGltZXIgbV9wdXJnZVRpbWVyOwotICAg
IAorICAgIFJ1bkxvb3A6OlRpbWVyPEZvbnRDYWNoZT4gbV9wdXJnZVRpbWVyOworCiAgICAgYm9v
bCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9Owog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggNjQ4MThmNGI1MTU1ZDQyYmZhYzgxYjYxZjRiNWY5
Y2RlYTU0NTJkNi4uYWQyMTA4YWY3YTVkYzI3OTA3YWNmNWIzNzBkYjUyMDE1YmRjNTRlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApA
QCAtMjQ5LDI0ICsyNDksMjkgQEAgc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2
ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGkKICAgICBhdXRvIGtl
eSA9IG1ha2VGb250Q2FzY2FkZUNhY2hlS2V5KGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9y
LmdldCgpKTsKIAogICAgIHVuc2lnbmVkIGhhc2ggPSBjb21wdXRlRm9udENhc2NhZGVDYWNoZUhh
c2goa2V5KTsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IGZvbnRDYXNjYWRlQ2FjaGUoKS5hZGQoaGFz
aCwgbnVsbHB0cik7Ci0gICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2go
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQotICAgICAgICByZXR1cm4gYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7Ci0KLSAgICBhdXRvJiBuZXdFbnRy
eSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgbmV3RW50cnkgPSBtYWtlVW5pcXVl
PEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oV1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpj
cmVhdGUoV1RGTW92ZShmb250U2VsZWN0b3IpKSk7Ci0gICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+
IGdseXBocyA9IG5ld0VudHJ5LT5mb250cy5nZXQoKTsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsID0gNTA7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhpbXVtRW50cmllcyA9IDQwMDsKLSAgICBzdGF0aWMgdW5zaWduZWQgcHJ1bmVDb3VudGVy
OwotICAgIC8vIFJlZmVyZW5jZWQgRm9udENhc2NhZGVGb250cyB3b3VsZCBleGlzdCBhbnl3YXkg
c28gcHJ1bmluZyB0aGVtIHNhdmVzIGxpdHRsZSBtZW1vcnkuCi0gICAgaWYgKCEoKytwcnVuZUNv
dW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVydmFsKSkKLSAgICAgICAgcHJ1bmVVbnJlZmVy
ZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKLSAgICAvLyBQcmV2ZW50IHBhdGhv
bG9naWNhbCBncm93dGguCi0gICAgaWYgKGZvbnRDYXNjYWRlQ2FjaGUoKS5zaXplKCkgPiBtYXhp
bXVtRW50cmllcykKLSAgICAgICAgZm9udENhc2NhZGVDYWNoZSgpLnJlbW92ZShmb250Q2FzY2Fk
ZUNhY2hlKCkucmFuZG9tKCkpOwotICAgIHJldHVybiBnbHlwaHM7CisKKyAgICBpZiAoaXNNYWlu
VGhyZWFkKCkgfHwgZm9udENhc2NhZGVDYWNoZSgpLmNvbnRhaW5zKGhhc2gpKSB7CisgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gZm9udENhc2NhZGVDYWNoZSgpLmFkZChoYXNoLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmZvbnRzLmdldCgpOworCisgICAgICAgIGF1dG8mIG5ld0VudHJ5
ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgbmV3RW50cnkgPSBtYWtlVW5p
cXVlPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oV1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRz
OjpjcmVhdGUoV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CisgICAgICAgIFJlZjxGb250Q2FzY2Fk
ZUZvbnRzPiBnbHlwaHMgPSBuZXdFbnRyeS0+Zm9udHMuZ2V0KCk7CisKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHVucmVmZXJlbmNlZFBydW5lSW50ZXJ2YWwgPSA1MDsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhpbXVtRW50cmllcyA9IDQwMDsKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHBydW5lQ291bnRlcjsKKyAgICAgICAgLy8gUmVmZXJlbmNlZCBGb250Q2FzY2FkZUZv
bnRzIHdvdWxkIGV4aXN0IGFueXdheSBzbyBwcnVuaW5nIHRoZW0gc2F2ZXMgbGl0dGxlIG1lbW9y
eS4KKyAgICAgICAgaWYgKCEoKytwcnVuZUNvdW50ZXIgJSB1bnJlZmVyZW5jZWRQcnVuZUludGVy
dmFsKSkKKyAgICAgICAgICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21Gb250Q2FzY2Fk
ZUNhY2hlKCk7CisgICAgICAgIC8vIFByZXZlbnQgcGF0aG9sb2dpY2FsIGdyb3d0aC4KKyAgICAg
ICAgaWYgKGZvbnRDYXNjYWRlQ2FjaGUoKS5zaXplKCkgPiBtYXhpbXVtRW50cmllcykKKyAgICAg
ICAgICAgIGZvbnRDYXNjYWRlQ2FjaGUoKS5yZW1vdmUoZm9udENhc2NhZGVDYWNoZSgpLnJhbmRv
bSgpKTsKKyAgICAgICAgcmV0dXJuIGdseXBoczsKKyAgICB9CisKKyAgICByZXR1cm4gRm9udENh
c2NhZGVGb250czo6Y3JlYXRlKFdURk1vdmUoZm9udFNlbGVjdG9yKSk7CiB9CiAKIHZvaWQgRm9u
dENhc2NhZGU6OnVwZGF0ZShSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVGb250cy5jcHAKaW5kZXggMTJhYzgzN2ZjZDI0NjVmOWY4MWRlYjA2ODdhYTc3NmQ1ZWEwNjQ1
My4uZWZkNTVjZjZmODhiNTA0ZDQ5NzczN2NiZDhkN2RmMzU4ZjlmM2UxZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAK
QEAgLTEwMSw2ICsxMDEsNyBAQCBGb250Q2FzY2FkZUZvbnRzOjpGb250Q2FzY2FkZUZvbnRzKFJl
ZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogICAgICwgbV9mb250U2VsZWN0b3Io
Zm9udFNlbGVjdG9yKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKG1fZm9udFNlbGVjdG9y
ID8gbV9mb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDApCiAgICAgLCBtX2dlbmVyYXRpb24oRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCisgICAgLCBtX3RocmVhZCgmVGhyZWFk
OjpjdXJyZW50KCkpCiB7CiB9CiAKQEAgLTEwOSw2ICsxMTAsNyBAQCBGb250Q2FzY2FkZUZvbnRz
OjpGb250Q2FzY2FkZUZvbnRzKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkK
ICAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQogICAgICwgbV9nZW5lcmF0aW9uKEZvbnRD
YWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQogICAgICwgbV9pc0ZvclBsYXRmb3JtRm9u
dCh0cnVlKQorICAgICwgbV90aHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKQogewogICAgIG1fcmVh
bGl6ZWRGYWxsYmFja1Jhbmdlcy5hcHBlbmQoRm9udFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRv
bigpLmZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKSkpOwogfQpAQCAtNDkwLDcgKzQ5
Miw3IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2VGcm9tRm9udFJhbmdlcyh1
bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250CiAKIEdseXBoRGF0YSBGb250Q2FzY2FkZUZv
bnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgRm9udFZhcmlhbnQgdmFyaWFudCkKIHsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCA9PSAmVGhyZWFkOjpjdXJy
ZW50KCkpOwogICAgIEFTU0VSVCh2YXJpYW50ICE9IEF1dG9WYXJpYW50KTsKIAogICAgIGlmICh2
YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmgKaW5kZXggMjA2YzQ4ZTM0YTM5OGI0ZDcxN2Y3
ZGFiZDBhZTk5N2Q2MzQ3OGZjNC4uNWNhZDgxMTc2ODQ0MDIzODg5ZjI2NDNjMDRmZWM2MDNiMjFl
M2Q3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGVGb250cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuaApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgog
I2luY2x1ZGUgIldpZHRoQ2FjaGUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCkBAIC0xMTIs
NiArMTEyLDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBzaG9ydCBtX2dlbmVyYXRpb247CiAg
ICAgUGl0Y2ggbV9waXRjaCB7IFVua25vd25QaXRjaCB9OwogICAgIGJvb2wgbV9pc0ZvclBsYXRm
b3JtRm9udCB7IGZhbHNlIH07CisKKyAgICBUaHJlYWQqIG1fdGhyZWFkOwogfTsKIAogaW5saW5l
IGJvb2wgRm9udENhc2NhZGVGb250czo6aXNGaXhlZFBpdGNoKGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQpAQCAtMTIzLDcgKzEyNSw3IEBAIGlubGluZSBib29sIEZv
bnRDYXNjYWRlRm9udHM6OmlzRml4ZWRQaXRjaChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9u
JiBkZXNjcmlwCiAKIGlubGluZSBjb25zdCBGb250JiBGb250Q2FzY2FkZUZvbnRzOjpwcmltYXJ5
Rm9udChjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX3RocmVhZCA9PSAmVGhyZWFkOjpj
dXJyZW50KCkpOwogICAgIGlmICghbV9jYWNoZWRQcmltYXJ5Rm9udCkgewogICAgICAgICBhdXRv
JiBwcmltYXJ5UmFuZ2VzID0gcmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoZGVzY3JpcHRpb24sIDAp
OwogICAgICAgICBtX2NhY2hlZFByaW1hcnlGb250ID0gcHJpbWFyeVJhbmdlcy5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoJyAnLCBFeHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkFsbG93KS5m
b250OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAppbmRl
eCBjZDBkY2Q0NmZlYWIyYjFiZDdmYTdmZTFlZWEyZjhkN2MzODI3NzMzLi4xMzQxNDZkZGUyNmNl
MTliMjJhOTU4MmYyY2IyNjI2Y2Q4MjE4YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaFBhZ2UuaApAQCAtMzIsOCArMzIsOCBAQAogCiAjaW5jbHVkZSAiR2x5
cGguaCIKICNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBHbHlwaERh
dGEgewogLy8gQSBHbHlwaFBhZ2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBHbHlwaERh
dGEgbWFwcGluZ3MgZm9yIGEgY29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiB0
aGUgVW5pY29kZSBjb2RlIHNwYWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBzdGFydGlu
ZyBmcm9tIDAgYW5kIGluY3JlbWVudGluZyBmb3IgZWFjaCAic2l6ZSIgbnVtYmVyIG9mIGdseXBo
cy4KLWNsYXNzIEdseXBoUGFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4geworY2xh
c3MgR2x5cGhQYWdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdseXBoUGFnZT4gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8R2x5cGhQYWdlPiBjcmVhdGUoY29uc3QgRm9udCYgZm9u
dCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3Bw
CmluZGV4IGM5ZjBmODEzYmNiNjM2NjE1NGJjMDRiZWE1MDNjNjI0ZmFlYTAxYjUuLmU5NzEzZWYw
NDZlZjU5ZmMyNmY3Yzg1OTc3NTIyMzIyY2E4ZTlkYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIFJlZjxCaWRpQ29u
dGV4dD4gQmlkaUNvbnRleHQ6OmNyZWF0ZSh1bnNpZ25lZCBjaGFyIGxldmVsLCBVQ2hhckRpcmVj
dGlvbiBkaXJlY3RpCiB7CiAgICAgQVNTRVJUKGRpcmVjdGlvbiA9PSAobGV2ZWwgJSAyID8gVV9S
SUdIVF9UT19MRUZUIDogVV9MRUZUX1RPX1JJR0hUKSk7CiAKLSAgICBpZiAocGFyZW50KQorICAg
IGlmIChwYXJlbnQgfHwgIWlzTWFpblRocmVhZCgpKQogICAgICAgICByZXR1cm4gY3JlYXRlVW5j
YWNoZWQobGV2ZWwsIGRpcmVjdGlvbiwgb3ZlcnJpZGUsIHNvdXJjZSwgcGFyZW50KTsKIAogICAg
IEFTU0VSVChsZXZlbCA8PSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvTmluZVBpZWNlSW1hZ2UuY3BwCmluZGV4IDc2Mjg2ZGVlYTRmZWQ4ZmI3NGY4MjE3YTAzMTcy
M2Y3ZWNlNDAyOTYuLjZmMGNiMTllZGRmMjQ5NzYxOWU5NGY1OGNlNjYwMGNjY2M0ZWU0MWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNw
cApAQCAtNDEsNyArNDEsNyBAQCBpbmxpbmUgRGF0YVJlZjxOaW5lUGllY2VJbWFnZTo6RGF0YT4m
IE5pbmVQaWVjZUltYWdlOjpkZWZhdWx0RGF0YSgpCiB9CiAKIE5pbmVQaWVjZUltYWdlOjpOaW5l
UGllY2VJbWFnZSgpCi0gICAgOiBtX2RhdGEoZGVmYXVsdERhdGEoKSkKKyAgICA6IG1fZGF0YShp
c01haW5UaHJlYWQoKSA/IGRlZmF1bHREYXRhKCkgOiBEYXRhUmVmPERhdGE+KERhdGE6OmNyZWF0
ZSgpKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHAKaW5kZXggZmI0M2MyMGU1Y2U5OWVjZTE5ZjQ1MmZkOWY4Nzk2NGQ4MTRiYjdhZS4u
NDZjOWRhZTFkYTY4ZDc2ZTlhYjc4NDJmOWI0OGNkZmU5ZmUyOGE2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCkBAIC05NCwxMiArOTQsMTYg
QEAgUmVuZGVyU3R5bGUmIFJlbmRlclN0eWxlOjpkZWZhdWx0U3R5bGUoKQogCiBSZW5kZXJTdHls
ZSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gY2xvbmUoZGVmYXVsdFN0eWxl
KCkpOworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIGNsb25lKGRlZmF1
bHRTdHlsZSgpKTsKKyAgICByZXR1cm4gUmVuZGVyU3R5bGUoQ3JlYXRlRGVmYXVsdFN0eWxlKTsK
IH0KIAogc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRy
KCkKIHsKLSAgICByZXR1cm4gY2xvbmVQdHIoZGVmYXVsdFN0eWxlKCkpOworICAgIGlmIChpc01h
aW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIGNsb25lUHRyKGRlZmF1bHRTdHlsZSgpKTsKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJTdHlsZT4oQ3JlYXRlRGVmYXVsdFN0eWxlKTsKIH0K
IAogUmVuZGVyU3R5bGUgUmVuZGVyU3R5bGU6OmNsb25lKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJT
dHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUu
Y3BwCmluZGV4IGNkOWYzNjRiMjg2MjcxYjE3ZTY1MWY3MWEzYjI1YWYzOGY1NTY5NzAuLjMyYzVl
NTcwYjZlOTZiMDlkOWFlYWVjM2RhMGY1MGE0ODRjMWQ0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmNwcApAQCAtNDksMTUgKzQ5LDE1
IEBAIFJlZjxTVkdSZW5kZXJTdHlsZT4gU1ZHUmVuZGVyU3R5bGU6OmNyZWF0ZURlZmF1bHRTdHls
ZSgpCiB9CiAKIFNWR1JlbmRlclN0eWxlOjpTVkdSZW5kZXJTdHlsZSgpCi0gICAgOiBtX2ZpbGxE
YXRhKGRlZmF1bHRTVkdTdHlsZSgpLm1fZmlsbERhdGEpCi0gICAgLCBtX3N0cm9rZURhdGEoZGVm
YXVsdFNWR1N0eWxlKCkubV9zdHJva2VEYXRhKQotICAgICwgbV90ZXh0RGF0YShkZWZhdWx0U1ZH
U3R5bGUoKS5tX3RleHREYXRhKQotICAgICwgbV9pbmhlcml0ZWRSZXNvdXJjZURhdGEoZGVmYXVs
dFNWR1N0eWxlKCkubV9pbmhlcml0ZWRSZXNvdXJjZURhdGEpCi0gICAgLCBtX3N0b3BEYXRhKGRl
ZmF1bHRTVkdTdHlsZSgpLm1fc3RvcERhdGEpCi0gICAgLCBtX21pc2NEYXRhKGRlZmF1bHRTVkdT
dHlsZSgpLm1fbWlzY0RhdGEpCi0gICAgLCBtX3NoYWRvd0RhdGEoZGVmYXVsdFNWR1N0eWxlKCku
bV9zaGFkb3dEYXRhKQotICAgICwgbV9sYXlvdXREYXRhKGRlZmF1bHRTVkdTdHlsZSgpLm1fbGF5
b3V0RGF0YSkKLSAgICAsIG1fbm9uSW5oZXJpdGVkUmVzb3VyY2VEYXRhKGRlZmF1bHRTVkdTdHls
ZSgpLm1fbm9uSW5oZXJpdGVkUmVzb3VyY2VEYXRhKQorICAgIDogbV9maWxsRGF0YShpc01haW5U
aHJlYWQoKSA/IGRlZmF1bHRTVkdTdHlsZSgpLm1fZmlsbERhdGEgOiBTdHlsZUZpbGxEYXRhOjpj
cmVhdGUoKSkKKyAgICAsIG1fc3Ryb2tlRGF0YShpc01haW5UaHJlYWQoKSA/IGRlZmF1bHRTVkdT
dHlsZSgpLm1fc3Ryb2tlRGF0YSA6IFN0eWxlU3Ryb2tlRGF0YTo6Y3JlYXRlKCkpCisgICAgLCBt
X3RleHREYXRhKGlzTWFpblRocmVhZCgpID8gZGVmYXVsdFNWR1N0eWxlKCkubV90ZXh0RGF0YSA6
IFN0eWxlVGV4dERhdGE6OmNyZWF0ZSgpKQorICAgICwgbV9pbmhlcml0ZWRSZXNvdXJjZURhdGEo
aXNNYWluVGhyZWFkKCkgPyBkZWZhdWx0U1ZHU3R5bGUoKS5tX2luaGVyaXRlZFJlc291cmNlRGF0
YSA6IFN0eWxlSW5oZXJpdGVkUmVzb3VyY2VEYXRhOjpjcmVhdGUoKSkKKyAgICAsIG1fc3RvcERh
dGEoaXNNYWluVGhyZWFkKCkgPyBkZWZhdWx0U1ZHU3R5bGUoKS5tX3N0b3BEYXRhIDogU3R5bGVT
dG9wRGF0YTo6Y3JlYXRlKCkpCisgICAgLCBtX21pc2NEYXRhKGlzTWFpblRocmVhZCgpID8gZGVm
YXVsdFNWR1N0eWxlKCkubV9taXNjRGF0YSA6IFN0eWxlTWlzY0RhdGE6OmNyZWF0ZSgpKQorICAg
ICwgbV9zaGFkb3dEYXRhKGlzTWFpblRocmVhZCgpID8gZGVmYXVsdFNWR1N0eWxlKCkubV9zaGFk
b3dEYXRhIDogU3R5bGVTaGFkb3dTVkdEYXRhOjpjcmVhdGUoKSkKKyAgICAsIG1fbGF5b3V0RGF0
YShpc01haW5UaHJlYWQoKSA/IGRlZmF1bHRTVkdTdHlsZSgpLm1fbGF5b3V0RGF0YSA6IFN0eWxl
TGF5b3V0RGF0YTo6Y3JlYXRlKCkpCisgICAgLCBtX25vbkluaGVyaXRlZFJlc291cmNlRGF0YShp
c01haW5UaHJlYWQoKSA/IGRlZmF1bHRTVkdTdHlsZSgpLm1fbm9uSW5oZXJpdGVkUmVzb3VyY2VE
YXRhIDogU3R5bGVSZXNvdXJjZURhdGE6OmNyZWF0ZSgpKQogewogICAgIHNldEJpdERlZmF1bHRz
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmlu
ZGV4IDk1M2Y5MGVhMDc4NDVmMDMwMDA1YTM0YzdkYjYzMTc3ZjZhYjIxNmQuLmQ4MmRkNjUzNzg1
OTBkNWZhMzFiMzBmODI3MTJhMTJkZDYzMzhiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC0yOCwxMiArMjgsMTQgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogCisjaW5jbHVkZSAiQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIK
ICNpbmNsdWRlICJDcnlwdG8uaCIKICNpbmNsdWRlICJJREJDb25uZWN0aW9uUHJveHkuaCIKICNp
bmNsdWRlICJJbWFnZUJpdG1hcE9wdGlvbnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJNaWNyb3Rhc2tzLmgiCisjaW5jbHVkZSAiT2Zmc2NyZWVu
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCkBAIC00
MSw2ICs0Myw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpblBvbGljeS5oIgogI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU29ja2V0UHJvdmlkZXIuaCIKICNp
bmNsdWRlICJXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV29ya2VyTG9h
ZGVyUHJveHkuaCIKQEAgLTc3LDYgKzgwLDkgQEAgV29ya2VyR2xvYmFsU2NvcGU6Oldvcmtlckds
b2JhbFNjb3BlKGNvbnN0IFVSTCYgdXJsLCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgb3JpZ2kKICNl
bmRpZgogICAgICwgbV9zb2NrZXRQcm92aWRlcihzb2NrZXRQcm92aWRlcikKICAgICAsIG1fcGVy
Zm9ybWFuY2UoUGVyZm9ybWFuY2U6OmNyZWF0ZSh0aGlzLCB0aW1lT3JpZ2luKSkKKyAgICAsIG1f
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShudWxscHRy
KSkKKyAgICAsIG1fc2V0dGluZ3MoU2V0dGluZ3M6OmNyZWF0ZShudWxscHRyKSkKKyAgICAsIG1f
Zm9udFNlbGVjdG9yKE9mZnNjcmVlbkZvbnRTZWxlY3Rvcjo6Y3JlYXRlKCp0aGlzKSkKIHsKICNp
ZiAhRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb25Q
cm94eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXgg
MzliOGZjNTFiMDdmZGE4NTY0NDVmNjgxODgzZDBjYjcwYTI1OTEwNS4uOTYxZGNiMmMyYjBmNzM0
ZDAyOWU1NmYxMThjMGUwN2VlYzkxZWU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaApAQCAtNDIsMTEgKzQyLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnM7CiBjbGFzcyBDcnlwdG87CiBjbGFzcyBNaWNyb3Rhc2tRdWV1
ZTsKK2NsYXNzIE9mZnNjcmVlbkZvbnRTZWxlY3RvcjsKIGNsYXNzIFBlcmZvcm1hbmNlOwogY2xh
c3MgU2NoZWR1bGVkQWN0aW9uOworY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBXb3JrZXJJbnNwZWN0
b3JDb250cm9sbGVyOwogY2xhc3MgV29ya2VyTG9jYXRpb247CiBjbGFzcyBXb3JrZXJOYXZpZ2F0
b3I7CkBAIC0xMzEsNiArMTM0LDE0IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGxvbmcgY3Jl
YXRlVW5pcXVlSWRlbnRpZmllcigpIHsgcmV0dXJuIG1fdW5pcXVlSWRlbnRpZmllcisrOyB9CiAK
KyAgICBVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisKKyAgICBD
YWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSB7IHJldHVybiBtX2Nh
Y2hlZFJlc291cmNlTG9hZGVyOyB9CisKKyAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CisKKyAgICBPZmZzY3JlZW5Gb250U2Vs
ZWN0b3ImIGZvbnRTZWxlY3RvcigpIHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yOyB9CisKIHByb3Rl
Y3RlZDoKICAgICBXb3JrZXJHbG9iYWxTY29wZShjb25zdCBVUkwmLCBSZWY8U2VjdXJpdHlPcmln
aW4+JiYsIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQs
IGJvb2wgaXNPbmxpbmUsIFdvcmtlclRocmVhZCYsIGJvb2wgc2hvdWxkQnlwYXNzTWFpbldvcmxk
Q29udGVudFNlY3VyaXR5UG9saWN5LCBSZWY8U2VjdXJpdHlPcmlnaW4+JiYgdG9wT3JpZ2luLCBN
b25vdG9uaWNUaW1lIHRpbWVPcmlnaW4sIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblByb3h5Kiwg
U29ja2V0UHJvdmlkZXIqKTsKIApAQCAtMTUzLDcgKzE2NCw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBpc1dvcmtlckdsb2JhbFNjb3BlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8V29ya2VyR2xvYmFsU2NvcGUqPih0aGlzKTsgfQot
ICAgIFVSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKICAgICBTdHJp
bmcgdXNlckFnZW50KGNvbnN0IFVSTCYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgZGlzYWJsZUV2
YWwoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGZpbmFsOwogICAgIHZvaWQgZGlzYWJsZVdl
YkFzc2VtYmx5KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBmaW5hbDsKQEAgLTIxMCw2ICsy
MjAsMTIgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgUmVmUHRy
PFdvcmtlclNXQ2xpZW50Q29ubmVjdGlvbj4gbV9zd0NsaWVudENvbm5lY3Rpb247CiAjZW5kaWYK
KworICAgIFJlZjxDYWNoZWRSZXNvdXJjZUxvYWRlcj4gbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsK
KworICAgIGNvbnN0IFJlZjxTZXR0aW5ncz4gbV9zZXR0aW5nczsKKworICAgIFJlZjxPZmZzY3Jl
ZW5Gb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>
<flag name="review"
          id="396394"
          type_id="1"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424904</attachid>
            <date>2021-04-01 09:31:42 -0700</date>
            <delta_ts>2021-04-01 09:41:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202793-20210401173140.patch</filename>
            <type>text/plain</type>
            <size>55674</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY4NjRlNzY4OGVkZjIx
NTQyNWViYjk1MmFhNmNiYmIwMjgwYjdlYi4uYjUwNmNkYWJjYjkxM2UyMmMzYmRhNTM4NDhhMGY5
NTJjYjNkNzU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGV4dCByZW5k
ZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBDU1NGb250U2VsZWN0b3IgYW5kIEZv
bnRDYWNoZSB0byBXb3JrZXJHbG9iYWxTY29wZSBhbmQgdmlhCisgICAgICAgIGludGVyZmFjZSBj
aGFuZ2VzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYW5kIEZvbnRTZWxlY3RvciwgdXNlIHRo
ZW0KKyAgICAgICAgYXMgYXBwcm9wcmlhdGUgYWZ0ZXIgZW5hYmxpbmcgdGV4dCBmdW5jdGlvbnMg
b24gV29ya2VyIHRocmVhZHMgd2l0aAorICAgICAgICBPZmZzY3JlZW5DYW52YXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCByZWJhc2VsaW5lZCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6YXBw
ZW5kU291cmNlcyk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjptX3ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjp+
Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9u
dFJhbmdlc0ZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZh
bGxiYWNrRm9udEF0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAg
ICogY3NzL0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1p
bHlJbmRleEZyb21WYWx1ZUlEKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb250cyk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Zm9u
dFNlbGVjdG9yIGNvbnN0KToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250Q2FjaGUp
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250U2VsZWN0b3IpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnRXaXRob3V0VXBkYXRpbmdTdHlsZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5EcmF3
VGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAg
ICogcGFnZS9NZW1vcnlSZWxlYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VDcml0
aWNhbE1lbW9yeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzQ3VycmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6dXBkYXRlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6cmVh
bGl6ZU5leHRGYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1G
b3JlZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OmNvbXB1dGVNYXJrZXJTdHlsZSBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFJlbmRl
ck1lbnVMaXN0Ojpmb250U2VsZWN0b3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6
Zm9udFNlbGVjdG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29t
cHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSk6CisgICAgICAgICogc3R5bGUvTWF0Y2hlZERlY2xh
cmF0aW9uc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGU6OmlzQ2FjaGVhYmxlKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKToKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjp1cGRhdGVGb250KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZvckRv
Y3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjp1c2VGaXhlZERlZmF1bHRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAgICAgICogc3R5bGUvU3R5bGVS
ZXNvbHZlRm9yRm9udFJhdy5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UmVzb2x2ZXI6OmFkZEN1cnJlbnRTVkdGb250RmFjZVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpkZWZhdWx0U3R5bGVGb3JFbGVt
ZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTY29wZTo6cmVzb2x2ZXIpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6On5Xb3JrZXJH
bG9iYWxTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6Zm9udFNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpmb250Q2FjaGUp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaDoKKwogMjAyMS0wMy0zMSAg
Q2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWFrZSBGb250Q2FjaGUg
Y29uc3RydWN0YWJsZSBhbmQgc2FmZSB0byB1c2Ugb2ZmIHRoZSBtYWluIHRocmVhZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAKaW5kZXggODE3MWFjY2VhN2VmNDdjYjE1Mzk5NWU5NGFhOGEw
MTE5ZDdhZTM2MC4uYjlkNTNiODZkYTI0ODJkOGMwZjQ3ODIzNGNjNjlhOGExYzQ0ZjRlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgQ1NTRm9u
dEZhY2U6OmFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3Qm
IHNyY0xpc3QsIFNjCiAgICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlz
U3VwcG9ydGVkRm9ybWF0KCkgJiYgaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwogICAg
ICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250
KCZkb2N1bWVudCwgZm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRT
aGFkb3dUcmVlKSkKLSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbWFrZVVuaXF1ZTxDU1NG
b250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgZG9jdW1lbnQuZm9udFNl
bGVjdG9yKCksICpjYWNoZWRGb250KTsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbWFr
ZVVuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgKmRv
Y3VtZW50LmZvbnRTZWxlY3RvcigpLCAqY2FjaGVkRm9udCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgc291cmNlID0gKGZvbnRGYWNlRWxlbWVudCA/IG1ha2VV
bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZvbnRGYWNlLCBpdGVtLnJlc291cmNlKCksICpmb250
RmFjZUVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDM4
ZWZiNjY2OGQwODg4ZTAxMWJjMGVmMGFlODM4YjQ1MDU1YTNhMWUuLjY5MjllZTg0YWVjOTVjMGUw
ZTAxNjEwYWY1YjEyZmIyYWRkNTgwYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsK
IENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX2NvbnRl
eHQobWFrZVdlYWtQdHIoY29udGV4dCkpCisgICAgLCBtX2ZvbnRDYWNoZShtYWtlUmVmKGNvbnRl
eHQuZm9udENhY2hlKCkpKQogICAgICwgbV9jc3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6
Y3JlYXRlKHRoaXMpKQogICAgICwgbV9mb250TW9kaWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250
TW9kaWZpZWQoKTsgfSkKICAgICAsIG1fZm9udExvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRT
ZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKQpAQCAtODIsNyArODMsNyBAQCBDU1NGb250
U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KQogICAgICAgICAgICAgbV9mb250RmFtaWx5TmFtZXMudW5jaGVja2VkQXBwZW5kKGZhbWlseU5h
bWUpOwogICAgIH0KIAotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuYWRkQ2xpZW50KCp0aGlz
KTsKKyAgICBtX2ZvbnRDYWNoZS0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX2Nzc0ZvbnRGYWNl
U2V0LT5hZGRGb250TW9kaWZpZWRPYnNlcnZlcihtX2ZvbnRNb2RpZmllZE9ic2VydmVyKTsKICAg
ICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3IgJXAgY3RvciIsIHRoaXMpOwogCkBAIC05NCw3
ICs5NSw3IEBAIENTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3RvcigpCiAgICAgTE9HKEZv
bnRzLCAiQ1NTRm9udFNlbGVjdG9yICVwIGR0b3IiLCB0aGlzKTsKIAogICAgIHN0b3BMb2FkaW5n
QW5kQ2xlYXJGb250cygpOwotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICBtX2ZvbnRDYWNoZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAogRm9u
dEZhY2VTZXQqIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXRJZkV4aXN0cygpCkBAIC0zMzAs
NyArMzMxLDcgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKIAogICAgIGlmICghcmVzb2x2ZUdl
bmVyaWNGYW1pbHlGaXJzdCkKICAgICAgICAgcmVzb2x2ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHko
KTsKLSAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHko
KmZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICBhdXRvIGZv
bnQgPSBtX2ZvbnRDYWNoZS0+Zm9udEZvckZhbWlseSgqZm9udERlc2NyaXB0aW9uRm9yTG9va3Vw
LCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQs
IGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgISFmb250KTsKICAgICByZXR1cm4gRm9udFJhbmdl
cyB7IFdURk1vdmUoZm9udCkgfTsKQEAgLTQ0Miw3ICs0NDMsNyBAQCBSZWZQdHI8Rm9udD4gQ1NT
Rm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdAogICAgIGlmICghbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRGYWxsYmFj
a1ByZWZlcnNQaWN0b2dyYXBocykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byYg
cGljdG9ncmFwaEZvbnRGYW1pbHkgPSBtX2NvbnRleHQtPnNldHRpbmdzVmFsdWVzKCkuZm9udEdl
bmVyaWNGYW1pbGllcy5waWN0b2dyYXBoRm9udEZhbWlseSgpOwotICAgIGF1dG8gZm9udCA9IEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHBpY3Rv
Z3JhcGhGb250RmFtaWx5KTsKKyAgICBhdXRvIGZvbnQgPSBtX2ZvbnRDYWNoZS0+Zm9udEZvckZh
bWlseShmb250RGVzY3JpcHRpb24sIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKICAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpICYmIGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQogICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoZG93bmNhc3Q8RG9jdW1lbnQ+KCpt
X2NvbnRleHQpLCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IGE5ZmEyOGZmN2E1NDFmNDg4NjhhNWM1NTAwYjhkOWQz
YzRhZmEwNDIuLjkzMTI2MzE0ODg4MjZlZDZkNzM1NDFhNTM5NGYzNzI3MWJjOWYyNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmLCBib29sIGlzSW5p
dGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogCisgICAgRm9udENhY2hlJiBm
b250Q2FjaGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAqbV9mb250Q2FjaGU7IH0KICAgICB2b2lk
IGZvbnRDYWNoZUludmFsaWRhdGVkKCkgZmluYWw7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKQEAgLTEyMyw2ICsxMjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQZW5kaW5nRm9udEZh
Y2VSdWxlPiBtX3N0YWdpbmdBcmVhOwogCiAgICAgV2Vha1B0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEZvbnRDYWNoZT4gbV9mb250Q2FjaGU7CiAgICAg
UmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRGYWNlU2V0OwogICAgIFJlZjxDU1NGb250RmFjZVNl
dD4gbV9jc3NGb250RmFjZVNldDsKICAgICBIYXNoU2V0PEZvbnRTZWxlY3RvckNsaWVudCo+IG1f
Y2xpZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCmluZGV4IDM1ZmZjMDM4MmExNWEyMGZhNGVl
ODcxYzg2MzhlYTYxNjhlM2JlMWIuLjEzMmE1NmRlMmQ0ZDNmZGQ0MGVhZmQyNzE2YWZhZTY2OTdi
YjBjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEZv
bnRGYWNlOjpzZXRFcnJvclN0YXRlKCkKIAogUmVmPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFNvdXJjZSYmIHNvdXJj
ZSwgY29uc3QgRGVzY3JpcHRvcnMmIGRlc2NyaXB0b3JzKQogewotICAgIGF1dG8gcmVzdWx0ID0g
YWRvcHRSZWYoKm5ldyBGb250RmFjZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZSgqZG9jdW1lbnQuZm9udFNlbGVjdG9y
KCkpKTsKICAgICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogCiAgICAgYm9vbCBkYXRhUmVx
dWlyZXNBc3luY2hyb25vdXNMb2FkaW5nID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA3NzZiODgy
MTExYjlmYjgzOWRhOWVlMThkNGNmZmU1OTFhY2VlMDJmLi5mOTc0ZTlmY2E0OTI3OWRiNmM1ZmJl
ZjkwMDY2ZDY0YzA3NDlkMzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5j
bHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTdHlsZUNvbG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTMyMzgsNiArMzIzOSwyOSBAQCBjb25zdCBBdG9tU3RyaW5nJiBnZW5l
cmljRm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQgaWRlbnQpCiAgICAgfQogfQogCitX
ZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXggZ2VuZXJpY0ZvbnRGYW1pbHlJ
bmRleEZyb21WYWx1ZUlEKENTU1ZhbHVlSUQgaWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkg
eworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1p
bHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6U2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1
ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5
TmFtZXNJbmRleDo6U2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgor
ICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpD
dXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4g
V2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFtaWx5Owor
ICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFt
aWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENT
U1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlO
YW1lczo6RmFtaWx5TmFtZXNJbmRleDo6UGljdG9ncmFwaEZhbWlseTsKKyAgICBjYXNlIENTU1Zh
bHVlU3lzdGVtVWk6CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWls
eU5hbWVzSW5kZXg6OlN5c3RlbVVpRmFtaWx5OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpG
YW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVycwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAppbmRleCA5MTNjMTA4ZjNhYzk0M2Y0YjBhNTQ5MmI0ZWM1ZDE5YWUwZGE2MzRlLi43MmFh
YzVlYmEwMTM3Y2JlYTBjODFiOTkyMzZjNjA2Y2M3ZTkwNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTQyLDYg
KzQyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lcyB7CitlbnVtIGNsYXNzIEZhbWlseU5hbWVzSW5kZXg7Cit9CisKIC8vIFdoZW4g
dGhlc2UgZnVuY3Rpb25zIGFyZSBzdWNjZXNzZnVsLCB0aGV5IHdpbGwgY29uc3VtZSBhbGwgdGhl
IHJlbGV2YW50CiAvLyB0b2tlbnMgZnJvbSB0aGUgcmFuZ2UgYW5kIGFsc28gY29uc3VtZSBhbnkg
d2hpdGVzcGFjZSB3aGljaCBmb2xsb3dzLiBXaGVuCiAvLyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdl
IGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgd2UncmUgbG9va2luZyBmb3IsIHRoZSByYW5nZQpAQCAt
MTcwLDYgKzE3NCw3IEBAIE9wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9udFNpemVSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuCiBPcHRpb25hbDxMaW5lSGVp
Z2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSk7CiBPcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwogY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJp
Y0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEKTsKK1dlYktpdEZvbnRGYW1pbHlOYW1l
czo6RmFtaWx5TmFtZXNJbmRleCBnZW5lcmljRm9udEZhbWlseUluZGV4RnJvbVZhbHVlSUQoQ1NT
VmFsdWVJRCk7CiAKIGJvb2wgaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZG91YmxlIGFuZ2xlSW5E
ZWdyZWVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNTM0MTMwZWU2MjZiNTZkZjM4
N2UwNTU0MTY0Njc1OTcxZmE5ZWM1NC4uM2ZjNzIxZDJiMDE5YWNjMGZkYmIyMzI3ZjIyNjBhNjI4
ZjhiNzYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yMDQzLDcgKzIwNDMsNyBAQCB2
b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlVHlwZSB0eXBlKQogICAgICAg
ICAgICAgLy8gSW5zZXJ0aW5nIHRoZSBwaWN0b2dyYXBoIGZvbnQgYXQgdGhlIGVuZCBvZiB0aGUg
Zm9udCBmYWxsYmFjayBsaXN0IGlzIGRvbmUgYnkgdGhlCiAgICAgICAgICAgICAvLyBmb250IHNl
bGVjdG9yLCBzbyBzZXQgYSBmb250IHNlbGVjdG9yIGlmIG5lZWRlZC4KICAgICAgICAgICAgIGlm
IChzZXR0aW5ncygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocygpKQotICAgICAgICAg
ICAgICAgIGRvY3VtZW50U3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmZvbnRTZWxlY3Rvcigp
KTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZv
bnRTZWxlY3RvcigpKTsKIAogICAgICAgICAgICAgYXV0byBkb2N1bWVudENoYW5nZSA9IFN0eWxl
OjpkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRTdHlsZSwgbV9yZW5kZXJWaWV3LT5zdHlsZSgpKTsK
ICAgICAgICAgICAgIGlmIChkb2N1bWVudENoYW5nZSAhPSBTdHlsZTo6Q2hhbmdlOjpOb25lKQpA
QCAtMjA2NCw3ICsyMDY0LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29sdmVT
dHlsZVR5cGUgdHlwZSkKIAogICAgICAgICBtX2luU3R5bGVSZWNhbGMgPSBmYWxzZTsKIAotICAg
ICAgICBmb250U2VsZWN0b3IoKS5sb2FkUGVuZGluZ0ZvbnRzKCk7CisgICAgICAgIGZvbnRTZWxl
Y3RvcigpLT5sb2FkUGVuZGluZ0ZvbnRzKCk7CiAKICAgICAgICAgaWYgKHN0eWxlVXBkYXRlKSB7
CiAgICAgICAgICAgICB1cGRhdGVSZW5kZXJUcmVlKFdURk1vdmUoc3R5bGVVcGRhdGUpKTsKQEAg
LTMxNjgsNyArMzE2OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogCiAgICAg
bV9wcm9jZXNzaW5nTG9hZEV2ZW50ID0gZmFsc2U7CiAKLSAgICBpZiAoYXV0byBmb250RmFjZVNl
dCA9IG1ha2VSZWZQdHIoZm9udFNlbGVjdG9yKCkuZm9udEZhY2VTZXRJZkV4aXN0cygpKSkKKyAg
ICBpZiAoYXV0byBmb250RmFjZVNldCA9IG1ha2VSZWZQdHIoZm9udFNlbGVjdG9yKCktPmZvbnRG
YWNlU2V0SWZFeGlzdHMoKSkpCiAgICAgICAgIGZvbnRGYWNlU2V0LT5kb2N1bWVudERpZEZpbmlz
aExvYWRpbmcoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pIHx8IFBM
QVRGT1JNKEdUSykKQEAgLTczMDUsNyArNzMwNSw3IEBAIFJlZjxEb2N1bWVudEZyYWdtZW50PiBE
b2N1bWVudDo6ZG9jdW1lbnRGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCkKIFJlZjxGb250RmFj
ZVNldD4gRG9jdW1lbnQ6OmZvbnRzKCkKIHsKICAgICB1cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0g
ICAgcmV0dXJuIGZvbnRTZWxlY3RvcigpLmZvbnRGYWNlU2V0KCk7CisgICAgcmV0dXJuIGZvbnRT
ZWxlY3RvcigpLT5mb250RmFjZVNldCgpOwogfQogICAgIAogRWRpdGluZ0JlaGF2aW9yIERvY3Vt
ZW50OjplZGl0aW5nQmVoYXZpb3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA0MmJl
YTg4OGVhMTkyYWRkZjRjOGM3N2YwYzBjNjlmYmUxNDZhMjUyLi5jZmMzYmQ3N2QyZDFjYjkzNmI3
ZjA5N2I1Y2E3MTYyYjI2NWQ2Mjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNTQxLDggKzU0
MSw4IEBAIHB1YmxpYzoKIAogICAgIFN0eWxlOjpSZXNvbHZlciYgdXNlckFnZW50U2hhZG93VHJl
ZVN0eWxlUmVzb2x2ZXIoKTsKIAotICAgIENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKCkg
eyByZXR1cm4gbV9mb250U2VsZWN0b3I7IH0KLSAgICBjb25zdCBDU1NGb250U2VsZWN0b3ImIGZv
bnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yOyB9CisgICAgQ1NTRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBmaW5hbCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5w
dHIoKTsgfQorICAgIGNvbnN0IENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9mb250U2VsZWN0b3IucHRyKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgY29uc3Q7CiAgICAgYm9vbCBpc0lnbm9yaW5nUGVu
ZGluZ1N0eWxlc2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApp
bmRleCBkMjcxN2JmNzgzMWY0ZmI1ZDc4ZjA1MGM5NGI0YWE2NzEyY2I2OWQ4Li5jNzczODMxYjg4
YzJiMDJiMDViYzJmZmI2ZjA1M2U4ZGFmMWE1ZjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
RGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFcnJv
ckV2ZW50LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNXb3Jr
ZXJHbG9iYWxTY29wZS5oIgpAQCAtMjI2LDYgKzIyNywxMSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmRpZExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgVVJMJikKIHsKIH0K
IAorRm9udENhY2hlJiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250Q2FjaGUoKQoreworICAg
IHJldHVybiBGb250Q2FjaGU6OnNpbmdsZXRvbigpOworfQorCiB2b2lkIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmZvckVhY2hBY3RpdmVET01PYmplY3QoY29uc3QgRnVuY3Rpb248U2hvdWxkQ29u
dGludWUoQWN0aXZlRE9NT2JqZWN0Jik+JiBhcHBseSkgY29uc3QKIHsKICAgICAvLyBJdCBpcyBu
b3QgYWxsb3dlZCB0byBydW4gYXJiaXRyYXJ5IHNjcmlwdCBvciBjb25zdHJ1Y3QgbmV3IEFjdGl2
ZURPTU9iamVjdHMgd2hpbGUgd2UgYXJlIGl0ZXJhdGluZyBvdmVyIEFjdGl2ZURPTU9iamVjdHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCA4YmEy
MzI5N2JiMTlhZjkwN2IxMWIwZGJkMmNhNGQ5MGRlNjVhZDAxLi40ODIyOWZkODE0NDk1NjAwZDQy
MzBmYmQ1MGRkZjhmMjYxZTJhY2E4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKQEAgLTYwLDEwICs2MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIENhY2hlZFNjcmlwdDsKK2NsYXNzIENTU0ZvbnRTZWxl
Y3RvcjsKIGNsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIEV2ZW50UXVldWU7CiBjbGFzcyBF
dmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBFdmVudFRhcmdldDsKK2NsYXNzIEZvbnRDYWNoZTsK
IGNsYXNzIE1lc3NhZ2VQb3J0OwogY2xhc3MgUHVibGljVVJMTWFuYWdlcjsKIGNsYXNzIFJlamVj
dGVkUHJvbWlzZVRyYWNrZXI7CkBAIC0xNjIsNiArMTY0LDkgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGRpZExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgVVJMJik7CiAKKyAg
ICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCk7CisgICAgdmlydHVhbCBDU1NGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIHZvaWQgcmVm
KCkgeyByZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBk
ZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCAxNDE1
NTdmZGM5N2I0MjBiYzEyMzljMTMxNzc0ZjM0N2M2ZWNjMDRmLi4xNGRjYmRjN2NiMDNkZTE2NTVm
ZDAxZjgwYzhkMDczMTZiMzM1N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTE1MSw3ICsxNTEsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0
eWxlKGNvbnN0IFN0cmluZyYgbmV3Rm9udAogICAgIHJlYWxpemVTYXZlcygpOwogICAgIG1vZGlm
aWFibGVTdGF0ZSgpLnVucGFyc2VkRm9udCA9IG5ld0ZvbnRTYWZlQ29weTsKIAotICAgIG1vZGlm
aWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKmZv
bnRDYXNjYWRlKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoKmRvY3Vt
ZW50LmZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOwogICAgIEFTU0VSVChzdGF0ZSgpLmZv
bnQucmVhbGl6ZWQoKSk7CiAgICAgQVNTRVJUKHN0YXRlKCkuZm9udC5pc1BvcHVsYXRlZCgpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggZDljYTZjYjM1ZjY3NmYwMDhiZTI2MTBiOTRj
MDdiZjQ4ODAyMmRlNS4uYzk4ZTkxMzJmNjQ0NDYzMWIzYzgxZWNiMDg1OGI3MDk0YWY1MmY0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTIzNjYsOCArMjM2Niw2IEBAIGJvb2wgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FuRHJhd1RleHQoZmxvYXQgeCwgZmxvYXQgeSwgYm9v
bCBmaWxsLCBPcHRpCiAgICAgaWYgKCFmb250UHJveHkoKS0+cmVhbGl6ZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQg
c2NyaXB0RGlzYWxsb3dlZFNjb3BlOwotCiAgICAgYXV0byogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCBmMTc4ODc0YWZhNjY3OWY5MDFhNWVjZWUzMmJiNGZmNWRkM2YyOTM4
Li45ZGM0ZWNjNGNjZjM5ZjlmYmIyYWQzZjI0Yzc4ZmI3NjAyNTM2MDUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM4LDggKzM4LDggQEAKICNpbmNsdWRlICJDU1NGb250
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCIKICNpbmNsdWRlICJUZXh0TWV0cmljcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC02Myw4ICs2Myw2IEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjb21taXQoKQogdm9pZCBPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQog
ewogICAgIGF1dG8mIGNvbnRleHQgPSAqY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKLSAgICBpZiAoIWlzPERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG5ld0ZvbnQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC05MCwxMSAr
ODgsOSBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
b25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoRGVmYXVsdEZvbnRTaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KERlZmF1bHRGb250U2l6ZSk7CiAKLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50Pihjb250ZXh0KTsKLSAgICBhdXRvIGZvbnRDYXNjYWRlID0gU3R5bGU6OnJlc29sdmVGb3JG
b250UmF3KCpmb250UmF3LCBXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIGRvY3VtZW50KTsKLQor
ICAgIGF1dG8gZm9udENhc2NhZGUgPSBTdHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcoKmZvbnRSYXcs
IFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgY29udGV4dCk7CiAgICAgaWYgKGZvbnRDYXNjYWRl
KQotICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9u
dFNlbGVjdG9yKCksICpmb250Q2FzY2FkZSk7CisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZv
bnQuaW5pdGlhbGl6ZSgqY29udGV4dC5mb250U2VsZWN0b3IoKSwgKmZvbnRDYXNjYWRlKTsKIH0K
IAogQ2FudmFzRGlyZWN0aW9uIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGly
ZWN0aW9uKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmlu
ZGV4IGM0ZTQ2ZTg3MmM2YTZkMDIzMTdlYjE4MjE1NTI1NjNmZmVhNTVjZmEuLjI4NzM0NTQxMDI1
MDA4ZjA5N2QxYzI0YmFlMDZjZWM0Mzc0ODIzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6
OnN0b3BMb2FkaW5nKCkKICAgICBjYW5jZWxBbGwobV9tdWx0aXBhcnRTdWJyZXNvdXJjZUxvYWRl
cnMpOwogCiAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgZG9jdW1lbnQtPmZvbnRTZWxlY3RvcigpLnN1c3BlbmRGb250TG9hZGluZ1RpbWVyKCk7Cisg
ICAgICAgIGRvY3VtZW50LT5mb250U2VsZWN0b3IoKS0+c3VzcGVuZEZvbnRMb2FkaW5nVGltZXIo
KTsKIAogICAgIC8vIEFwcGNhY2hlIHVzZXMgUmVzb3VyY2VIYW5kbGUgZGlyZWN0bHksIERvY3Vt
ZW50TG9hZGVyIGRvZXNuJ3QgY291bnQgdGhlc2UgbG9hZHMuCiAgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlSG9zdC0+c3RvcExvYWRpbmdJbkZyYW1lKCptX2ZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
bW9yeVJlbGVhc2UuY3BwCmluZGV4IDRhZDUzNWRkNzllNTQ5MjIxNGMwMDA3M2E1M2RlNDU4N2Ni
NDhhY2YuLjgxYjg1OGQ2NmZjN2E1NjY3ZTQyY2YxZDcxNWFhOTU0ODZkMGQ0YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyB2
b2lkIHJlbGVhc2VDcml0aWNhbE1lbW9yeShTeW5jaHJvbm91cyBzeW5jaHJvbm91cywgTWFpbnRh
aW5CYWNrRm9yd2FyZENhCiAKICAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogY29weVRvVmVjdG9y
T2Y8UmVmUHRyPERvY3VtZW50Pj4oRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSkgewogICAgICAg
ICBkb2N1bWVudC0+c3R5bGVTY29wZSgpLnJlbGVhc2VNZW1vcnkoKTsKLSAgICAgICAgZG9jdW1l
bnQtPmZvbnRTZWxlY3RvcigpLmVtcHR5Q2FjaGVzKCk7CisgICAgICAgIGRvY3VtZW50LT5mb250
U2VsZWN0b3IoKS0+ZW1wdHlDYWNoZXMoKTsKICAgICAgICAgZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCkuZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmlu
ZGV4IDVjZWE3NDUyZDVmZjJlNmNiNWYzZTExNjY1OTdiNzlmZDhmNzNkN2QuLjU0NGZlNmU1MjM5
ZmQyNzk2NjAxZjYxNmRkMjA5ZWM1MzAyNGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29s
IEZvbnRDYXNjYWRlOjppc0N1cnJlbnQoY29uc3QgRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3Ip
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZvbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1fZm9udHMtPmdlbmVyYXRpb24oKSAhPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVy
YXRpb24oKSkKKyAgICBpZiAobV9mb250cy0+Z2VuZXJhdGlvbigpICE9IGZvbnRTZWxlY3Rvci5m
b250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
bV9mb250cy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IGZvbnRTZWxlY3Rvci52ZXJzaW9uKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2OCw3ICsxNjgsOCBAQCB2b2lkIEZvbnRDYXNj
YWRlOjp1cGRhdGVGb250cyhSZWY8Rm9udENhc2NhZGVGb250cz4mJiBmb250cykgY29uc3QKIAog
dm9pZCBGb250Q2FzY2FkZTo6dXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVj
dG9yKSBjb25zdAogewotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlRm9udENhc2Nh
ZGUoKnRoaXMsIFdURk1vdmUoZm9udFNlbGVjdG9yKSk7CisgICAgYXV0byYgZm9udENhY2hlID0g
Zm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT5mb250Q2FjaGUoKSA6IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCk7CisgICAgZm9udENhY2hlLnVwZGF0ZUZvbnRDYXNjYWRlKCp0aGlzLCBXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpOwogfQogCiBHbHlwaEJ1ZmZlciBGb250Q2FzY2FkZTo6bGF5b3V0VGV4
dChDb2RlUGF0aCBjb2RlUGF0aFRvVXNlLCBjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwCmluZGV4IDljN2JlZWJkOGQ1MjdjNzgxMGE5MDE0NDk1YzAxZjNjYTg4NGRh
ZTEuLjVkNzU2NzhhNDc1MzE0Y2RiOTNhODliMGFlNmNhYmI3ZmEyNGVjZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3Bw
CkBAIC0xMDIsNyArMTAyLDcgQEAgRm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyhS
ZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikKICAgICA6IG1fY2FjaGVkUHJpbWFy
eUZvbnQobnVsbHB0cikKICAgICAsIG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKICAgICAs
IG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3RvciA/IG1fZm9udFNlbGVjdG9yLT52
ZXJzaW9uKCkgOiAwKQotICAgICwgbV9nZW5lcmF0aW9uKEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
Z2VuZXJhdGlvbigpKQorICAgICwgbV9nZW5lcmF0aW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250
U2VsZWN0b3ItPmZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSA6IEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuZ2VuZXJhdGlvbigpKQogewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgaWYgKCFpc01haW5U
aHJlYWQoKSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4
dEZhbGxiYWNrKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogewog
ICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOwog
Ci0gICAgYXV0byYgZm9udENhY2hlID0gRm9udENhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBhdXRv
JiBmb250Q2FjaGUgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPmZvbnRDYWNoZSgpIDog
Rm9udENhY2hlOjpzaW5nbGV0b24oKTsKICAgICB3aGlsZSAoaW5kZXggPCBkZXNjcmlwdGlvbi5l
ZmZlY3RpdmVGYW1pbHlDb3VudCgpKSB7CiAgICAgICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFr
ZVZpc2l0b3IoWyZdKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkgLT4gRm9udFJhbmdlcyB7CiAg
ICAgICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTE4MSw3ICsxODEsOSBAQCBjb25z
dCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChj
b25zdCBGb250Q2FzY2FkZURlcwogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzW2luZGV4XTsKIAogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5n
ZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9u
KCkgPT0gbV9nZW5lcmF0aW9uKTsKKworICAgIGF1dG8mIGZvbnRDYWNoZSA9IG1fZm9udFNlbGVj
dG9yID8gbV9mb250U2VsZWN0b3ItPmZvbnRDYWNoZSgpIDogRm9udENhY2hlOjpzaW5nbGV0b24o
KTsKKyAgICBBU1NFUlQoZm9udENhY2hlLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwog
CiAgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOwogICAg
IGF1dG8mIGZvbnRSYW5nZXMgPSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOwpAQCAt
MTkxLDcgKzE5Myw3IEBAIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAgICAgICAgIGlmIChmb250
UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKQogICAgICAgICAgICAgZm9udFJhbmdl
cyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFu
ZGFyZEZhbWlseSk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQotICAgICAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVz
b3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBmb250UmFuZ2VzID0g
Rm9udFJhbmdlcyhmb250Q2FjaGUubGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbikp
OwogICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2Zj
NTQ4MWFhNjM5ODBiNjEwMDZkODVjMmY1MC4uNjU0OGU3NmY5OTYxZmY3ZTFhNTg5ZjVjYmIxYzA1
NzJlYmJhZDg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBGb250Q2FjaGU7CiBjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOwogY2xhc3MgRm9u
dERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFNlbGVjdG9yQ2xpZW50OwpAQCAtNTQsNiArNTUsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnRE
YXRhVVJMTG9hZGluZyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5KSA9IDA7CiAKKyAgICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIHsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRT
ZWxlY3RvckNsaWVudCYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggYTA4
ODJmN2MyY2Y4YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uYjU1NmRmODQyMzNhZWI2Zjhh
ZjdmOGVlYzdiZjUzNzhhMDIyMDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAg
LTEzOCw3ICsxMzgsOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAgICAgICAgICAgcmV0
dXJuIGZhbGxiYWNrRm9udDsKICAgICB9CiAKLSAgICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9u
dERlc2NyaXB0aW9uLCBiYXNlRm9udCwgSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vLCBwcmVmZXJDb2xv
cmVkRm9udCA/IEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6OlllcyA6IEZvbnRDYWNoZTo6
UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgYXV0byYg
Zm9udENhY2hlID0gZm9udFNlbGVjdG9yKCkgPyBmb250U2VsZWN0b3IoKS0+Zm9udENhY2hlKCkg
OiBGb250Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIGlmIChhdXRvIHN5c3RlbUZhbGxiYWNrID0g
Zm9udENhY2hlLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhtX2ZvbnREZXNjcmlwdGlvbiwg
YmFzZUZvbnQsIElzRm9yUGxhdGZvcm1Gb250OjpObywgcHJlZmVyQ29sb3JlZEZvbnQgPyBGb250
Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpZZXMgOiBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRG
b250OjpObywgY2hhcmFjdGVycywgbGVuZ3RoKSkgewogICAgICAgICBpZiAoc3lzdGVtRmFsbGJh
Y2stPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0
aCkgJiYgKCFwcmVmZXJDb2xvcmVkRm9udCB8fCBzeXN0ZW1GYWxsYmFjay0+cGxhdGZvcm1EYXRh
KCkuaXNDb2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3lzdGVtRmFsbGJh
Y2suZ2V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggM2Yz
MjQ2NmRhZmI1ZjhlNzIxZDVjZDEyOTcwMWVjMDM0N2U1ZTM2Ny4uZjYxMGU3YjdlMTEwYjhjNTFi
MWMwODE2YjAwOTUxOGRiNzg3ZDlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAg
ICAgICAgLy8gdGhlIGJhc2lzIG9mIHRoZSBncmlkLgogICAgICAgICAgICAgaWYgKG5ld1N0eWxl
LmZvbnREZXNjcmlwdGlvbigpICE9IHZpZXcoKS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgpLnNldEZvbnREZXNjcmlwdGlv
bihGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsgbmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkgfSk7
Ci0gICAgICAgICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBk
YXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICB2aWV3KCku
bXV0YWJsZVN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUoZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDA2NGY4MTQ4ODlhNTQ3ZGZkZWJkMzZlZWYzYzg0
M2ZlN2QzYWIzNTIuLjczOGQwOWE5YmU2YTQwOTcxZjg3OTI3Mzc4NTExYmE4M2UxNWM0NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTEyMSw3ICsx
MjEsNyBAQCBzdGF0aWMgRm9udENhc2NhZGUgYm9sZGVyKERvY3VtZW50JiBkb2N1bWVudCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGZvbnQuZm9udERl
c2NyaXB0aW9uKCk7CiAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KGRlc2NyaXB0aW9uLmJvbGRl
cldlaWdodCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEZvbnRDYXNjYWRlIHsgV1RGTW92ZShkZXNj
cmlwdGlvbiksIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250LndvcmRTcGFjaW5nKCkgfTsKLSAg
ICByZXN1bHQudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisgICAgcmVzdWx0LnVw
ZGF0ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgICAgIGF1dG8g
ZGVzY3JpcHRpb24gPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KGRlc2NyaXB0aW9uLmJvbGRlcldlaWdodCgpKTsKICAgICAgICAgaXRl
bUZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2NyaXB0aW9uKSwgaXRlbUZvbnQubGV0dGVy
U3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKLSAgICAgICAgaXRlbUZvbnQudXBk
YXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgaXRlbUZvbnQudXBkYXRl
KGRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGl0
ZW0gdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5k
ZXggNzk3N2FkZGI3Y2ExNmQ1MGU4MDU2NGQ2M2Q0NmZmMzk0NDAyNDRkNy4uYTg2NDNhMWJjNjU0
YjIxYTI5YzQwZTQxZjEyMzdmMTIxYWQxZTkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIFJlbmRlclN0eWxlIFJlbmRl
ckxpc3RJdGVtOjpjb21wdXRlTWFya2VyU3R5bGUoKSBjb25zdAogICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVs
YXJOdW1iZXJzKTsKICAgICBtYXJrZXJTdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTsKLSAgICBtYXJrZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgm
ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgbWFya2VyU3R5bGUuZm9udENhc2NhZGUo
KS51cGRhdGUoZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgbWFya2VyU3R5bGUuc2V0
VW5pY29kZUJpZGkoRVVuaWNvZGVCaWRpOjpJc29sYXRlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRX
aGl0ZVNwYWNlKFdoaXRlU3BhY2U6OlByZSk7CiAgICAgbWFya2VyU3R5bGUuc2V0VGV4dFRyYW5z
Zm9ybShUZXh0VHJhbnNmb3JtOjpOb25lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCmluZGV4IGYzOTRiZDYzMzZlNDQ0ODIyN2YxNmFlOTk5NmRlNTVmMjRj
Y2Y4ZWQuLmEwZDg4MjBlZDVhYWRlOWM0NWM3YTQ1ZGE0ZTljMmQ3YjM0MGVjYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAtNjM3LDcgKzYzNyw3
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5k
ZXgpCiAKIEZvbnRTZWxlY3RvciogUmVuZGVyTWVudUxpc3Q6OmZvbnRTZWxlY3RvcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpOworICAgIHJldHVybiBk
b2N1bWVudCgpLmZvbnRTZWxlY3RvcigpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCmluZGV4
IDhlMmRjYjAzNTNlZDk0ZjYwYmQ0YzRhZGNlYjM1M2M2M2M3Nzc5NDAuLmM0ZTBkZTdlOGQ2YzQ4
MmVjM2ZiMzk2NjQzOGJmYjIyMjU2ZWUwNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgUmVuZGVy
U2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiAKIEZvbnRT
ZWxlY3RvciogUmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpOworICAgIHJldHVybiBkb2N1bWVudCgp
LmZvbnRTZWxlY3RvcigpOwogfQogCiBIb3N0V2luZG93KiBSZW5kZXJTZWFyY2hGaWVsZDo6aG9z
dFdpbmRvdygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCBmZGZiOTU4ZTc1ODRhYTQwMjhhMzA1NDIwMzA2
NDJjZDM2ZmU0ODliLi40YmM2YmVhM2Y1NTU1YmFiZWEyODU2NDEyMjUyNWViMjQ1OGY4ZTA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNv
bXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uOjpIb3Jp
em9udGFsKTsKIAogICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbiksIDAsIDApOwotICAgIHNjYWxlZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBzY2FsZWRGb250LnVwZGF0ZShyZW5kZXJlci5kb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKIH0KIAogU1ZHSW5saW5lVGV4dEJveCogUmVuZGVyU1ZH
SW5saW5lVGV4dDo6Zmlyc3RUZXh0Qm94KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL01hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9NYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuY3BwCmluZGV4IGNlNWYxNWNmNmQ4ZWQ1NTZm
MDRkZWFmYmQwNzE4YWIwYWFmYjFmOTIuLjk3ZmY0ZWM2NjVjZTJkN2VmMmNmODg4OWNlNTNkOGE0
YjkwMjkzYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL01hdGNoZWREZWNsYXJh
dGlvbnNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvTWF0Y2hlZERlY2xhcmF0
aW9uc0NhY2hlLmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29sIE1hdGNoZWREZWNsYXJhdGlvbnND
YWNoZTo6aXNDYWNoZWFibGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyUwog
CiAgICAgLy8gR2V0dGluZyBjb21wdXRlZCBzdHlsZSBhZnRlciBhIGZvbnQgZW52aXJvbm1lbnQg
Y2hhbmdlIGJ1dCBiZWZvcmUgZnVsbCBzdHlsZSByZXNvbHV0aW9uIG1heSBpbnZvbHZlIHN0eWxl
cyB3aXRoIG5vbi1jdXJyZW50IGZvbnRzLgogICAgIC8vIEF2b2lkIGNhY2hpbmcgdGhlbS4KLSAg
ICBhdXRvJiBmb250U2VsZWN0b3IgPSBlbGVtZW50LmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCk7
CisgICAgYXV0byYgZm9udFNlbGVjdG9yID0gKmVsZW1lbnQuZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKTsKICAgICBpZiAoIXN0eWxlLmZvbnRDYXNjYWRlKCkuaXNDdXJyZW50KGZvbnRTZWxlY3Rv
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNj
YWRlKCkuaXNDdXJyZW50KGZvbnRTZWxlY3RvcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCmlu
ZGV4IDNhNWI1NjEwYmE3NmMzOTY3NDBmNjEwMDFjZWI4ZDJmMGEzZDk4YzkuLjc3MzFmYmQ3YTE3
ZGMwYmYyN2QyODY3ZjY3MmU2MWE1NTRlYTJiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3Bw
CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcywgTWVkaWFRdWUKICAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlz
IGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAgICAgICAgaWYgKHJlc29sdmVyKSB7Ci0gICAg
ICAgICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZh
Y2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS0+YWRk
Rm9udEZhY2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZh
bHNlKTsKICAgICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJh
dGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxl
Y3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuY3BwCmluZGV4IGM2NmM4YjI3YTY1YTg0NGI2NzRlZjFlZWEwZjhhZmFhMDIzMzNl
ZWIuLmE0YTFlNmJkNDM2MzY4ZmUxNDY5NTFmOGI0YjcwODczMzI3YzY2NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTM0NCw3ICszNDQsNyBAQCB2
b2lkIEJ1aWxkZXJTdGF0ZTo6YWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKQogCiB2
b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udCgpCiB7Ci0gICAgYXV0byYgZm9udFNlbGVjdG9y
ID0gY29uc3RfY2FzdDxEb2N1bWVudCY+KGRvY3VtZW50KCkpLmZvbnRTZWxlY3RvcigpOworICAg
IGF1dG8qIGZvbnRTZWxlY3RvciA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihkb2N1bWVudCgpKS5m
b250U2VsZWN0b3IoKTsKIAogICAgIGF1dG8gbmVlZHNVcGRhdGUgPSBbJl0gewogICAgICAgICBp
ZiAobV9mb250RGlydHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBCdWlsZGVyU3RhdGU6OnVw
ZGF0ZUZvbnQoKQogICAgIHVwZGF0ZUZvbnRGb3Jab29tQ2hhbmdlKCk7CiAgICAgdXBkYXRlRm9u
dEZvck9yaWVudGF0aW9uQ2hhbmdlKCk7CiAKLSAgICBtX3N0eWxlLmZvbnRDYXNjYWRlKCkudXBk
YXRlKCZmb250U2VsZWN0b3IpOworICAgIG1fc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoZm9u
dFNlbGVjdG9yKTsKIAogICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKaW5kZXggMzMxODliZDY0
Y2FjYmVkZjkzNjhkMzRmYTlmYjU2NGQ1OGJkMWYzNi4uNThhNmU3NDUwNzg1ODEzMmNkMmY2ZGI5
NGM0ZGQxMDExYTMwNjJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIFJlbmRlclN0eWxlIHJlc29s
dmVGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiAKICAgICBkb2N1bWVudFN0
eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogCi0gICAg
ZG9jdW1lbnRTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmY29uc3RfY2FzdDxEb2N1bWVudCY+
KGRvY3VtZW50KS5mb250U2VsZWN0b3IoKSk7CisgICAgZG9jdW1lbnRTdHlsZS5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShjb25zdF9jYXN0PERvY3VtZW50Jj4oZG9jdW1lbnQpLmZvbnRTZWxlY3Rvcigp
KTsKIAogICAgIHJldHVybiBkb2N1bWVudFN0eWxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAppbmRleCAxZjVjYzQxNDhkNWEwYmZmODVl
ZTAxMTIxMzc1NTJmMWY4ZDM5YmQzLi5kMmFmZDhjMmM0N2M3Mjc1NGIzZDZiNmI1ZDY3OTI5ZTM0
Mjk2NDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JG
b250UmF3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250
UmF3LmNwcApAQCAtMzIsMjggKzMyLDM3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5oIgogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTSGVs
cGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFt
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgU3R5bGUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdEZvbnRGYW1pbHlOYW1lczsKIAotT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JG
b250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiBm
b250RGVzY3JpcHRpb24sIERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBib29sIHVzZUZpeGVk
RGVmYXVsdFNpemUoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KQoreworICAgIHJldHVybiBmb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSA9PSAxICYmIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpOworfQor
CitPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYg
Zm9udFJhdywgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBNYXAgdGhlIGZvbnQgcHJvcGVy
dHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250
RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgLy8gRm9udCBmYW1pbHkgYXBwbGll
ZCBpbiB0aGUgc2FtZSB3YXkgYXMgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZh
bWlseQogICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5
LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgotICAgIGJvb2wgb2xkRmFtaWx5
VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpOworICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSB1c2VGaXhlZERl
ZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbik7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFt
aWxpZXM7CiAgICAgZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LmZhbWls
eS5zaXplKCkpOwpAQCAtNjMsNyArNzIsMTAgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAg
ICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoT24oaXRl
bSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkg
PSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7Ci0gICAgICAgICAgICBmYW1pbHkgPSBpc0dl
bmVyaWNGYW1pbHkgPyBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
RnJvbVZhbHVlSUQoaWRlbnQpIDogQXRvbVN0cmluZyhkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5k
YXJkRm9udEZhbWlseSgpKTsKKyAgICAgICAgICAgIGlmIChpc0dlbmVyaWNGYW1pbHkpCisgICAg
ICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUluZGV4RnJv
bVZhbHVlSUQoaWRlbnQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFt
aWx5ID0gQXRvbVN0cmluZyhjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkuZm9udEdlbmVyaWNGYW1p
bGllcy5zdGFuZGFyZEZvbnRGYW1pbHkoKSk7CiAgICAgICAgIH0sIFsmXSAoY29uc3QgU3RyaW5n
JiBmYW1pbHlTdHJpbmcpIHsKICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseVN0cmluZzsKICAg
ICAgICAgfSk7CkBAIC03OSwxMSArOTEsMTEgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxp
ZXMoZmFtaWxpZXMpOwogCi0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKKyAgICBpZiAodXNlRml4
ZWREZWZhdWx0U2l6ZShmb250RGVzY3JpcHRpb24pICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1
bHRTaXplKSB7CiAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGF1dG8g
c2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1p
bHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAgYXV0byBzaXpl
ID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplLCBjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkpOwogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJv
bVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIDEu
MCwgTWluaW11bUZvbnRTaXplUnVsZTo6Tm9uZSwgZG9jdW1lbnQuc2V0dGluZ3NWYWx1ZXMoKSkp
OworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29t
cHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCAxLjAsIE1pbmltdW1Gb250U2l6ZVJ1bGU6Ok5vbmUsIGNvbnRleHQuc2V0
dGluZ3NWYWx1ZXMoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNzYsNyArMTg4LDcgQEAg
T3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZv
bnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKGlkZW50KTsKLSAgICAgICAgICAg
IHJldHVybiBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBkb2N1bWVudCk7CisgICAgICAgICAgICByZXR1cm4gU3R5
bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSwgY29udGV4dC5zZXR0aW5nc1ZhbHVlcygpKTsKICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxhcmdlcjoKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4yZjsKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CkBAIC0xODcsOCArMTk5LDggQEAgT3B0aW9uYWw8Rm9u
dENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRD
YXNjYWRlRGVzY3IKICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKICAgICAgICAgcmV0dXJuIHN3
aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0g
Rm9udENhc2NhZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKTsKLSAg
ICAgICAgICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3RoLnZh
bHVlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAmZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwgJmZv
bnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9u
KCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSkpOworICAgICAgICAgICAgZm9udENhc2NhZGUudXBk
YXRlKGNvbnRleHQuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0
aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAm
Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwgJmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
LCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIGlzPERvY3VtZW50Pihjb250ZXh0KSA/
IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5yZW5kZXJWaWV3KCkgOiBudWxscHRyKSk7CiAg
ICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC4wKTsKICAg
ICAgICAgfSk7CkBAIC0yMDMsNyArMjE1LDcgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAg
ICAvLyBpdCwgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbGluZS1oZWlnaHQgaW5mb3JtYXRpb24gb24g
Rm9udFJhdy4KIAogICAgIGF1dG8gZm9udENhc2NhZGUgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwotICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNl
bGVjdG9yKCkpOworICAgIGZvbnRDYXNjYWRlLnVwZGF0ZShjb250ZXh0LmZvbnRTZWxlY3Rvcigp
KTsKICAgICByZXR1cm4gZm9udENhc2NhZGU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaAppbmRleCAxYTg2YTlmMTU4OGRjZTE3OGE0MzkwZDc0
OTM1NDBmZjg5MmFiM2IwLi4yYmNmY2JmYWRkNDUyN2MzYTFiMmViNjhmMmM4ZWI1ZmU5ZTlmYTM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oCkBA
IC0zMiw5ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb247CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKIHN0cnVjdCBGb250UmF3OwpAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgRm9udFJh
dzsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVG
b3JGb250UmF3KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJhdyYsIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mJiwgRG9jdW1lbnQmKTsKK09wdGlvbmFsPEZvbnRDYXNjYWRlPiBy
ZXNvbHZlRm9yRm9udFJhdyhjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXcm
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAog
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAzNGU4MDJmYWZj
MTdhNzU3ZjIyNzYxMmMzMGYyYzhjMjBlOWE5ODc1Li4xMDNlZTA1ZmIwYTJjYmE4NmQzNWM3OTNh
NjIzODFhYWJmNWJkNWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcApA
QCAtMTA2LDEwICsxMDYsMTAgQEAgUmVzb2x2ZXI6OlJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVu
dCkKICAgICBpZiAoYXV0byogZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQoKSkgewogICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQo
KmRvY3VtZW50RWxlbWVudCwgbV9kb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBudWxscHRyLCBSdWxl
TWF0Y2hpbmdCZWhhdmlvcjo6TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0eWxlOwog
ICAgICAgICAvLyBUdXJuIG9mZiBhc3NlcnRpb24gYWdhaW5zdCBmb250IGxvb2t1cHMgZHVyaW5n
IHN0eWxlIHJlc29sdmVyIGluaXRpYWxpemF0aW9uLiBXZSBtYXkgbmVlZCByb290IHN0eWxlIGZv
bnQgZm9yIG1lZGlhIHF1ZXJpZXMuCi0gICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCku
aW5jcmVtZW50SXNDb21wdXRpbmdSb290U3R5bGVGb250KCk7Ci0gICAgICAgIG1fcm9vdERlZmF1
bHRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJm1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLT5pbmNyZW1lbnRJc0NvbXB1dGlu
Z1Jvb3RTdHlsZUZvbnQoKTsKKyAgICAgICAgbV9yb290RGVmYXVsdFN0eWxlLT5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgbV9yb290RGVm
YXVsdFN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgICAgIG1fZG9jdW1l
bnQuZm9udFNlbGVjdG9yKCkuZGVjcmVtZW50SXNDb21wdXRpbmdSb290U3R5bGVGb250KCk7Cisg
ICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCktPmRlY3JlbWVudElzQ29tcHV0aW5nUm9v
dFN0eWxlRm9udCgpOwogICAgIH0KIAogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmll
dykKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFJlc29sdmVyOjphZGRDdXJyZW50U1ZHRm9udEZh
Y2VSdWxlcygpCiAgICAgaWYgKG1fZG9jdW1lbnQuc3ZnRXh0ZW5zaW9ucygpKSB7CiAgICAgICAg
IGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMg
PSBtX2RvY3VtZW50LnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50cygpOwogICAg
ICAgICBmb3IgKGF1dG8qIHN2Z0ZvbnRGYWNlRWxlbWVudCA6IHN2Z0ZvbnRGYWNlRWxlbWVudHMp
Ci0gICAgICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShz
dmdGb250RmFjZUVsZW1lbnQtPmZvbnRGYWNlUnVsZSgpLCBzdmdGb250RmFjZUVsZW1lbnQtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5mb250U2Vs
ZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKHN2Z0ZvbnRGYWNlRWxlbWVudC0+Zm9udEZhY2VSdWxl
KCksIHN2Z0ZvbnRGYWNlRWxlbWVudC0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSk7CiAgICAg
fQogfQogCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWwKICAgICBt
X3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzLCAmbV9tZWRpYVF1
ZXJ5RXZhbHVhdG9yLCBtX2luc3BlY3RvckNTU09NV3JhcHBlcnMpOwogCiAgICAgaWYgKGF1dG8g
cmVuZGVyVmlldyA9IGRvY3VtZW50KCkucmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3
LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
KTsKKyAgICAgICAgcmVuZGVyVmlldy0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShkb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKIH0KIAogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5
bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCkBAIC00MzksNyArNDM5LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9y
RWxlbWVudChjb25zdCBFbGVtZW50KiBlbGUKICAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOjpObyk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogCi0gICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUo
ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICByZXR1cm4gc3R5bGU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCmluZGV4IGQ4NDEwZjBkNTIxZDFiYWJiOTMzOWM1YTM2
MzQ0NGVjMWQ1MWNjZDAuLjFkMzcyY2QwNWI5OTlmZDE2M2NiZmI3Mzk3ZmRkOGY3YmM0YTU1NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIFJlc29s
dmVyJiBTY29wZTo6cmVzb2x2ZXIoKQogICAgICAgICBtX3Jlc29sdmVyID0gbWFrZVVuaXF1ZTxS
ZXNvbHZlcj4obV9kb2N1bWVudCk7CiAKICAgICAgICAgaWYgKCFtX3NoYWRvd1Jvb3QpIHsKLSAg
ICAgICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkuYnVpbGRTdGFydGVkKCk7CisgICAg
ICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLT5idWlsZFN0YXJ0ZWQoKTsKICAgICAg
ICAgICAgIG1fcmVzb2x2ZXItPnJ1bGVTZXRzKCkuaW5pdGlhbGl6ZVVzZXJTdHlsZSgpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9yZXNvbHZlci0+cnVsZVNldHMoKS5zZXRJc0Zv
clNoYWRvd1Njb3BlKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAgUmVzb2x2ZXImIFNjb3BlOjpyZXNv
bHZlcigpCiAgICAgICAgIG1fcmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG1fYWN0
aXZlU3R5bGVTaGVldHMpOwogCiAgICAgICAgIGlmICghbV9zaGFkb3dSb290KQotICAgICAgICAg
ICAgbV9kb2N1bWVudC5mb250U2VsZWN0b3IoKS5idWlsZENvbXBsZXRlZCgpOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5mb250U2VsZWN0b3IoKS0+YnVpbGRDb21wbGV0ZWQoKTsKICAgICB9CiAg
ICAgQVNTRVJUKCFtX3NoYWRvd1Jvb3QgfHwgJm1fZG9jdW1lbnQgPT0gJm1fc2hhZG93Um9vdC0+
ZG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCZtX3Jlc29sdmVyLT5kb2N1bWVudCgpID09ICZtX2Rv
Y3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAK
aW5kZXggNzRiNDUyNmZkNDlkZGQyYzYzYTNlNDY2YjYxMzkzNTA2MWI3MjlhMS4uMGZkYzU0N2Y4
NGRjNmE0ZTViOGRiZWViMDNkMDRkYjYxMzJhZmUwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAKKyNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNs
dWRlICJDcnlwdG8uaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJJREJDb25u
ZWN0aW9uUHJveHkuaCIKICNpbmNsdWRlICJJbWFnZUJpdG1hcE9wdGlvbnMuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTk2LDYgKzk4LDggQEAgV29ya2VyR2xv
YmFsU2NvcGU6On5Xb3JrZXJHbG9iYWxTY29wZSgpCiAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUg
ZnJvbSB0aGUgY29udGV4dHMgbWFwIHZlcnkgZWFybHkgaW4gdGhlIGRlc3RydWN0b3Igc28gdGhh
dCBjYWxsaW5nIHBvc3RUYXNrKCkgb24gdGhpcyBXb3JrZXJHbG9iYWxTY29wZSBmcm9tIGFub3Ro
ZXIgdGhyZWFkIGlzIHNhZmUuCiAgICAgcmVtb3ZlRnJvbUNvbnRleHRzTWFwKCk7CiAKKyAgICBp
ZiAobV9jc3NGb250U2VsZWN0b3IpCisgICAgICAgIG1fY3NzRm9udFNlbGVjdG9yLT5zdG9wTG9h
ZGluZ0FuZENsZWFyRm9udHMoKTsKICAgICBtX3BlcmZvcm1hbmNlID0gbnVsbHB0cjsKICAgICBt
X2NyeXB0byA9IG51bGxwdHI7CiAKQEAgLTUwMCw2ICs1MDQsMjAgQEAgQ1NTVmFsdWVQb29sJiBX
b3JrZXJHbG9iYWxTY29wZTo6Y3NzVmFsdWVQb29sKCkKICAgICByZXR1cm4gKm1fY3NzVmFsdWVQ
b29sOwogfQogCitDU1NGb250U2VsZWN0b3IqIFdvcmtlckdsb2JhbFNjb3BlOjpmb250U2VsZWN0
b3IoKQoreworICAgIGlmICghbV9jc3NGb250U2VsZWN0b3IpCisgICAgICAgIG1fY3NzRm9udFNl
bGVjdG9yID0gQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoKnRoaXMpOworICAgIHJldHVybiBtX2Nz
c0ZvbnRTZWxlY3Rvci5nZXQoKTsKK30KKworRm9udENhY2hlJiBXb3JrZXJHbG9iYWxTY29wZTo6
Zm9udENhY2hlKCkKK3sKKyAgICBpZiAoIW1fZm9udENhY2hlKQorICAgICAgICBtX2ZvbnRDYWNo
ZSA9IGFkb3B0UmVmKCpuZXcgRm9udENhY2hlKTsKKyAgICByZXR1cm4gKm1fZm9udENhY2hlOwor
fQorCiBSZWZlcnJlclBvbGljeSBXb3JrZXJHbG9iYWxTY29wZTo6cmVmZXJyZXJQb2xpY3koKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmVycmVyUG9saWN5OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IDEyN2EyOTRlOTZmM2IyYjM5YzgzNTk5N2Jm
MDVkYzUyOWFhNTc5MTguLjJkY2I1NzQyZGM2NjExYzc2ZWM5ZjNmODdjZjJhYTFkZjY3MzJmNGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTQyLDYg
KzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NGb250U2VsZWN0b3I7
CiBjbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnM7CiBjbGFzcyBDcnlwdG87CkBAIC0xMTgsNiArMTE5LDggQEAgcHVibGljOgogICAg
IHZvaWQgY3JlYXRlSW1hZ2VCaXRtYXAoSW1hZ2VCaXRtYXA6OlNvdXJjZSYmLCBpbnQgc3gsIGlu
dCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBJbWFnZUJpdG1hcDo6
UHJvbWlzZSYmKTsKIAogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CisgICAgQ1NT
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBmaW5hbDsKKyAgICBGb250Q2FjaGUmIGZvbnRD
YWNoZSgpIGZpbmFsOwogCiAgICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3koKSBjb25z
dCBmaW5hbDsKIApAQCAtMTg2LDYgKzE4OSw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtl
clNXQ2xpZW50Q29ubmVjdGlvbj4gbV9zd0NsaWVudENvbm5lY3Rpb247CiAjZW5kaWYKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTVmFsdWVQb29sPiBtX2Nzc1ZhbHVlUG9vbDsKKyAgICBSZWZQdHI8
Q1NTRm9udFNlbGVjdG9yPiBtX2Nzc0ZvbnRTZWxlY3RvcjsKKyAgICBSZWZQdHI8Rm9udENhY2hl
PiBtX2ZvbnRDYWNoZTsKICAgICBSZWZlcnJlclBvbGljeSBtX3JlZmVycmVyUG9saWN5OwogICAg
IFNldHRpbmdzOjpWYWx1ZXMgbV9zZXR0aW5nc1ZhbHVlczsKICAgICBXb3JrZXJUeXBlIG1fd29y
a2VyVHlwZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA5MGZjY2E1YjNjY2ZiMjg1ZWE1ODA5MjdkZDU0MTQwMDM1MzQxOTRj
Li42MDFiOTgzZTU2YjI5NWY3YzFkYjk3OGY5ZGFjMTIwMTA0OTY4ZmI0IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjEtMDMtMzEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIEltcGxlbWVudCB0ZXh0IHJlbmRlcmluZyBvbiBPZmZzY3JlZW5DYW52YXMgaW4gYSBX
b3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
Mjc5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
anVzdCBleHBlY3RhdGlvbnMgZm9yIG1hbnVhbCBPZmZzY3JlZW5DYW52YXMgd29ya2VyIHRleHQg
dGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAy
MS0wMy0yNCAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJd
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL21h
bnVhbC9kcmF3LWdlbmVyaWMtZmFtaWx5LzJkLnRleHQuZHJhdy5nZW5lcmljLmZhbWlseS53Lmh0
bWwgaXMgZmxha3kgZmFpbGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggZmQ4
MTM4ZTg0YmFmMDA3NWJiMDRiMmYyZDAzMTAzNzhjMGYzMzdhNy4uYzkxZjczMjRkOGFmYzcwMWUy
ZGY1ZTlmYzBjMmIyM2I0MzBlMWUxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMjEtMDMtMzEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29t
PgorCisgICAgICAgIEltcGxlbWVudCB0ZXh0IHJlbmRlcmluZyBvbiBPZmZzY3JlZW5DYW52YXMg
aW4gYSBXb3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMjc5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkanVzdCB0ZXN0IGV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuYmFzaWMu
d29ya2VyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9j
YW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmNvbXBsZXgud29ya2VyLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zm
c2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3Rl
eHQvMmQudGV4dC5mb250LnBhcnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0w
My0yNCAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL21hbnVh
bC9kcmF3LWdlbmVyaWMtZmFtaWx5LzJkLnRleHQuZHJhdy5nZW5lcmljLmZhbWlseS53Lmh0bWwg
aXMgZmxha3kgZmFpbGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQu
cGFyc2UuYmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5m
b250LnBhcnNlLmJhc2ljLndvcmtlci1leHBlY3RlZC50eHQKaW5kZXggMDg0ZWZlNDZlZGY5YTZm
ZTllYTg4ODM0MmFhYWU2MzZhMzNmZDQzMi4uYTE3ZWVmNTA5MmI3ZDAzODI3YWNkNjViNzk3OGVl
NGI5YmUyMGRjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2Uu
YmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9u
dC5wYXJzZS5iYXNpYy53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMyBAQAogCi1GQUlM
IDJkIGFzc2VydF9lcXVhbHM6IGN0eC5mb250ID09PSAnMjBweCBzZXJpZicgKGdvdCAxMHB4IHNh
bnMtc2VyaWZbc3RyaW5nXSwgZXhwZWN0ZWQgMjBweCBzZXJpZltzdHJpbmddKSBleHBlY3RlZCAi
MjBweCBzZXJpZiIgYnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgorUEFTUyAyZAogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2Fu
dmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtlci1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtl
ci1leHBlY3RlZC50eHQKaW5kZXggMWY0ZjBlZjk4Yjk3MmRjMzZiZTA1YjczZTNmMzMzNjk4MTk0
ZWNkYi4uYTE3ZWVmNTA5MmI3ZDAzODI3YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZh
cy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29tcGxleC53b3JrZXItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmNvbXBsZXgud29y
a2VyLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJTCAyZCBhc3NlcnRfZXF1YWxz
OiBjdHguZm9udCA9PT0gJ2l0YWxpYyBzbWFsbC1jYXBzIDEycHggIlVua25vd24gRm9udCIsIHNh
bnMtc2VyaWYnIChnb3QgMTBweCBzYW5zLXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIGl0YWxpYyBz
bWFsbC1jYXBzIDEycHggIlVua25vd24gRm9udCIsIHNhbnMtc2VyaWZbc3RyaW5nXSkgZXhwZWN0
ZWQgIml0YWxpYyBzbWFsbC1jYXBzIDEycHggXCJVbmtub3duIEZvbnRcIiwgc2Fucy1zZXJpZiIg
YnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgorUEFTUyAyZAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVl
bi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29m
ZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50
eHQKaW5kZXggMDg0ZWZlNDZlZGY5YTZmZTllYTg4ODM0MmFhYWU2MzZhMzNmZDQzMi4uYTE3ZWVm
NTA5MmI3ZDAzODI3YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4v
dGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXItZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMv
b2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVk
LnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJTCAyZCBhc3NlcnRfZXF1YWxzOiBjdHguZm9udCA9
PT0gJzIwcHggc2VyaWYnIChnb3QgMTBweCBzYW5zLXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIDIw
cHggc2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIjIwcHggc2VyaWYiIGJ1dCBnb3QgIjEwcHggc2Fu
cy1zZXJpZiIKK1BBU1MgMmQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZv
bnQucGFyc2UudGlueS53b3JrZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0
LmZvbnQucGFyc2UudGlueS53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDNmMmUzY2I4NWJmMjhi
MWYyZTFjZGZlMzU5NjY0ZmJjNjE5YWNjNjEuLmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1Yjc5Nzhl
ZTRiOWJlMjBkYzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNl
LnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9u
dC5wYXJzZS50aW55Lndvcmtlci1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwg
MmQgYXNzZXJ0X2VxdWFsczogY3R4LmZvbnQgPT09ICcxcHggc2Fucy1zZXJpZicgKGdvdCAxMHB4
IHNhbnMtc2VyaWZbc3RyaW5nXSwgZXhwZWN0ZWQgMXB4IHNhbnMtc2VyaWZbc3RyaW5nXSkgZXhw
ZWN0ZWQgIjFweCBzYW5zLXNlcmlmIiBidXQgZ290ICIxMHB4IHNhbnMtc2VyaWYiCitQQVNTIDJk
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9u
cyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA5Mzll
ODJjOTBlMTRjN2EzNDAyZmE2NWNjZjE1ZjZmMGZhNzk1NmJlLi5hNDY2OTdiMDRjMjliODE1Mzhh
NzBlMzYwMDMxZTQwNDUyZDRjMWFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0
RXhwZWN0YXRpb25zCkBAIC02NTcsNyArNjU3LDYgQEAgd2Via2l0Lm9yZy9iLzIwMzE0NiBodHRw
L3dwdC9vZmZzY3JlZW4tY2FudmFzIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjAzMTQ2IGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuIFsgUGFzcyBd
CiB3ZWJraXQub3JnL2IvMjA2MDU1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jYW52YXMvb2Zmc2NyZWVuL2RyYXdpbmctaW1hZ2VzLXRvLXRoZS1jYW52YXMvMmQuZHJhd0lt
YWdlLnN2Zy53b3JrZXIuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzIwNjA1NSBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi9kcmF3aW5nLWlt
YWdlcy10by10aGUtY2FudmFzLzJkLmRyYXdJbWFnZS56ZXJvc291cmNlLmltYWdlLndvcmtlci5o
dG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjIzNjcxIGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL21hbnVhbC9kcmF3LWdlbmVyaWMtZmFtaWx5
LzJkLnRleHQuZHJhdy5nZW5lcmljLmZhbWlseS53Lmh0bWwgWyBGYWlsdXJlIF0KIAogIyBDb25z
b2xlIGxvZyBsaW5lcyBtYXkgYXBwZWFyIGluIGEgZGlmZmVyZW50IG9yZGVyIHNvIHdlIHNpbGVu
Y2UgdGhlbS4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zm
c2NyZWVuL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLncu
aHRtbCBbIER1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciBdCkBAIC03MTMsOCArNzEyLDYgQEAgd2Vi
a2l0Lm9yZy9iLzIxNTQ2MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2Fu
dmFzL29mZnNjcmVlbi9tYW51YWwKIHdlYmtpdC5vcmcvYi8yMjEzMTEgWyBEZWJ1ZyBdIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL2ZpbHRlci9v
ZmZzY3JlZW5jYW52YXMuZmlsdGVyLncuaHRtbCBbIFNsb3cgXQogd2Via2l0Lm9yZy9iLzIyMTMx
MSBbIERlYnVnIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9v
ZmZzY3JlZW4vbWFudWFsL2ZpbHRlci9vZmZzY3JlZW5jYW52YXMuZmlsdGVyLncuaHRtbCBbIFNs
b3cgXQogCi13ZWJraXQub3JnL2IvMjIzNjcxIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL21hbnVhbC9kcmF3LWdlbmVyaWMtZmFtaWx5LzJkLnRl
eHQuZHJhdy5nZW5lcmljLmZhbWlseS53Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQotCiAjLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBFbmQgb2YgT2Zmc2NyZWVuQ2FudmFzLXJlbGF0
ZWQgYnVncwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424906</attachid>
            <date>2021-04-01 09:41:51 -0700</date>
            <delta_ts>2021-04-01 12:49:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202793-20210401174149.patch</filename>
            <type>text/plain</type>
            <size>54806</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyYWQwYTg2ODdmZjZk
YmZjODViNWE2MTlkMjIzNWNlOTQ1ODgwMC4uYTk5MDE4MjA4ZTYwZTllZTA3ZmNkM2QzM2JhMDYy
MzY0MDNhZjE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGV4dCByZW5k
ZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBDU1NGb250U2VsZWN0b3IgYW5kIEZv
bnRDYWNoZSB0byBXb3JrZXJHbG9iYWxTY29wZSBhbmQgdmlhCisgICAgICAgIGludGVyZmFjZSBj
aGFuZ2VzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYW5kIEZvbnRTZWxlY3RvciwgdXNlIHRo
ZW0KKyAgICAgICAgYXMgYXBwcm9wcmlhdGUgYWZ0ZXIgZW5hYmxpbmcgdGV4dCBmdW5jdGlvbnMg
b24gV29ya2VyIHRocmVhZHMgd2l0aAorICAgICAgICBPZmZzY3JlZW5DYW52YXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCByZWJhc2VsaW5lZCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6YXBw
ZW5kU291cmNlcyk6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjptX3ZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjp+
Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6Zm9u
dFJhbmdlc0ZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZh
bGxiYWNrRm9udEF0KToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAg
ICogY3NzL0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpjcmVhdGUp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1p
bHlJbmRleEZyb21WYWx1ZUlEKToKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpmb250cyk6Cisg
ICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Zm9u
dFNlbGVjdG9yIGNvbnN0KToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250Q2FjaGUp
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250U2VsZWN0b3IpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnRXaXRob3V0VXBkYXRpbmdTdHlsZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5EcmF3
VGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpzdG9wTG9hZGluZyk6CisgICAgICAg
ICogcGFnZS9NZW1vcnlSZWxlYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VDcml0
aWNhbE1lbW9yeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzQ3VycmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6dXBkYXRlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6cmVh
bGl6ZU5leHRGYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpy
ZWFsaXplRmFsbGJhY2tSYW5nZXNBdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmJvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1G
b3JlZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OmNvbXB1dGVNYXJrZXJTdHlsZSBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFJlbmRl
ck1lbnVMaXN0Ojpmb250U2VsZWN0b3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6
Zm9udFNlbGVjdG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lVGV4dDo6Y29t
cHV0ZU5ld1NjYWxlZEZvbnRGb3JTdHlsZSk6CisgICAgICAgICogc3R5bGUvTWF0Y2hlZERlY2xh
cmF0aW9uc0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGU6OmlzQ2FjaGVhYmxlKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKToKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjp1cGRhdGVGb250KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29s
dmVGb3JEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZvckRv
Y3VtZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjp1c2VGaXhlZERlZmF1bHRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAgICAgICogc3R5bGUvU3R5bGVS
ZXNvbHZlRm9yRm9udFJhdy5oOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpSZXNvbHZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UmVzb2x2ZXI6OmFkZEN1cnJlbnRTVkdGb250RmFjZVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpkZWZhdWx0U3R5bGVGb3JFbGVt
ZW50KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlOjpTY29wZTo6cmVzb2x2ZXIpOgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6On5Xb3JrZXJH
bG9iYWxTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6Zm9udFNl
bGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjpmb250Q2FjaGUp
OgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaDoKKwogMjAyMS0wNC0wMSAg
Q2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWFrZSBGb250Q2FjaGUg
Y29uc3RydWN0YWJsZSBhbmQgc2FmZSB0byB1c2Ugb2ZmIHRoZSBtYWluIHRocmVhZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZS5jcHAKaW5kZXggODE3MWFjY2VhN2VmNDdjYjE1Mzk5NWU5NGFhOGEw
MTE5ZDdhZTM2MC4uYjlkNTNiODZkYTI0ODJkOGMwZjQ3ODIzNGNjNjlhOGExYzQ0ZjRlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgQ1NTRm9u
dEZhY2U6OmFwcGVuZFNvdXJjZXMoQ1NTRm9udEZhY2UmIGZvbnRGYWNlLCBDU1NWYWx1ZUxpc3Qm
IHNyY0xpc3QsIFNjCiAgICAgICAgICAgICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlz
U3VwcG9ydGVkRm9ybWF0KCkgJiYgaXM8RG9jdW1lbnQ+KGNvbnRleHQpKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwogICAg
ICAgICAgICAgICAgIGlmIChDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250
KCZkb2N1bWVudCwgZm91bmRTVkdGb250LCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRT
aGFkb3dUcmVlKSkKLSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbWFrZVVuaXF1ZTxDU1NG
b250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgZG9jdW1lbnQuZm9udFNl
bGVjdG9yKCksICpjYWNoZWRGb250KTsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbWFr
ZVVuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oZm9udEZhY2UsIGl0ZW0ucmVzb3VyY2UoKSwgKmRv
Y3VtZW50LmZvbnRTZWxlY3RvcigpLCAqY2FjaGVkRm9udCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgc291cmNlID0gKGZvbnRGYWNlRWxlbWVudCA/IG1ha2VV
bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGZvbnRGYWNlLCBpdGVtLnJlc291cmNlKCksICpmb250
RmFjZUVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDM4
ZWZiNjY2OGQwODg4ZTAxMWJjMGVmMGFlODM4YjQ1MDU1YTNhMWUuLjY5MjllZTg0YWVjOTVjMGUw
ZTAxNjEwYWY1YjEyZmIyYWRkNTgwYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0
b3IuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBmb250U2VsZWN0b3JJZDsK
IENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAgICAgLCBtX2NvbnRl
eHQobWFrZVdlYWtQdHIoY29udGV4dCkpCisgICAgLCBtX2ZvbnRDYWNoZShtYWtlUmVmKGNvbnRl
eHQuZm9udENhY2hlKCkpKQogICAgICwgbV9jc3NGb250RmFjZVNldChDU1NGb250RmFjZVNldDo6
Y3JlYXRlKHRoaXMpKQogICAgICwgbV9mb250TW9kaWZpZWRPYnNlcnZlcihbdGhpc10geyBmb250
TW9kaWZpZWQoKTsgfSkKICAgICAsIG1fZm9udExvYWRpbmdUaW1lcigqdGhpcywgJkNTU0ZvbnRT
ZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKQpAQCAtODIsNyArODMsNyBAQCBDU1NGb250
U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0
KQogICAgICAgICAgICAgbV9mb250RmFtaWx5TmFtZXMudW5jaGVja2VkQXBwZW5kKGZhbWlseU5h
bWUpOwogICAgIH0KIAotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuYWRkQ2xpZW50KCp0aGlz
KTsKKyAgICBtX2ZvbnRDYWNoZS0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBtX2Nzc0ZvbnRGYWNl
U2V0LT5hZGRGb250TW9kaWZpZWRPYnNlcnZlcihtX2ZvbnRNb2RpZmllZE9ic2VydmVyKTsKICAg
ICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3IgJXAgY3RvciIsIHRoaXMpOwogCkBAIC05NCw3
ICs5NSw3IEBAIENTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3RvcigpCiAgICAgTE9HKEZv
bnRzLCAiQ1NTRm9udFNlbGVjdG9yICVwIGR0b3IiLCB0aGlzKTsKIAogICAgIHN0b3BMb2FkaW5n
QW5kQ2xlYXJGb250cygpOwotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlQ2xpZW50
KCp0aGlzKTsKKyAgICBtX2ZvbnRDYWNoZS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKIH0KIAogRm9u
dEZhY2VTZXQqIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXRJZkV4aXN0cygpCkBAIC0zMzAs
NyArMzMxLDcgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1p
bHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKIAogICAgIGlmICghcmVzb2x2ZUdl
bmVyaWNGYW1pbHlGaXJzdCkKICAgICAgICAgcmVzb2x2ZUFuZEFzc2lnbkdlbmVyaWNGYW1pbHko
KTsKLSAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHko
KmZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCwgZmFtaWx5Rm9yTG9va3VwKTsKKyAgICBhdXRvIGZv
bnQgPSBtX2ZvbnRDYWNoZS0+Zm9udEZvckZhbWlseSgqZm9udERlc2NyaXB0aW9uRm9yTG9va3Vw
LCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmIChkb2N1bWVudCAmJiBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250TG9hZCgqZG9jdW1lbnQs
IGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgISFmb250KTsKICAgICByZXR1cm4gRm9udFJhbmdl
cyB7IFdURk1vdmUoZm9udCkgfTsKQEAgLTQ0Miw3ICs0NDMsNyBAQCBSZWZQdHI8Rm9udD4gQ1NT
Rm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdAogICAgIGlmICghbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRGYWxsYmFj
a1ByZWZlcnNQaWN0b2dyYXBocykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYXV0byYg
cGljdG9ncmFwaEZvbnRGYW1pbHkgPSBtX2NvbnRleHQtPnNldHRpbmdzVmFsdWVzKCkuZm9udEdl
bmVyaWNGYW1pbGllcy5waWN0b2dyYXBoRm9udEZhbWlseSgpOwotICAgIGF1dG8gZm9udCA9IEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHBpY3Rv
Z3JhcGhGb250RmFtaWx5KTsKKyAgICBhdXRvIGZvbnQgPSBtX2ZvbnRDYWNoZS0+Zm9udEZvckZh
bWlseShmb250RGVzY3JpcHRpb24sIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKICAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpICYmIGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQogICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoZG93bmNhc3Q8RG9jdW1lbnQ+KCpt
X2NvbnRleHQpLCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IGE5ZmEyOGZmN2E1NDFmNDg4NjhhNWM1NTAwYjhkOWQz
YzRhZmEwNDIuLjkzMTI2MzE0ODg4MjZlZDZkNzM1NDFhNTM5NGYzNzI3MWJjOWYyNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmLCBib29sIGlzSW5p
dGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogCisgICAgRm9udENhY2hlJiBm
b250Q2FjaGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAqbV9mb250Q2FjaGU7IH0KICAgICB2b2lk
IGZvbnRDYWNoZUludmFsaWRhdGVkKCkgZmluYWw7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKQEAgLTEyMyw2ICsxMjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQZW5kaW5nRm9udEZh
Y2VSdWxlPiBtX3N0YWdpbmdBcmVhOwogCiAgICAgV2Vha1B0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEZvbnRDYWNoZT4gbV9mb250Q2FjaGU7CiAgICAg
UmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRGYWNlU2V0OwogICAgIFJlZjxDU1NGb250RmFjZVNl
dD4gbV9jc3NGb250RmFjZVNldDsKICAgICBIYXNoU2V0PEZvbnRTZWxlY3RvckNsaWVudCo+IG1f
Y2xpZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCmluZGV4IDM1ZmZjMDM4MmExNWEyMGZhNGVl
ODcxYzg2MzhlYTYxNjhlM2JlMWIuLjEzMmE1NmRlMmQ0ZDNmZGQ0MGVhZmQyNzE2YWZhZTY2OTdi
YjBjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIEZv
bnRGYWNlOjpzZXRFcnJvclN0YXRlKCkKIAogUmVmPEZvbnRGYWNlPiBGb250RmFjZTo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFNvdXJjZSYmIHNvdXJj
ZSwgY29uc3QgRGVzY3JpcHRvcnMmIGRlc2NyaXB0b3JzKQogewotICAgIGF1dG8gcmVzdWx0ID0g
YWRvcHRSZWYoKm5ldyBGb250RmFjZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBGb250RmFjZSgqZG9jdW1lbnQuZm9udFNlbGVjdG9y
KCkpKTsKICAgICByZXN1bHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogCiAgICAgYm9vbCBkYXRhUmVx
dWlyZXNBc3luY2hyb25vdXNMb2FkaW5nID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCBmY2Q0YjMw
YmVhZGU1NzFmZWIzODhmMTRhMjU4MGIxMzVmMTdkNTMyLi4wNzYwZTM2ODdkNTQ1NjZjNzk4ZmRi
ODA4NDc5YTRmNzRiNGRhM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5j
bHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTdHlsZUNvbG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTMwODMsNiArMzA4NCwyOSBAQCBjb25zdCBBdG9tU3RyaW5nJiBnZW5l
cmljRm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQgaWRlbnQpCiAgICAgfQogfQogCitX
ZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXggZ2VuZXJpY0ZvbnRGYW1pbHlJ
bmRleEZyb21WYWx1ZUlEKENTU1ZhbHVlSUQgaWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkg
eworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1p
bHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6U2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1
ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5
TmFtZXNJbmRleDo6U2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgor
ICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpD
dXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4g
V2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFtaWx5Owor
ICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFt
aWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENT
U1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlO
YW1lczo6RmFtaWx5TmFtZXNJbmRleDo6UGljdG9ncmFwaEZhbWlseTsKKyAgICBjYXNlIENTU1Zh
bHVlU3lzdGVtVWk6CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWls
eU5hbWVzSW5kZXg6OlN5c3RlbVVpRmFtaWx5OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpG
YW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVycwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaAppbmRleCA5MTNjMTA4ZjNhYzk0M2Y0YjBhNTQ5MmI0ZWM1ZDE5YWUwZGE2MzRlLi43MmFh
YzVlYmEwMTM3Y2JlYTBjODFiOTkyMzZjNjA2Y2M3ZTkwNDNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTQyLDYg
KzQyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIFdlYktpdEZvbnRG
YW1pbHlOYW1lcyB7CitlbnVtIGNsYXNzIEZhbWlseU5hbWVzSW5kZXg7Cit9CisKIC8vIFdoZW4g
dGhlc2UgZnVuY3Rpb25zIGFyZSBzdWNjZXNzZnVsLCB0aGV5IHdpbGwgY29uc3VtZSBhbGwgdGhl
IHJlbGV2YW50CiAvLyB0b2tlbnMgZnJvbSB0aGUgcmFuZ2UgYW5kIGFsc28gY29uc3VtZSBhbnkg
d2hpdGVzcGFjZSB3aGljaCBmb2xsb3dzLiBXaGVuCiAvLyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdl
IGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgd2UncmUgbG9va2luZyBmb3IsIHRoZSByYW5nZQpAQCAt
MTcwLDYgKzE3NCw3IEBAIE9wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9udFNpemVSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuCiBPcHRpb25hbDxMaW5lSGVp
Z2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSk7CiBPcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwogY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJp
Y0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEKTsKK1dlYktpdEZvbnRGYW1pbHlOYW1l
czo6RmFtaWx5TmFtZXNJbmRleCBnZW5lcmljRm9udEZhbWlseUluZGV4RnJvbVZhbHVlSUQoQ1NT
VmFsdWVJRCk7CiAKIGJvb2wgaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZG91YmxlIGFuZ2xlSW5E
ZWdyZWVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggZWI0ZjI4YmQzMzA3ZTQ3NGRi
YTdhM2UyNmFhN2NhMDA1NjNmNTYxMi4uMDJmZjg4M2RiODk1MzM0OTc2NDc2YTVjOTUwODkxYTFi
NmQ3ZDcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0yMDQxLDcgKzIwNDEsNyBAQCB2
b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0eWxlVHlwZSB0eXBlKQogICAgICAg
ICAgICAgLy8gSW5zZXJ0aW5nIHRoZSBwaWN0b2dyYXBoIGZvbnQgYXQgdGhlIGVuZCBvZiB0aGUg
Zm9udCBmYWxsYmFjayBsaXN0IGlzIGRvbmUgYnkgdGhlCiAgICAgICAgICAgICAvLyBmb250IHNl
bGVjdG9yLCBzbyBzZXQgYSBmb250IHNlbGVjdG9yIGlmIG5lZWRlZC4KICAgICAgICAgICAgIGlm
IChzZXR0aW5ncygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocygpKQotICAgICAgICAg
ICAgICAgIGRvY3VtZW50U3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmZvbnRTZWxlY3Rvcigp
KTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKGZv
bnRTZWxlY3RvcigpKTsKIAogICAgICAgICAgICAgYXV0byBkb2N1bWVudENoYW5nZSA9IFN0eWxl
OjpkZXRlcm1pbmVDaGFuZ2UoZG9jdW1lbnRTdHlsZSwgbV9yZW5kZXJWaWV3LT5zdHlsZSgpKTsK
ICAgICAgICAgICAgIGlmIChkb2N1bWVudENoYW5nZSAhPSBTdHlsZTo6Q2hhbmdlOjpOb25lKQpA
QCAtMjA2Miw3ICsyMDYyLDcgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29sdmVT
dHlsZVR5cGUgdHlwZSkKIAogICAgICAgICBtX2luU3R5bGVSZWNhbGMgPSBmYWxzZTsKIAotICAg
ICAgICBmb250U2VsZWN0b3IoKS5sb2FkUGVuZGluZ0ZvbnRzKCk7CisgICAgICAgIGZvbnRTZWxl
Y3RvcigpLT5sb2FkUGVuZGluZ0ZvbnRzKCk7CiAKICAgICAgICAgaWYgKHN0eWxlVXBkYXRlKSB7
CiAgICAgICAgICAgICB1cGRhdGVSZW5kZXJUcmVlKFdURk1vdmUoc3R5bGVVcGRhdGUpKTsKQEAg
LTMxNjUsNyArMzE2NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogCiAgICAg
bV9wcm9jZXNzaW5nTG9hZEV2ZW50ID0gZmFsc2U7CiAKLSAgICBpZiAoYXV0byBmb250RmFjZVNl
dCA9IG1ha2VSZWZQdHIoZm9udFNlbGVjdG9yKCkuZm9udEZhY2VTZXRJZkV4aXN0cygpKSkKKyAg
ICBpZiAoYXV0byBmb250RmFjZVNldCA9IG1ha2VSZWZQdHIoZm9udFNlbGVjdG9yKCktPmZvbnRG
YWNlU2V0SWZFeGlzdHMoKSkpCiAgICAgICAgIGZvbnRGYWNlU2V0LT5kb2N1bWVudERpZEZpbmlz
aExvYWRpbmcoKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShXSU4pIHx8IFBM
QVRGT1JNKEdUSykKQEAgLTcyOTYsNyArNzI5Niw3IEBAIFJlZjxEb2N1bWVudEZyYWdtZW50PiBE
b2N1bWVudDo6ZG9jdW1lbnRGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCkKIFJlZjxGb250RmFj
ZVNldD4gRG9jdW1lbnQ6OmZvbnRzKCkKIHsKICAgICB1cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0g
ICAgcmV0dXJuIGZvbnRTZWxlY3RvcigpLmZvbnRGYWNlU2V0KCk7CisgICAgcmV0dXJuIGZvbnRT
ZWxlY3RvcigpLT5mb250RmFjZVNldCgpOwogfQogICAgIAogRWRpdGluZ0JlaGF2aW9yIERvY3Vt
ZW50OjplZGl0aW5nQmVoYXZpb3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBjNGZl
MjI1ODkwYWI0OGZkNGFlMzEwOWQ5OGU0MzZlMWMzZWM0OGJkLi41OWM5YmMzNDliMzgzZDY2ZWFj
YTA3ZThjYjljNWZjYWM1M2JiMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNTQxLDggKzU0
MSw4IEBAIHB1YmxpYzoKIAogICAgIFN0eWxlOjpSZXNvbHZlciYgdXNlckFnZW50U2hhZG93VHJl
ZVN0eWxlUmVzb2x2ZXIoKTsKIAotICAgIENTU0ZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKCkg
eyByZXR1cm4gbV9mb250U2VsZWN0b3I7IH0KLSAgICBjb25zdCBDU1NGb250U2VsZWN0b3ImIGZv
bnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yOyB9CisgICAgQ1NTRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBmaW5hbCB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5w
dHIoKTsgfQorICAgIGNvbnN0IENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9mb250U2VsZWN0b3IucHRyKCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgY29uc3Q7CiAgICAgYm9vbCBpc0lnbm9yaW5nUGVu
ZGluZ1N0eWxlc2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVQZW5kaW5nU3R5bGVzaGVl
dHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApp
bmRleCBkMjcxN2JmNzgzMWY0ZmI1ZDc4ZjA1MGM5NGI0YWE2NzEyY2I2OWQ4Li5jNzczODMxYjg4
YzJiMDJiMDViYzJmZmI2ZjA1M2U4ZGFmMWE1ZjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
RGF0YWJhc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFcnJv
ckV2ZW50LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNXb3Jr
ZXJHbG9iYWxTY29wZS5oIgpAQCAtMjI2LDYgKzIyNywxMSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmRpZExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgVVJMJikKIHsKIH0K
IAorRm9udENhY2hlJiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb250Q2FjaGUoKQoreworICAg
IHJldHVybiBGb250Q2FjaGU6OnNpbmdsZXRvbigpOworfQorCiB2b2lkIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OmZvckVhY2hBY3RpdmVET01PYmplY3QoY29uc3QgRnVuY3Rpb248U2hvdWxkQ29u
dGludWUoQWN0aXZlRE9NT2JqZWN0Jik+JiBhcHBseSkgY29uc3QKIHsKICAgICAvLyBJdCBpcyBu
b3QgYWxsb3dlZCB0byBydW4gYXJiaXRyYXJ5IHNjcmlwdCBvciBjb25zdHJ1Y3QgbmV3IEFjdGl2
ZURPTU9iamVjdHMgd2hpbGUgd2UgYXJlIGl0ZXJhdGluZyBvdmVyIEFjdGl2ZURPTU9iamVjdHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAppbmRleCAxZDM1
MjQxZmFkODJhZDFhNjRhOTEyZDRiMDYyN2E2OGY5MWJkOGUyLi4zMmJmZjcwYzI5ZDliYzFhZjJm
YWU5OTMzZGU5NmI0NGRhMGNiZGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKQEAgLTYwLDEwICs2MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEV2ZW50TG9vcDsKIGNsYXNzIENhY2hlZFNjcmlwdDsKK2NsYXNzIENTU0ZvbnRTZWxl
Y3RvcjsKIGNsYXNzIERhdGFiYXNlQ29udGV4dDsKIGNsYXNzIEV2ZW50UXVldWU7CiBjbGFzcyBF
dmVudExvb3BUYXNrR3JvdXA7CiBjbGFzcyBFdmVudFRhcmdldDsKK2NsYXNzIEZvbnRDYWNoZTsK
IGNsYXNzIE1lc3NhZ2VQb3J0OwogY2xhc3MgUHVibGljVVJMTWFuYWdlcjsKIGNsYXNzIFJlamVj
dGVkUHJvbWlzZVRyYWNrZXI7CkBAIC0xNjEsNiArMTYzLDkgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIGRpZExvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgVVJMJik7CiAKKyAg
ICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCk7CisgICAgdmlydHVhbCBDU1NGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIHZvaWQgcmVm
KCkgeyByZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBk
ZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCAxNDE1
NTdmZGM5N2I0MjBiYzEyMzljMTMxNzc0ZjM0N2M2ZWNjMDRmLi4xNGRjYmRjN2NiMDNkZTE2NTVm
ZDAxZjgwYzhkMDczMTZiMzM1N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTE1MSw3ICsxNTEsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udFdpdGhvdXRVcGRhdGluZ1N0
eWxlKGNvbnN0IFN0cmluZyYgbmV3Rm9udAogICAgIHJlYWxpemVTYXZlcygpOwogICAgIG1vZGlm
aWFibGVTdGF0ZSgpLnVucGFyc2VkRm9udCA9IG5ld0ZvbnRTYWZlQ29weTsKIAotICAgIG1vZGlm
aWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKmZv
bnRDYXNjYWRlKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoKmRvY3Vt
ZW50LmZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOwogICAgIEFTU0VSVChzdGF0ZSgpLmZv
bnQucmVhbGl6ZWQoKSk7CiAgICAgQVNTRVJUKHN0YXRlKCkuZm9udC5pc1BvcHVsYXRlZCgpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggZDljYTZjYjM1ZjY3NmYwMDhiZTI2MTBiOTRj
MDdiZjQ4ODAyMmRlNS4uYzk4ZTkxMzJmNjQ0NDYzMWIzYzgxZWNiMDg1OGI3MDk0YWY1MmY0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTIzNjYsOCArMjM2Niw2IEBAIGJvb2wgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FuRHJhd1RleHQoZmxvYXQgeCwgZmxvYXQgeSwgYm9v
bCBmaWxsLCBPcHRpCiAgICAgaWYgKCFmb250UHJveHkoKS0+cmVhbGl6ZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQg
c2NyaXB0RGlzYWxsb3dlZFNjb3BlOwotCiAgICAgYXV0byogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAppbmRleCBmMTc4ODc0YWZhNjY3OWY5MDFhNWVjZWUzMmJiNGZmNWRkM2YyOTM4
Li45ZGM0ZWNjNGNjZjM5ZjlmYmIyYWQzZjI0Yzc4ZmI3NjAyNTM2MDUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM4LDggKzM4LDggQEAKICNpbmNsdWRlICJDU1NGb250
U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCIKICNpbmNsdWRlICJUZXh0TWV0cmljcy5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC02Myw4ICs2Myw2IEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjb21taXQoKQogdm9pZCBPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQog
ewogICAgIGF1dG8mIGNvbnRleHQgPSAqY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKLSAgICBpZiAoIWlzPERvY3VtZW50Pihjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG5ld0ZvbnQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC05MCwxMSAr
ODgsOSBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
b25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoRGVmYXVsdEZvbnRTaXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KERlZmF1bHRGb250U2l6ZSk7CiAKLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50Pihjb250ZXh0KTsKLSAgICBhdXRvIGZvbnRDYXNjYWRlID0gU3R5bGU6OnJlc29sdmVGb3JG
b250UmF3KCpmb250UmF3LCBXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIGRvY3VtZW50KTsKLQor
ICAgIGF1dG8gZm9udENhc2NhZGUgPSBTdHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcoKmZvbnRSYXcs
IFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgY29udGV4dCk7CiAgICAgaWYgKGZvbnRDYXNjYWRl
KQotICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9u
dFNlbGVjdG9yKCksICpmb250Q2FzY2FkZSk7CisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZv
bnQuaW5pdGlhbGl6ZSgqY29udGV4dC5mb250U2VsZWN0b3IoKSwgKmZvbnRDYXNjYWRlKTsKIH0K
IAogQ2FudmFzRGlyZWN0aW9uIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGly
ZWN0aW9uKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCmlu
ZGV4IGM0ZTQ2ZTg3MmM2YTZkMDIzMTdlYjE4MjE1NTI1NjNmZmVhNTVjZmEuLjI4NzM0NTQxMDI1
MDA4ZjA5N2QxYzI0YmFlMDZjZWM0Mzc0ODIzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6
OnN0b3BMb2FkaW5nKCkKICAgICBjYW5jZWxBbGwobV9tdWx0aXBhcnRTdWJyZXNvdXJjZUxvYWRl
cnMpOwogCiAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKSkKLSAgICAg
ICAgZG9jdW1lbnQtPmZvbnRTZWxlY3RvcigpLnN1c3BlbmRGb250TG9hZGluZ1RpbWVyKCk7Cisg
ICAgICAgIGRvY3VtZW50LT5mb250U2VsZWN0b3IoKS0+c3VzcGVuZEZvbnRMb2FkaW5nVGltZXIo
KTsKIAogICAgIC8vIEFwcGNhY2hlIHVzZXMgUmVzb3VyY2VIYW5kbGUgZGlyZWN0bHksIERvY3Vt
ZW50TG9hZGVyIGRvZXNuJ3QgY291bnQgdGhlc2UgbG9hZHMuCiAgICAgbV9hcHBsaWNhdGlvbkNh
Y2hlSG9zdC0+c3RvcExvYWRpbmdJbkZyYW1lKCptX2ZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL01l
bW9yeVJlbGVhc2UuY3BwCmluZGV4IDRhZDUzNWRkNzllNTQ5MjIxNGMwMDA3M2E1M2RlNDU4N2Ni
NDhhY2YuLjgxYjg1OGQ2NmZjN2E1NjY3ZTQyY2YxZDcxNWFhOTU0ODZkMGQ0YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTWVtb3J5UmVsZWFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9NZW1vcnlSZWxlYXNlLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyB2
b2lkIHJlbGVhc2VDcml0aWNhbE1lbW9yeShTeW5jaHJvbm91cyBzeW5jaHJvbm91cywgTWFpbnRh
aW5CYWNrRm9yd2FyZENhCiAKICAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogY29weVRvVmVjdG9y
T2Y8UmVmUHRyPERvY3VtZW50Pj4oRG9jdW1lbnQ6OmFsbERvY3VtZW50cygpKSkgewogICAgICAg
ICBkb2N1bWVudC0+c3R5bGVTY29wZSgpLnJlbGVhc2VNZW1vcnkoKTsKLSAgICAgICAgZG9jdW1l
bnQtPmZvbnRTZWxlY3RvcigpLmVtcHR5Q2FjaGVzKCk7CisgICAgICAgIGRvY3VtZW50LT5mb250
U2VsZWN0b3IoKS0+ZW1wdHlDYWNoZXMoKTsKICAgICAgICAgZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCkuZ2FyYmFnZUNvbGxlY3REb2N1bWVudFJlc291cmNlcygpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmlu
ZGV4IDVjZWE3NDUyZDVmZjJlNmNiNWYzZTExNjY1OTdiNzlmZDhmNzNkN2QuLjU0NGZlNmU1MjM5
ZmQyNzk2NjAxZjYxNmRkMjA5ZWM1MzAyNGFkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29s
IEZvbnRDYXNjYWRlOjppc0N1cnJlbnQoY29uc3QgRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3Ip
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZvbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKG1fZm9udHMtPmdlbmVyYXRpb24oKSAhPSBGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVy
YXRpb24oKSkKKyAgICBpZiAobV9mb250cy0+Z2VuZXJhdGlvbigpICE9IGZvbnRTZWxlY3Rvci5m
b250Q2FjaGUoKS5nZW5lcmF0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
bV9mb250cy0+Zm9udFNlbGVjdG9yVmVyc2lvbigpICE9IGZvbnRTZWxlY3Rvci52ZXJzaW9uKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2OCw3ICsxNjgsOCBAQCB2b2lkIEZvbnRDYXNj
YWRlOjp1cGRhdGVGb250cyhSZWY8Rm9udENhc2NhZGVGb250cz4mJiBmb250cykgY29uc3QKIAog
dm9pZCBGb250Q2FzY2FkZTo6dXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVj
dG9yKSBjb25zdAogewotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlRm9udENhc2Nh
ZGUoKnRoaXMsIFdURk1vdmUoZm9udFNlbGVjdG9yKSk7CisgICAgYXV0byYgZm9udENhY2hlID0g
Zm9udFNlbGVjdG9yID8gZm9udFNlbGVjdG9yLT5mb250Q2FjaGUoKSA6IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCk7CisgICAgZm9udENhY2hlLnVwZGF0ZUZvbnRDYXNjYWRlKCp0aGlzLCBXVEZNb3Zl
KGZvbnRTZWxlY3RvcikpOwogfQogCiBHbHlwaEJ1ZmZlciBGb250Q2FzY2FkZTo6bGF5b3V0VGV4
dChDb2RlUGF0aCBjb2RlUGF0aFRvVXNlLCBjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZUZvbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlRm9udHMuY3BwCmluZGV4IDljN2JlZWJkOGQ1MjdjNzgxMGE5MDE0NDk1YzAxZjNjYTg4NGRh
ZTEuLjVkNzU2NzhhNDc1MzE0Y2RiOTNhODliMGFlNmNhYmI3ZmEyNGVjZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3Bw
CkBAIC0xMDIsNyArMTAyLDcgQEAgRm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyhS
ZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikKICAgICA6IG1fY2FjaGVkUHJpbWFy
eUZvbnQobnVsbHB0cikKICAgICAsIG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKICAgICAs
IG1fZm9udFNlbGVjdG9yVmVyc2lvbihtX2ZvbnRTZWxlY3RvciA/IG1fZm9udFNlbGVjdG9yLT52
ZXJzaW9uKCkgOiAwKQotICAgICwgbV9nZW5lcmF0aW9uKEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
Z2VuZXJhdGlvbigpKQorICAgICwgbV9nZW5lcmF0aW9uKG1fZm9udFNlbGVjdG9yID8gbV9mb250
U2VsZWN0b3ItPmZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSA6IEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkuZ2VuZXJhdGlvbigpKQogewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgaWYgKCFpc01haW5U
aHJlYWQoKSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4
dEZhbGxiYWNrKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLAogewog
ICAgIEFTU0VSVChpbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpOwog
Ci0gICAgYXV0byYgZm9udENhY2hlID0gRm9udENhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBhdXRv
JiBmb250Q2FjaGUgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0b3ItPmZvbnRDYWNoZSgpIDog
Rm9udENhY2hlOjpzaW5nbGV0b24oKTsKICAgICB3aGlsZSAoaW5kZXggPCBkZXNjcmlwdGlvbi5l
ZmZlY3RpdmVGYW1pbHlDb3VudCgpKSB7CiAgICAgICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFr
ZVZpc2l0b3IoWyZdKGNvbnN0IEF0b21TdHJpbmcmIGZhbWlseSkgLT4gRm9udFJhbmdlcyB7CiAg
ICAgICAgICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKQEAgLTE4MSw3ICsxODEsOSBAQCBjb25z
dCBGb250UmFuZ2VzJiBGb250Q2FzY2FkZUZvbnRzOjpyZWFsaXplRmFsbGJhY2tSYW5nZXNBdChj
b25zdCBGb250Q2FzY2FkZURlcwogICAgICAgICByZXR1cm4gbV9yZWFsaXplZEZhbGxiYWNrUmFu
Z2VzW2luZGV4XTsKIAogICAgIEFTU0VSVChpbmRleCA9PSBtX3JlYWxpemVkRmFsbGJhY2tSYW5n
ZXMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9u
KCkgPT0gbV9nZW5lcmF0aW9uKTsKKworICAgIGF1dG8mIGZvbnRDYWNoZSA9IG1fZm9udFNlbGVj
dG9yID8gbV9mb250U2VsZWN0b3ItPmZvbnRDYWNoZSgpIDogRm9udENhY2hlOjpzaW5nbGV0b24o
KTsKKyAgICBBU1NFUlQoZm9udENhY2hlLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwog
CiAgICAgbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLmFwcGVuZChGb250UmFuZ2VzKCkpOwogICAg
IGF1dG8mIGZvbnRSYW5nZXMgPSBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMubGFzdCgpOwpAQCAt
MTkxLDcgKzE5Myw3IEBAIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRlRm9udHM6OnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAgICAgICAgIGlmIChmb250
UmFuZ2VzLmlzTnVsbCgpICYmIG1fZm9udFNlbGVjdG9yKQogICAgICAgICAgICAgZm9udFJhbmdl
cyA9IG1fZm9udFNlbGVjdG9yLT5mb250UmFuZ2VzRm9yRmFtaWx5KGRlc2NyaXB0aW9uLCBzdGFu
ZGFyZEZhbWlseSk7CiAgICAgICAgIGlmIChmb250UmFuZ2VzLmlzTnVsbCgpKQotICAgICAgICAg
ICAgZm9udFJhbmdlcyA9IEZvbnRSYW5nZXMoRm9udENhY2hlOjpzaW5nbGV0b24oKS5sYXN0UmVz
b3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBmb250UmFuZ2VzID0g
Rm9udFJhbmdlcyhmb250Q2FjaGUubGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbikp
OwogICAgICAgICByZXR1cm4gZm9udFJhbmdlczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2Zj
NTQ4MWFhNjM5ODBiNjEwMDZkODVjMmY1MC4uNjU0OGU3NmY5OTYxZmY3ZTFhNTg5ZjVjYmIxYzA1
NzJlYmJhZDg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dFNlbGVjdG9yLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBGb250Q2FjaGU7CiBjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOwogY2xhc3MgRm9u
dERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFNlbGVjdG9yQ2xpZW50OwpAQCAtNTQsNiArNTUsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnRE
YXRhVVJMTG9hZGluZyhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5KSA9IDA7CiAKKyAgICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIHsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRT
ZWxlY3RvckNsaWVudCYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggYTA4
ODJmN2MyY2Y4YjIzNDIzYmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uYjU1NmRmODQyMzNhZWI2Zjhh
ZjdmOGVlYzdiZjUzNzhhMDIyMDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAg
LTEzOCw3ICsxMzgsOCBAQCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAgICAgICAgICAgcmV0
dXJuIGZhbGxiYWNrRm9udDsKICAgICB9CiAKLSAgICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9u
dERlc2NyaXB0aW9uLCBiYXNlRm9udCwgSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vLCBwcmVmZXJDb2xv
cmVkRm9udCA/IEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6OlllcyA6IEZvbnRDYWNoZTo6
UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgYXV0byYg
Zm9udENhY2hlID0gZm9udFNlbGVjdG9yKCkgPyBmb250U2VsZWN0b3IoKS0+Zm9udENhY2hlKCkg
OiBGb250Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIGlmIChhdXRvIHN5c3RlbUZhbGxiYWNrID0g
Zm9udENhY2hlLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhtX2ZvbnREZXNjcmlwdGlvbiwg
YmFzZUZvbnQsIElzRm9yUGxhdGZvcm1Gb250OjpObywgcHJlZmVyQ29sb3JlZEZvbnQgPyBGb250
Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpZZXMgOiBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRG
b250OjpObywgY2hhcmFjdGVycywgbGVuZ3RoKSkgewogICAgICAgICBpZiAoc3lzdGVtRmFsbGJh
Y2stPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0
aCkgJiYgKCFwcmVmZXJDb2xvcmVkRm9udCB8fCBzeXN0ZW1GYWxsYmFjay0+cGxhdGZvcm1EYXRh
KCkuaXNDb2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3lzdGVtRmFsbGJh
Y2suZ2V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNGQ3
NWFjZjM0ZWEwNTNiNjliNmUzY2QwYzQ4YTI1NGJkMDAwNWFhMC4uZTU1Mzc3NjJkZjgyMTU2MDhj
YWMyZDEwODM5MWNiNTM1ZGEwOWNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAg
ICAgICAgLy8gdGhlIGJhc2lzIG9mIHRoZSBncmlkLgogICAgICAgICAgICAgaWYgKG5ld1N0eWxl
LmZvbnREZXNjcmlwdGlvbigpICE9IHZpZXcoKS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpKSB7
CiAgICAgICAgICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgpLnNldEZvbnREZXNjcmlwdGlv
bihGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsgbmV3U3R5bGUuZm9udERlc2NyaXB0aW9uKCkgfSk7
Ci0gICAgICAgICAgICAgICAgdmlldygpLm11dGFibGVTdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBk
YXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICB2aWV3KCku
bXV0YWJsZVN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUoZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDA2NGY4MTQ4ODlhNTQ3ZGZkZWJkMzZlZWYzYzg0
M2ZlN2QzYWIzNTIuLjczOGQwOWE5YmU2YTQwOTcxZjg3OTI3Mzc4NTExYmE4M2UxNWM0NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTEyMSw3ICsx
MjEsNyBAQCBzdGF0aWMgRm9udENhc2NhZGUgYm9sZGVyKERvY3VtZW50JiBkb2N1bWVudCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQpCiAgICAgYXV0byBkZXNjcmlwdGlvbiA9IGZvbnQuZm9udERl
c2NyaXB0aW9uKCk7CiAgICAgZGVzY3JpcHRpb24uc2V0V2VpZ2h0KGRlc2NyaXB0aW9uLmJvbGRl
cldlaWdodCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IEZvbnRDYXNjYWRlIHsgV1RGTW92ZShkZXNj
cmlwdGlvbiksIGZvbnQubGV0dGVyU3BhY2luZygpLCBmb250LndvcmRTcGFjaW5nKCkgfTsKLSAg
ICByZXN1bHQudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisgICAgcmVzdWx0LnVw
ZGF0ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgICAgIGF1dG8g
ZGVzY3JpcHRpb24gPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KGRlc2NyaXB0aW9uLmJvbGRlcldlaWdodCgpKTsKICAgICAgICAgaXRl
bUZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2NyaXB0aW9uKSwgaXRlbUZvbnQubGV0dGVy
U3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKLSAgICAgICAgaXRlbUZvbnQudXBk
YXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgaXRlbUZvbnQudXBkYXRl
KGRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGl0
ZW0gdGV4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJ
dGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5k
ZXggNTEwZDQxY2IxZGZmODVhODY1MzAxMmE3OTI5Mjg0MDIwMmIyNjZlNy4uYWVhZjlkYTIwNzNh
NTgxYjM4N2YzODU3MDY2OWFjM2M5ZmExM2U1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC03Niw3ICs3Niw3IEBAIFJlbmRlclN0eWxlIFJlbmRl
ckxpc3RJdGVtOjpjb21wdXRlTWFya2VyU3R5bGUoKSBjb25zdAogICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6OlRhYnVs
YXJOdW1iZXJzKTsKICAgICBtYXJrZXJTdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTsKLSAgICBtYXJrZXJTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgm
ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgbWFya2VyU3R5bGUuZm9udENhc2NhZGUo
KS51cGRhdGUoZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAgICAgbWFya2VyU3R5bGUuc2V0
VW5pY29kZUJpZGkoRVVuaWNvZGVCaWRpOjpJc29sYXRlKTsKICAgICBtYXJrZXJTdHlsZS5zZXRX
aGl0ZVNwYWNlKFdoaXRlU3BhY2U6OlByZSk7CiAgICAgbWFya2VyU3R5bGUuc2V0VGV4dFRyYW5z
Zm9ybShUZXh0VHJhbnNmb3JtOjpOb25lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwCmluZGV4IGYzOTRiZDYzMzZlNDQ0ODIyN2YxNmFlOTk5NmRlNTVmMjRj
Y2Y4ZWQuLmEwZDg4MjBlZDVhYWRlOWM0NWM3YTQ1ZGE0ZTljMmQ3YjM0MGVjYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAtNjM3LDcgKzYzNyw3
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5k
ZXgpCiAKIEZvbnRTZWxlY3RvciogUmVuZGVyTWVudUxpc3Q6OmZvbnRTZWxlY3RvcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpOworICAgIHJldHVybiBk
b2N1bWVudCgpLmZvbnRTZWxlY3RvcigpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCmluZGV4
IDhlMmRjYjAzNTNlZDk0ZjYwYmQ0YzRhZGNlYjM1M2M2M2M3Nzc5NDAuLmM0ZTBkZTdlOGQ2YzQ4
MmVjM2ZiMzk2NjQzOGJmYjIyMjU2ZWUwNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgUmVuZGVy
U2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiAKIEZvbnRT
ZWxlY3RvciogUmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICZkb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpOworICAgIHJldHVybiBkb2N1bWVudCgp
LmZvbnRTZWxlY3RvcigpOwogfQogCiBIb3N0V2luZG93KiBSZW5kZXJTZWFyY2hGaWVsZDo6aG9z
dFdpbmRvdygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCBmZGZiOTU4ZTc1ODRhYTQwMjhhMzA1NDIwMzA2
NDJjZDM2ZmU0ODliLi40YmM2YmVhM2Y1NTU1YmFiZWEyODU2NDEyMjUyNWViMjQ1OGY4ZTA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIFJlbmRlclNWR0lubGluZVRleHQ6OmNv
bXB1dGVOZXdTY2FsZWRGb250Rm9yU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZQogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0T3JpZW50YXRpb24oRm9udE9yaWVudGF0aW9uOjpIb3Jp
em9udGFsKTsKIAogICAgIHNjYWxlZEZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbiksIDAsIDApOwotICAgIHNjYWxlZEZvbnQudXBkYXRlKCZyZW5kZXJlci5kb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBzY2FsZWRGb250LnVwZGF0ZShyZW5kZXJlci5kb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKIH0KIAogU1ZHSW5saW5lVGV4dEJveCogUmVuZGVyU1ZH
SW5saW5lVGV4dDo6Zmlyc3RUZXh0Qm94KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL01hdGNoZWREZWNsYXJhdGlvbnNDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9NYXRjaGVkRGVjbGFyYXRpb25zQ2FjaGUuY3BwCmluZGV4IGNlNWYxNWNmNmQ4ZWQ1NTZm
MDRkZWFmYmQwNzE4YWIwYWFmYjFmOTIuLjk3ZmY0ZWM2NjVjZTJkN2VmMmNmODg4OWNlNTNkOGE0
YjkwMjkzYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL01hdGNoZWREZWNsYXJh
dGlvbnNDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvTWF0Y2hlZERlY2xhcmF0
aW9uc0NhY2hlLmNwcApAQCAtNjUsNyArNjUsNyBAQCBib29sIE1hdGNoZWREZWNsYXJhdGlvbnND
YWNoZTo6aXNDYWNoZWFibGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyUwog
CiAgICAgLy8gR2V0dGluZyBjb21wdXRlZCBzdHlsZSBhZnRlciBhIGZvbnQgZW52aXJvbm1lbnQg
Y2hhbmdlIGJ1dCBiZWZvcmUgZnVsbCBzdHlsZSByZXNvbHV0aW9uIG1heSBpbnZvbHZlIHN0eWxl
cyB3aXRoIG5vbi1jdXJyZW50IGZvbnRzLgogICAgIC8vIEF2b2lkIGNhY2hpbmcgdGhlbS4KLSAg
ICBhdXRvJiBmb250U2VsZWN0b3IgPSBlbGVtZW50LmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCk7
CisgICAgYXV0byYgZm9udFNlbGVjdG9yID0gKmVsZW1lbnQuZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKTsKICAgICBpZiAoIXN0eWxlLmZvbnRDYXNjYWRlKCkuaXNDdXJyZW50KGZvbnRTZWxlY3Rv
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXBhcmVudFN0eWxlLmZvbnRDYXNj
YWRlKCkuaXNDdXJyZW50KGZvbnRTZWxlY3RvcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3BwCmlu
ZGV4IDNhNWI1NjEwYmE3NmMzOTY3NDBmNjEwMDFjZWI4ZDJmMGEzZDk4YzkuLjc3MzFmYmQ3YTE3
ZGMwYmYyN2QyODY3ZjY3MmU2MWE1NTRlYTJiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQuY3Bw
CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcywgTWVkaWFRdWUKICAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlz
IGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAgICAgICAgaWYgKHJlc29sdmVyKSB7Ci0gICAg
ICAgICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZh
Y2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICByZXNvbHZlci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS0+YWRk
Rm9udEZhY2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZh
bHNlKTsKICAgICAgICAgICAgICAgICByZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWREZWNsYXJh
dGlvbnNDYWNoZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxl
Y3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuY3BwCmluZGV4IGM2NmM4YjI3YTY1YTg0NGI2NzRlZjFlZWEwZjhhZmFhMDIzMzNl
ZWIuLmE0YTFlNmJkNDM2MzY4ZmUxNDY5NTFmOGI0YjcwODczMzI3YzY2NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTM0NCw3ICszNDQsNyBAQCB2
b2lkIEJ1aWxkZXJTdGF0ZTo6YWRqdXN0U3R5bGVGb3JJbnRlckNoYXJhY3RlclJ1YnkoKQogCiB2
b2lkIEJ1aWxkZXJTdGF0ZTo6dXBkYXRlRm9udCgpCiB7Ci0gICAgYXV0byYgZm9udFNlbGVjdG9y
ID0gY29uc3RfY2FzdDxEb2N1bWVudCY+KGRvY3VtZW50KCkpLmZvbnRTZWxlY3RvcigpOworICAg
IGF1dG8qIGZvbnRTZWxlY3RvciA9IGNvbnN0X2Nhc3Q8RG9jdW1lbnQmPihkb2N1bWVudCgpKS5m
b250U2VsZWN0b3IoKTsKIAogICAgIGF1dG8gbmVlZHNVcGRhdGUgPSBbJl0gewogICAgICAgICBp
ZiAobV9mb250RGlydHkpCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBCdWlsZGVyU3RhdGU6OnVw
ZGF0ZUZvbnQoKQogICAgIHVwZGF0ZUZvbnRGb3Jab29tQ2hhbmdlKCk7CiAgICAgdXBkYXRlRm9u
dEZvck9yaWVudGF0aW9uQ2hhbmdlKCk7CiAKLSAgICBtX3N0eWxlLmZvbnRDYXNjYWRlKCkudXBk
YXRlKCZmb250U2VsZWN0b3IpOworICAgIG1fc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoZm9u
dFNlbGVjdG9yKTsKIAogICAgIG1fZm9udERpcnR5ID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAKaW5kZXggMzMxODliZDY0
Y2FjYmVkZjkzNjhkMzRmYTlmYjU2NGQ1OGJkMWYzNi4uNThhNmU3NDUwNzg1ODEzMmNkMmY2ZGI5
NGM0ZGQxMDExYTMwNjJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmNwcApAQCAtMTI1LDcgKzEyNSw3IEBAIFJlbmRlclN0eWxlIHJlc29s
dmVGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiAKICAgICBkb2N1bWVudFN0
eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogCi0gICAg
ZG9jdW1lbnRTdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmY29uc3RfY2FzdDxEb2N1bWVudCY+
KGRvY3VtZW50KS5mb250U2VsZWN0b3IoKSk7CisgICAgZG9jdW1lbnRTdHlsZS5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShjb25zdF9jYXN0PERvY3VtZW50Jj4oZG9jdW1lbnQpLmZvbnRTZWxlY3Rvcigp
KTsKIAogICAgIHJldHVybiBkb2N1bWVudFN0eWxlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAppbmRleCAxZjVjYzQxNDhkNWEwYmZmODVl
ZTAxMTIxMzc1NTJmMWY4ZDM5YmQzLi5kMmFmZDhjMmM0N2M3Mjc1NGIzZDZiNmI1ZDY3OTI5ZTM0
Mjk2NDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JG
b250UmF3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250
UmF3LmNwcApAQCAtMzIsMjggKzMyLDM3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5oIgogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTSGVs
cGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkZvbnRDYXNj
YWRlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFt
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgU3R5bGUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdEZvbnRGYW1pbHlOYW1lczsKIAotT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JG
b250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiBm
b250RGVzY3JpcHRpb24sIERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBib29sIHVzZUZpeGVk
RGVmYXVsdFNpemUoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KQoreworICAgIHJldHVybiBmb250RGVzY3JpcHRpb24uZmFtaWx5Q291bnQoKSA9PSAxICYmIGZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpOworfQor
CitPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYg
Zm9udFJhdywgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKICAgICAvLyBNYXAgdGhlIGZvbnQgcHJvcGVy
dHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgogICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250
RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgLy8gRm9udCBmYW1pbHkgYXBwbGll
ZCBpbiB0aGUgc2FtZSB3YXkgYXMgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZh
bWlseQogICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5
LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgotICAgIGJvb2wgb2xkRmFtaWx5
VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpOworICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSB1c2VGaXhlZERl
ZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbik7CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFt
aWxpZXM7CiAgICAgZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LmZhbWls
eS5zaXplKCkpOwpAQCAtNjMsNyArNzIsMTAgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAg
ICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoT24oaXRl
bSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkg
PSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7Ci0gICAgICAgICAgICBmYW1pbHkgPSBpc0dl
bmVyaWNGYW1pbHkgPyBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
RnJvbVZhbHVlSUQoaWRlbnQpIDogQXRvbVN0cmluZyhkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5k
YXJkRm9udEZhbWlseSgpKTsKKyAgICAgICAgICAgIGlmIChpc0dlbmVyaWNGYW1pbHkpCisgICAg
ICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUluZGV4RnJv
bVZhbHVlSUQoaWRlbnQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFt
aWx5ID0gQXRvbVN0cmluZyhjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkuZm9udEdlbmVyaWNGYW1p
bGllcy5zdGFuZGFyZEZvbnRGYW1pbHkoKSk7CiAgICAgICAgIH0sIFsmXSAoY29uc3QgU3RyaW5n
JiBmYW1pbHlTdHJpbmcpIHsKICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseVN0cmluZzsKICAg
ICAgICAgfSk7CkBAIC03OSwxMSArOTEsMTEgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxp
ZXMoZmFtaWxpZXMpOwogCi0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKKyAgICBpZiAodXNlRml4
ZWREZWZhdWx0U2l6ZShmb250RGVzY3JpcHRpb24pICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1
bHRTaXplKSB7CiAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKLSAgICAgICAgICAgIGF1dG8g
c2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1p
bHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAgYXV0byBzaXpl
ID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplLCBjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkpOwogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJv
bVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIDEu
MCwgTWluaW11bUZvbnRTaXplUnVsZTo6Tm9uZSwgZG9jdW1lbnQuc2V0dGluZ3NWYWx1ZXMoKSkp
OworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29t
cHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fi
c29sdXRlU2l6ZSgpLCAxLjAsIE1pbmltdW1Gb250U2l6ZVJ1bGU6Ok5vbmUsIGNvbnRleHQuc2V0
dGluZ3NWYWx1ZXMoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNzYsNyArMTg4LDcgQEAg
T3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZv
bnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKICAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKGlkZW50KTsKLSAgICAgICAgICAg
IHJldHVybiBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBkb2N1bWVudCk7CisgICAgICAgICAgICByZXR1cm4gU3R5
bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSwgY29udGV4dC5zZXR0aW5nc1ZhbHVlcygpKTsKICAgICAgICAgY2FzZSBDU1NW
YWx1ZUxhcmdlcjoKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4yZjsKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CkBAIC0xODcsOCArMTk5LDggQEAgT3B0aW9uYWw8Rm9u
dENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRD
YXNjYWRlRGVzY3IKICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKICAgICAgICAgcmV0dXJuIHN3
aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0g
Rm9udENhc2NhZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKTsKLSAg
ICAgICAgICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3RoLnZh
bHVlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAmZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwgJmZv
bnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9u
KCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSkpOworICAgICAgICAgICAgZm9udENhc2NhZGUudXBk
YXRlKGNvbnRleHQuZm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0
aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAm
Zm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwgJmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
LCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIGlzPERvY3VtZW50Pihjb250ZXh0KSA/
IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5yZW5kZXJWaWV3KCkgOiBudWxscHRyKSk7CiAg
ICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC4wKTsKICAg
ICAgICAgfSk7CkBAIC0yMDMsNyArMjE1LDcgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAg
ICAvLyBpdCwgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbGluZS1oZWlnaHQgaW5mb3JtYXRpb24gb24g
Rm9udFJhdy4KIAogICAgIGF1dG8gZm9udENhc2NhZGUgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwotICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNl
bGVjdG9yKCkpOworICAgIGZvbnRDYXNjYWRlLnVwZGF0ZShjb250ZXh0LmZvbnRTZWxlY3Rvcigp
KTsKICAgICByZXR1cm4gZm9udENhc2NhZGU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaAppbmRleCAxYTg2YTlmMTU4OGRjZTE3OGE0MzkwZDc0
OTM1NDBmZjg5MmFiM2IwLi4yYmNmY2JmYWRkNDUyN2MzYTFiMmViNjhmMmM4ZWI1ZmU5ZTlmYTM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oCkBA
IC0zMiw5ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb247CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKIHN0cnVjdCBGb250UmF3OwpAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgRm9udFJh
dzsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVG
b3JGb250UmF3KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJhdyYsIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mJiwgRG9jdW1lbnQmKTsKK09wdGlvbmFsPEZvbnRDYXNjYWRlPiBy
ZXNvbHZlRm9yRm9udFJhdyhjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXcm
LCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKIAog
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAzNGU4MDJmYWZj
MTdhNzU3ZjIyNzYxMmMzMGYyYzhjMjBlOWE5ODc1Li4xMDNlZTA1ZmIwYTJjYmE4NmQzNWM3OTNh
NjIzODFhYWJmNWJkNWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcApA
QCAtMTA2LDEwICsxMDYsMTAgQEAgUmVzb2x2ZXI6OlJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVu
dCkKICAgICBpZiAoYXV0byogZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQoKSkgewogICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQo
KmRvY3VtZW50RWxlbWVudCwgbV9kb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBudWxscHRyLCBSdWxl
TWF0Y2hpbmdCZWhhdmlvcjo6TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0eWxlOwog
ICAgICAgICAvLyBUdXJuIG9mZiBhc3NlcnRpb24gYWdhaW5zdCBmb250IGxvb2t1cHMgZHVyaW5n
IHN0eWxlIHJlc29sdmVyIGluaXRpYWxpemF0aW9uLiBXZSBtYXkgbmVlZCByb290IHN0eWxlIGZv
bnQgZm9yIG1lZGlhIHF1ZXJpZXMuCi0gICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCku
aW5jcmVtZW50SXNDb21wdXRpbmdSb290U3R5bGVGb250KCk7Ci0gICAgICAgIG1fcm9vdERlZmF1
bHRTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUoJm1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkp
OworICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLT5pbmNyZW1lbnRJc0NvbXB1dGlu
Z1Jvb3RTdHlsZUZvbnQoKTsKKyAgICAgICAgbV9yb290RGVmYXVsdFN0eWxlLT5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZShtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKICAgICAgICAgbV9yb290RGVm
YXVsdFN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgICAgIG1fZG9jdW1l
bnQuZm9udFNlbGVjdG9yKCkuZGVjcmVtZW50SXNDb21wdXRpbmdSb290U3R5bGVGb250KCk7Cisg
ICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCktPmRlY3JlbWVudElzQ29tcHV0aW5nUm9v
dFN0eWxlRm9udCgpOwogICAgIH0KIAogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmll
dykKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFJlc29sdmVyOjphZGRDdXJyZW50U1ZHRm9udEZh
Y2VSdWxlcygpCiAgICAgaWYgKG1fZG9jdW1lbnQuc3ZnRXh0ZW5zaW9ucygpKSB7CiAgICAgICAg
IGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4mIHN2Z0ZvbnRGYWNlRWxlbWVudHMg
PSBtX2RvY3VtZW50LnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZhY2VFbGVtZW50cygpOwogICAg
ICAgICBmb3IgKGF1dG8qIHN2Z0ZvbnRGYWNlRWxlbWVudCA6IHN2Z0ZvbnRGYWNlRWxlbWVudHMp
Ci0gICAgICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLmFkZEZvbnRGYWNlUnVsZShz
dmdGb250RmFjZUVsZW1lbnQtPmZvbnRGYWNlUnVsZSgpLCBzdmdGb250RmFjZUVsZW1lbnQtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkpOworICAgICAgICAgICAgbV9kb2N1bWVudC5mb250U2Vs
ZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKHN2Z0ZvbnRGYWNlRWxlbWVudC0+Zm9udEZhY2VSdWxl
KCksIHN2Z0ZvbnRGYWNlRWxlbWVudC0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSk7CiAgICAg
fQogfQogCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWwKICAgICBt
X3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzLCAmbV9tZWRpYVF1
ZXJ5RXZhbHVhdG9yLCBtX2luc3BlY3RvckNTU09NV3JhcHBlcnMpOwogCiAgICAgaWYgKGF1dG8g
cmVuZGVyVmlldyA9IGRvY3VtZW50KCkucmVuZGVyVmlldygpKQotICAgICAgICByZW5kZXJWaWV3
LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
KTsKKyAgICAgICAgcmVuZGVyVmlldy0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZShkb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKIH0KIAogLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5
bGUgc2V0dGluZyBmdW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCkBAIC00MzksNyArNDM5LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9y
RWxlbWVudChjb25zdCBFbGVtZW50KiBlbGUKICAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxk
QWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5zaG91bGRBbGxvd1VzZXJJbnN0YWxs
ZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6IEFsbG93VXNlckluc3Rh
bGxlZEZvbnRzOjpObyk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogCi0gICAgc3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1
bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBzdHlsZS0+Zm9udENhc2NhZGUoKS51cGRhdGUo
ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAKICAgICByZXR1cm4gc3R5bGU7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCmluZGV4IGQ4NDEwZjBkNTIxZDFiYWJiOTMzOWM1YTM2
MzQ0NGVjMWQ1MWNjZDAuLjFkMzcyY2QwNWI5OTlmZDE2M2NiZmI3Mzk3ZmRkOGY3YmM0YTU1NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIFJlc29s
dmVyJiBTY29wZTo6cmVzb2x2ZXIoKQogICAgICAgICBtX3Jlc29sdmVyID0gbWFrZVVuaXF1ZTxS
ZXNvbHZlcj4obV9kb2N1bWVudCk7CiAKICAgICAgICAgaWYgKCFtX3NoYWRvd1Jvb3QpIHsKLSAg
ICAgICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkuYnVpbGRTdGFydGVkKCk7CisgICAg
ICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLT5idWlsZFN0YXJ0ZWQoKTsKICAgICAg
ICAgICAgIG1fcmVzb2x2ZXItPnJ1bGVTZXRzKCkuaW5pdGlhbGl6ZVVzZXJTdHlsZSgpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9yZXNvbHZlci0+cnVsZVNldHMoKS5zZXRJc0Zv
clNoYWRvd1Njb3BlKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAgUmVzb2x2ZXImIFNjb3BlOjpyZXNv
bHZlcigpCiAgICAgICAgIG1fcmVzb2x2ZXItPmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKG1fYWN0
aXZlU3R5bGVTaGVldHMpOwogCiAgICAgICAgIGlmICghbV9zaGFkb3dSb290KQotICAgICAgICAg
ICAgbV9kb2N1bWVudC5mb250U2VsZWN0b3IoKS5idWlsZENvbXBsZXRlZCgpOworICAgICAgICAg
ICAgbV9kb2N1bWVudC5mb250U2VsZWN0b3IoKS0+YnVpbGRDb21wbGV0ZWQoKTsKICAgICB9CiAg
ICAgQVNTRVJUKCFtX3NoYWRvd1Jvb3QgfHwgJm1fZG9jdW1lbnQgPT0gJm1fc2hhZG93Um9vdC0+
ZG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCZtX3Jlc29sdmVyLT5kb2N1bWVudCgpID09ICZtX2Rv
Y3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAK
aW5kZXggYmViNjdiZDU0YWYzYjU5YTlkMDlhNDIyMzIyZWFjYzc1ZGNlMGYwMy4uNzExNzg2OWZj
NTA2OTk2ZmVhZDlkY2QyZDRhNzRmODFjZTkyMTZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAKKyNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNs
dWRlICJDcnlwdG8uaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJJREJDb25u
ZWN0aW9uUHJveHkuaCIKICNpbmNsdWRlICJJbWFnZUJpdG1hcE9wdGlvbnMuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTkwLDYgKzkyLDggQEAgV29ya2VyR2xv
YmFsU2NvcGU6On5Xb3JrZXJHbG9iYWxTY29wZSgpCiAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUg
ZnJvbSB0aGUgY29udGV4dHMgbWFwIHZlcnkgZWFybHkgaW4gdGhlIGRlc3RydWN0b3Igc28gdGhh
dCBjYWxsaW5nIHBvc3RUYXNrKCkgb24gdGhpcyBXb3JrZXJHbG9iYWxTY29wZSBmcm9tIGFub3Ro
ZXIgdGhyZWFkIGlzIHNhZmUuCiAgICAgcmVtb3ZlRnJvbUNvbnRleHRzTWFwKCk7CiAKKyAgICBp
ZiAobV9jc3NGb250U2VsZWN0b3IpCisgICAgICAgIG1fY3NzRm9udFNlbGVjdG9yLT5zdG9wTG9h
ZGluZ0FuZENsZWFyRm9udHMoKTsKICAgICBtX3BlcmZvcm1hbmNlID0gbnVsbHB0cjsKICAgICBt
X2NyeXB0byA9IG51bGxwdHI7CiAKQEAgLTQ3OCw2ICs0ODIsMjAgQEAgQ1NTVmFsdWVQb29sJiBX
b3JrZXJHbG9iYWxTY29wZTo6Y3NzVmFsdWVQb29sKCkKICAgICByZXR1cm4gKm1fY3NzVmFsdWVQ
b29sOwogfQogCitDU1NGb250U2VsZWN0b3IqIFdvcmtlckdsb2JhbFNjb3BlOjpmb250U2VsZWN0
b3IoKQoreworICAgIGlmICghbV9jc3NGb250U2VsZWN0b3IpCisgICAgICAgIG1fY3NzRm9udFNl
bGVjdG9yID0gQ1NTRm9udFNlbGVjdG9yOjpjcmVhdGUoKnRoaXMpOworICAgIHJldHVybiBtX2Nz
c0ZvbnRTZWxlY3Rvci5nZXQoKTsKK30KKworRm9udENhY2hlJiBXb3JrZXJHbG9iYWxTY29wZTo6
Zm9udENhY2hlKCkKK3sKKyAgICBpZiAoIW1fZm9udENhY2hlKQorICAgICAgICBtX2ZvbnRDYWNo
ZSA9IGFkb3B0UmVmKCpuZXcgRm9udENhY2hlKTsKKyAgICByZXR1cm4gKm1fZm9udENhY2hlOwor
fQorCiBSZWZlcnJlclBvbGljeSBXb3JrZXJHbG9iYWxTY29wZTo6cmVmZXJyZXJQb2xpY3koKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmVycmVyUG9saWN5OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IDExMDI1OGRkZmM4ZWIxZDQ1YjMwYzAyZGYy
YzlhZDdjOGM0YmJkNDQuLjQ3ZTMyMmEwNzdhMWE3NzIwODg2MWU5MWMxMWQzNzM0MzA0MjExNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTQyLDYg
KzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NGb250U2VsZWN0b3I7
CiBjbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnM7CiBjbGFzcyBDcnlwdG87CkBAIC0xMTYsNiArMTE3LDggQEAgcHVibGljOgogICAg
IHZvaWQgY3JlYXRlSW1hZ2VCaXRtYXAoSW1hZ2VCaXRtYXA6OlNvdXJjZSYmLCBpbnQgc3gsIGlu
dCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBJbWFnZUJpdG1hcDo6
UHJvbWlzZSYmKTsKIAogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CisgICAgQ1NT
Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBmaW5hbDsKKyAgICBGb250Q2FjaGUmIGZvbnRD
YWNoZSgpIGZpbmFsOwogCiAgICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQb2xpY3koKSBjb25z
dCBmaW5hbDsKIApAQCAtMTgwLDYgKzE4Myw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdvcmtl
clNXQ2xpZW50Q29ubmVjdGlvbj4gbV9zd0NsaWVudENvbm5lY3Rpb247CiAjZW5kaWYKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q1NTVmFsdWVQb29sPiBtX2Nzc1ZhbHVlUG9vbDsKKyAgICBSZWZQdHI8
Q1NTRm9udFNlbGVjdG9yPiBtX2Nzc0ZvbnRTZWxlY3RvcjsKKyAgICBSZWZQdHI8Rm9udENhY2hl
PiBtX2ZvbnRDYWNoZTsKICAgICBSZWZlcnJlclBvbGljeSBtX3JlZmVycmVyUG9saWN5OwogICAg
IFNldHRpbmdzOjpWYWx1ZXMgbV9zZXR0aW5nc1ZhbHVlczsKICAgICBXb3JrZXJUeXBlIG1fd29y
a2VyVHlwZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCBiNDQ2MWY5MDFiOTY0YjI3ZTliNDM1YmEzMzllM2Y3YmJhM2ZmMjg4
Li4yMGZmYzA5YjdhYjRmZjUxNmRjMTgzN2EzMmVlYmEwMmIxYzllMzA2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMjEtMDMtMzEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgorCisg
ICAgICAgIEltcGxlbWVudCB0ZXh0IHJlbmRlcmluZyBvbiBPZmZzY3JlZW5DYW52YXMgaW4gYSBX
b3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
Mjc5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
anVzdCBleHBlY3RhdGlvbnMgZm9yIG1hbnVhbCBPZmZzY3JlZW5DYW52YXMgd29ya2VyIHRleHQg
dGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAy
MS0wNC0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHNv
bWUgbWlzc2luZyBleGNlcHRpb24gY2hlY2tzIGluIEhUTUxNZWRpYUVsZW1lbnQgbWV0aG9kcy4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDY0Mzc1YWY4NjhjY2FiMjliNGJjNTdj
OTYwNDIzNzQwNWRjNDc5M2EuLjM1ODRlNjQ3ZGRmODliYTc3MTk2OTRhMmZlMWI1ZDYyODU0MTA1
NzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIx
LTAzLTMxICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgdGV4dCByZW5kZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29ya2VyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3OTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGp1c3QgdGVzdCBleHBl
Y3RhdGlvbnMuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zm
c2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmJhc2ljLndvcmtlci1leHBlY3RlZC50eHQ6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0
LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtlci1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQu
Zm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJz
ZS50aW55Lndvcmtlci1leHBlY3RlZC50eHQ6CisKIDIwMjEtMDMtMzEgIEFudG9pbmUgUXVpbnQg
IDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gSW1wb3J0IFdQVCB0
ZXN0IG1vZGlmaWVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0
L3B1bGwvMjgzMTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNl
LmJhc2ljLndvcmtlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5w
YXJzZS5iYXNpYy53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDA4NGVmZTQ2ZWRmOWE2ZmU5ZWE4
ODgzNDJhYWFlNjM2YTMzZmQ0MzIuLmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJl
MjBkYzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmJhc2lj
Lndvcmtlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFy
c2UuYmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJTCAyZCBh
c3NlcnRfZXF1YWxzOiBjdHguZm9udCA9PT0gJzIwcHggc2VyaWYnIChnb3QgMTBweCBzYW5zLXNl
cmlmW3N0cmluZ10sIGV4cGVjdGVkIDIwcHggc2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIjIwcHgg
c2VyaWYiIGJ1dCBnb3QgIjEwcHggc2Fucy1zZXJpZiIKK1BBU1MgMmQKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9v
ZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29tcGxleC53b3JrZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nh
bnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29tcGxleC53b3JrZXItZXhw
ZWN0ZWQudHh0CmluZGV4IDFmNGYwZWY5OGI5NzJkYzM2YmUwNWI3M2UzZjMzMzY5ODE5NGVjZGIu
LmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJlMjBkYzIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zm
c2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmNvbXBsZXgud29ya2VyLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
Y2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtlci1l
eHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgMmQgYXNzZXJ0X2VxdWFsczogY3R4
LmZvbnQgPT09ICdpdGFsaWMgc21hbGwtY2FwcyAxMnB4ICJVbmtub3duIEZvbnQiLCBzYW5zLXNl
cmlmJyAoZ290IDEwcHggc2Fucy1zZXJpZltzdHJpbmddLCBleHBlY3RlZCBpdGFsaWMgc21hbGwt
Y2FwcyAxMnB4ICJVbmtub3duIEZvbnQiLCBzYW5zLXNlcmlmW3N0cmluZ10pIGV4cGVjdGVkICJp
dGFsaWMgc21hbGwtY2FwcyAxMnB4IFwiVW5rbm93biBGb250XCIsIHNhbnMtc2VyaWYiIGJ1dCBn
b3QgIjEwcHggc2Fucy1zZXJpZiIKK1BBU1MgMmQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4
dC8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3Jl
ZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXItZXhwZWN0ZWQudHh0Cmlu
ZGV4IDA4NGVmZTQ2ZWRmOWE2ZmU5ZWE4ODgzNDJhYWFlNjM2YTMzZmQ0MzIuLmExN2VlZjUwOTJi
N2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJlMjBkYzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQv
MmQudGV4dC5mb250LnBhcnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNj
cmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50eHQK
QEAgLTEsMyArMSwzIEBACiAKLUZBSUwgMmQgYXNzZXJ0X2VxdWFsczogY3R4LmZvbnQgPT09ICcy
MHB4IHNlcmlmJyAoZ290IDEwcHggc2Fucy1zZXJpZltzdHJpbmddLCBleHBlY3RlZCAyMHB4IHNl
cmlmW3N0cmluZ10pIGV4cGVjdGVkICIyMHB4IHNlcmlmIiBidXQgZ290ICIxMHB4IHNhbnMtc2Vy
aWYiCitQQVNTIDJkCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBh
cnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250
LnBhcnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dAppbmRleCAzZjJlM2NiODViZjI4YjFmMmUx
Y2RmZTM1OTY2NGZiYzYxOWFjYzYxLi5hMTdlZWY1MDkyYjdkMDM4MjdhY2Q2NWI3OTc4ZWU0Yjli
ZTIwZGMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS50aW55
Lndvcmtlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFy
c2UudGlueS53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMyBAQAogCi1GQUlMIDJkIGFz
c2VydF9lcXVhbHM6IGN0eC5mb250ID09PSAnMXB4IHNhbnMtc2VyaWYnIChnb3QgMTBweCBzYW5z
LXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIDFweCBzYW5zLXNlcmlmW3N0cmluZ10pIGV4cGVjdGVk
ICIxcHggc2Fucy1zZXJpZiIgYnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgorUEFTUyAyZAogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggN2MxMTdkYmYx
NTVmNjY4MTJhYzk1Mzk0MjA4ZWQ1ZDY2Yzg4MTFiMC4uNTlhZmMzNzM3NDgwODdmNzQ1ZTA2MTFj
MjAxN2M4ODExYTZmZmY5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtNjU0LDcgKzY1NCw2IEBAIHdlYmtpdC5vcmcvYi8yMDMxNDYgaHR0cC93cHQv
b2Zmc2NyZWVuLWNhbnZhcyBbIFBhc3MgXQogd2Via2l0Lm9yZy9iLzIwMzE0NiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbiBbIFBhc3MgXQogd2Vi
a2l0Lm9yZy9iLzIwNjA1NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2Fu
dmFzL29mZnNjcmVlbi9kcmF3aW5nLWltYWdlcy10by10aGUtY2FudmFzLzJkLmRyYXdJbWFnZS5z
dmcud29ya2VyLmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8yMDYwNTUgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vZHJhd2luZy1pbWFnZXMt
dG8tdGhlLWNhbnZhcy8yZC5kcmF3SW1hZ2UuemVyb3NvdXJjZS5pbWFnZS53b3JrZXIuaHRtbCBb
IFNraXAgXQotd2Via2l0Lm9yZy9iLzIyMzY3MSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi9tYW51YWwvZHJhdy1nZW5lcmljLWZhbWlseS8yZC50
ZXh0LmRyYXcuZ2VuZXJpYy5mYW1pbHkudy5odG1sIFsgRmFpbHVyZSBdCiAKICMgQ29uc29sZSBs
b2cgbGluZXMgbWF5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBvcmRlciBzbyB3ZSBzaWxlbmNlIHRo
ZW0uCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVl
bi9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8uYmxvYi53Lmh0bWwg
WyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424942</attachid>
            <date>2021-04-01 12:49:48 -0700</date>
            <delta_ts>2021-04-02 04:34:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202793-20210401204946.patch</filename>
            <type>text/plain</type>
            <size>50258</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyYWQwYTg2ODdmZjZk
YmZjODViNWE2MTlkMjIzNWNlOTQ1ODgwMC4uM2UyZjczYjMzODc4MWJlNmNmZmFjNGI3ODhhMzFi
NjYwY2E3ZDA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGV4dCByZW5k
ZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBDU1NGb250U2VsZWN0b3IgYW5kIEZv
bnRDYWNoZSB0byBXb3JrZXJHbG9iYWxTY29wZSBhbmQgdmlhCisgICAgICAgIGludGVyZmFjZSBj
aGFuZ2VzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYW5kIEZvbnRTZWxlY3RvciwgdXNlIHRo
ZW0KKyAgICAgICAgYXMgYXBwcm9wcmlhdGUgYWZ0ZXIgZW5hYmxpbmcgdGV4dCBmdW5jdGlvbnMg
b24gV29ya2VyIHRocmVhZHMgd2l0aAorICAgICAgICBPZmZzY3JlZW5DYW52YXMuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCByZWJhc2VsaW5lZCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bV92ZXJzaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdCk6CisgICAgICAg
ICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUluZGV4KToKKyAgICAgICAgKiBjc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmZvbnRDYWNoZSk6CisgICAgICAgICog
ZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OmNzc0ZvbnRTZWxlY3Rvcik6CisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5EcmF3VGV4dCk6CisgICAgICAgICogaHRtbC9j
YW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhQ2FjaGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRh
Q2FjaGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YUNhY2hlS2V5
VHJhaXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlU
cmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0
YUNhY2hlS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnNpbmdsZXRvbik6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjp2ZXJ0aWNhbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
Ojpmb250Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmludmFsaWRhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpp
c0N1cnJlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OnVwZGF0ZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpGb250Q2FzY2FkZUZvbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OnJlYWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSBjb25zdCk6Cisg
ICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkpOgorICAgICAgICAqIHN0
eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OnVzZUZpeGVkRGVmYXVsdFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OnJlc29sdmVG
b3JGb250UmF3KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3Lmg6Cisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNjb3BlKToKKyAgICAgICAgKFdlYkNv
cmU6Oldvcmtlckdsb2JhbFNjb3BlOjpjc3NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyR2xvYmFsU2NvcGU6OmZvbnRDYWNoZSk6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXJHbG9iYWxTY29wZS5oOgorCiAyMDIxLTA0LTAxICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBNYWtlIEZvbnRDYWNoZSBjb25zdHJ1Y3RhYmxlIGFuZCBzYWZlIHRv
IHVzZSBvZmYgdGhlIG1haW4gdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCmluZGV4IDM4ZWZiNjY2OGQwODg4ZTAxMWJjMGVmMGFlODM4YjQ1MDU1YTNhMWUuLjFhYWYw
ZTU2Mzg2ZjBkNzhhMjY4NjYyOTE5OGNmM2YwMGMwZWZlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuY3BwCkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBmb250
U2VsZWN0b3JJZDsKIENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNvbnRleHQpCiAg
ICAgLCBtX2NvbnRleHQobWFrZVdlYWtQdHIoY29udGV4dCkpCisgICAgLCBtX2ZvbnRDYWNoZSht
YWtlUmVmUHRyKGNvbnRleHQuZm9udENhY2hlKCkpKQogICAgICwgbV9jc3NGb250RmFjZVNldChD
U1NGb250RmFjZVNldDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9mb250TW9kaWZpZWRPYnNlcnZl
cihbdGhpc10geyBmb250TW9kaWZpZWQoKTsgfSkKICAgICAsIG1fZm9udExvYWRpbmdUaW1lcigq
dGhpcywgJkNTU0ZvbnRTZWxlY3Rvcjo6Zm9udExvYWRpbmdUaW1lckZpcmVkKQpAQCAtODIsNyAr
ODMsNyBAQCBDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KQogICAgICAgICAgICAgbV9mb250RmFtaWx5TmFtZXMudW5jaGVja2Vk
QXBwZW5kKGZhbWlseU5hbWUpOwogICAgIH0KIAotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
YWRkQ2xpZW50KCp0aGlzKTsKKyAgICBtX2ZvbnRDYWNoZS0+YWRkQ2xpZW50KCp0aGlzKTsKICAg
ICBtX2Nzc0ZvbnRGYWNlU2V0LT5hZGRGb250TW9kaWZpZWRPYnNlcnZlcihtX2ZvbnRNb2RpZmll
ZE9ic2VydmVyKTsKICAgICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3IgJXAgY3RvciIsIHRo
aXMpOwogCkBAIC05NCw3ICs5NSw3IEBAIENTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3Rv
cigpCiAgICAgTE9HKEZvbnRzLCAiQ1NTRm9udFNlbGVjdG9yICVwIGR0b3IiLCB0aGlzKTsKIAog
ICAgIHN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpOwotICAgIEZvbnRDYWNoZTo6c2luZ2xldG9u
KCkucmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBtX2ZvbnRDYWNoZS0+cmVtb3ZlQ2xpZW50KCp0
aGlzKTsKIH0KIAogRm9udEZhY2VTZXQqIENTU0ZvbnRTZWxlY3Rvcjo6Zm9udEZhY2VTZXRJZkV4
aXN0cygpCkBAIC0zMzAsNyArMzMxLDcgQEAgRm9udFJhbmdlcyBDU1NGb250U2VsZWN0b3I6OmZv
bnRSYW5nZXNGb3JGYW1pbHkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3IKIAogICAg
IGlmICghcmVzb2x2ZUdlbmVyaWNGYW1pbHlGaXJzdCkKICAgICAgICAgcmVzb2x2ZUFuZEFzc2ln
bkdlbmVyaWNGYW1pbHkoKTsKLSAgICBhdXRvIGZvbnQgPSBGb250Q2FjaGU6OnNpbmdsZXRvbigp
LmZvbnRGb3JGYW1pbHkoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1cCwgZmFtaWx5Rm9yTG9va3Vw
KTsKKyAgICBhdXRvIGZvbnQgPSBtX2ZvbnRDYWNoZS0+Zm9udEZvckZhbWlseSgqZm9udERlc2Ny
aXB0aW9uRm9yTG9va3VwLCBmYW1pbHlGb3JMb29rdXApOwogICAgIGlmIChkb2N1bWVudCAmJiBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpCiAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dGb250
TG9hZCgqZG9jdW1lbnQsIGZhbWlseUZvckxvb2t1cC5zdHJpbmcoKSwgISFmb250KTsKICAgICBy
ZXR1cm4gRm9udFJhbmdlcyB7IFdURk1vdmUoZm9udCkgfTsKQEAgLTQ0Miw3ICs0NDMsNyBAQCBS
ZWZQdHI8Rm9udD4gQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdAogICAgIGlmICghbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVl
cygpLmZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBocykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgYXV0byYgcGljdG9ncmFwaEZvbnRGYW1pbHkgPSBtX2NvbnRleHQtPnNldHRpbmdz
VmFsdWVzKCkuZm9udEdlbmVyaWNGYW1pbGllcy5waWN0b2dyYXBoRm9udEZhbWlseSgpOwotICAg
IGF1dG8gZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShmb250RGVz
Y3JpcHRpb24sIHBpY3RvZ3JhcGhGb250RmFtaWx5KTsKKyAgICBhdXRvIGZvbnQgPSBtX2ZvbnRD
YWNoZS0+Zm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHBpY3RvZ3JhcGhGb250RmFtaWx5
KTsKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpICYmIGlzPERvY3VtZW50PihtX2NvbnRleHQuZ2V0KCkpKQog
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoZG93bmNh
c3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpLCBwaWN0b2dyYXBoRm9udEZhbWlseSwgISFmb250KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCmluZGV4IGE5ZmEyOGZmN2E1NDFmNDg4
NjhhNWM1NTAwYjhkOWQzYzRhZmEwNDIuLjkzMTI2MzE0ODg4MjZlZDZkNzM1NDFhNTM5NGYzNzI3
MWJjOWYyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKQEAgLTcwLDYgKzcw
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZh
Y2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUpOwogCisg
ICAgRm9udENhY2hlJiBmb250Q2FjaGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAqbV9mb250Q2Fj
aGU7IH0KICAgICB2b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgZmluYWw7CiAKICAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKQEAgLTEyMyw2ICsxMjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxQZW5kaW5nRm9udEZhY2VSdWxlPiBtX3N0YWdpbmdBcmVhOwogCiAgICAgV2Vha1B0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEZvbnRDYWNoZT4gbV9m
b250Q2FjaGU7CiAgICAgUmVmUHRyPEZvbnRGYWNlU2V0PiBtX2ZvbnRGYWNlU2V0OwogICAgIFJl
ZjxDU1NGb250RmFjZVNldD4gbV9jc3NGb250RmFjZVNldDsKICAgICBIYXNoU2V0PEZvbnRTZWxl
Y3RvckNsaWVudCo+IG1fY2xpZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCBmY2Q0YjMwYmVhZGU1NzFm
ZWIzODhmMTRhMjU4MGIxMzVmMTdkNTMyLi5kYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEy
ZGQxZDVkMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFp
ci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTdHls
ZUNvbG9yLmgiCisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTMwNjEsNyArMzA2Miw3IEBAIE9wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29y
a2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9t
VmFsdWVJRChDU1NWYWx1ZUlEIGlkZW50KQorY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRG
YW1pbHkoQ1NTVmFsdWVJRCBpZGVudCkKIHsKICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgY2Fz
ZSBDU1NWYWx1ZVNlcmlmOgpAQCAtMzA4Myw2ICszMDg0LDI5IEBAIGNvbnN0IEF0b21TdHJpbmcm
IGdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoQ1NTVmFsdWVJRCBpZGVudCkKICAgICB9CiB9
CiAKK1dlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleCBnZW5lcmljRm9udEZh
bWlseUluZGV4KENTU1ZhbHVlSUQgaWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkgeworICAg
IGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1l
czo6RmFtaWx5TmFtZXNJbmRleDo6U2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVNhbnNT
ZXJpZjoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJ
bmRleDo6U2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgorICAgICAg
ICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpDdXJzaXZl
RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gV2ViS2l0
Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFtaWx5OworICAgIGNh
c2UgQ1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFtaWx5TmFt
ZXM6OkZhbWlseU5hbWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVl
V2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6
RmFtaWx5TmFtZXNJbmRleDo6UGljdG9ncmFwaEZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlU3lz
dGVtVWk6CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVz
SW5kZXg6OlN5c3RlbVVpRmFtaWx5OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlO
YW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIENT
U1Byb3BlcnR5UGFyc2VySGVscGVycwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaApp
bmRleCA5MTNjMTA4ZjNhYzk0M2Y0YjBhNTQ5MmI0ZWM1ZDE5YWUwZGE2MzRlLi44MmY0NDJmYjcw
MmMzNjAxOGZkNmEwNWYzZDNmYTQ4NmE2OTY5MDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTQyLDYgKzQyLDEw
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlO
YW1lcyB7CitlbnVtIGNsYXNzIEZhbWlseU5hbWVzSW5kZXg7Cit9CisKIC8vIFdoZW4gdGhlc2Ug
ZnVuY3Rpb25zIGFyZSBzdWNjZXNzZnVsLCB0aGV5IHdpbGwgY29uc3VtZSBhbGwgdGhlIHJlbGV2
YW50CiAvLyB0b2tlbnMgZnJvbSB0aGUgcmFuZ2UgYW5kIGFsc28gY29uc3VtZSBhbnkgd2hpdGVz
cGFjZSB3aGljaCBmb2xsb3dzLiBXaGVuCiAvLyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGRvZXNu
J3QgbWF0Y2ggdGhlIHR5cGUgd2UncmUgbG9va2luZyBmb3IsIHRoZSByYW5nZQpAQCAtMTY5LDcg
KzE3Myw4IEBAIE9wdGlvbmFsPFZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1p
bHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1
bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxMaW5lSGVpZ2h0UmF3
PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9k
ZSk7CiBPcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOwotY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRG
YW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEKTsKK2NvbnN0IEF0b21TdHJpbmcmIGdlbmVyaWNG
b250RmFtaWx5KENTU1ZhbHVlSUQpOworV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1l
c0luZGV4IGdlbmVyaWNGb250RmFtaWx5SW5kZXgoQ1NTVmFsdWVJRCk7CiAKIGJvb2wgaXNGb250
U3R5bGVBbmdsZUluUmFuZ2UoZG91YmxlIGFuZ2xlSW5EZWdyZWVzKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaAppbmRleCBjNGZlMjI1ODkwYWI0OGZkNGFlMzEwOWQ5OGU0MzZlMWMzZWM0OGJkLi4xZjlh
ODNiZmQyNjRhNGUxNDBlM2MxZjEzOGJmYWM0ZjI1Nzk0MjhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aApAQCAtMTY0NSw2ICsxNjQ1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVJlbmRlclRy
ZWUoKTsKICAgICB2b2lkIGRldGFjaFBhcnNlcigpOwogCisgICAgLy8gU2NyaXB0RXhlY3V0aW9u
Q29udGV4dAorICAgIENTU0ZvbnRTZWxlY3RvciogY3NzRm9udFNlbGVjdG9yKCkgZmluYWwgeyBy
ZXR1cm4gbV9mb250U2VsZWN0b3IucHRyKCk7IH0KKwogICAgIC8vIEZvbnRTZWxlY3RvckNsaWVu
dAogICAgIHZvaWQgZm9udHNOZWVkVXBkYXRlKEZvbnRTZWxlY3RvciYpIGZpbmFsOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggZDI3MTdi
Zjc4MzFmNGZiNWQ3OGYwNTBjOTRiNGFhNjcxMmNiNjlkOC4uYzc3MzgzMWI4OGMyYjAyYjA1YmMy
ZmZiNmYwNTNlOGRhZjFhNWY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2Nv
cGUuaCIKQEAgLTIyNiw2ICsyMjcsMTEgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpk
aWRMb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFVSTCYpCiB7CiB9CiAKK0ZvbnRDYWNo
ZSYgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Zm9udENhY2hlKCkKK3sKKyAgICByZXR1cm4gRm9u
dENhY2hlOjpzaW5nbGV0b24oKTsKK30KKwogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpm
b3JFYWNoQWN0aXZlRE9NT2JqZWN0KGNvbnN0IEZ1bmN0aW9uPFNob3VsZENvbnRpbnVlKEFjdGl2
ZURPTU9iamVjdCYpPiYgYXBwbHkpIGNvbnN0CiB7CiAgICAgLy8gSXQgaXMgbm90IGFsbG93ZWQg
dG8gcnVuIGFyYml0cmFyeSBzY3JpcHQgb3IgY29uc3RydWN0IG5ldyBBY3RpdmVET01PYmplY3Rz
IHdoaWxlIHdlIGFyZSBpdGVyYXRpbmcgb3ZlciBBY3RpdmVET01PYmplY3RzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKaW5kZXggMWQzNTI0MWZhZDgyYWQx
YTY0YTkxMmQ0YjA2MjdhNjhmOTFiZDhlMi4uZThiZjBlZmNiNmJiYTEyNjBmMGE5MGI3OTc1NDM4
MTZiMGRmMWJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oCkBAIC02MCwxMCArNjAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVu
dExvb3A7CiBjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFz
cyBEYXRhYmFzZUNvbnRleHQ7CiBjbGFzcyBFdmVudFF1ZXVlOwogY2xhc3MgRXZlbnRMb29wVGFz
a0dyb3VwOwogY2xhc3MgRXZlbnRUYXJnZXQ7CitjbGFzcyBGb250Q2FjaGU7CiBjbGFzcyBNZXNz
YWdlUG9ydDsKIGNsYXNzIFB1YmxpY1VSTE1hbmFnZXI7CiBjbGFzcyBSZWplY3RlZFByb21pc2VU
cmFja2VyOwpAQCAtMTYxLDYgKzE2Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBk
aWRMb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFVSTCYpOwogCisgICAgdmlydHVhbCBG
b250Q2FjaGUmIGZvbnRDYWNoZSgpOworICAgIHZpcnR1YWwgQ1NTRm9udFNlbGVjdG9yKiBjc3NG
b250U2VsZWN0b3IoKSB7IHJldHVybiBudWxscHRyOyB9CisKICAgICB2b2lkIHJlZigpIHsgcmVm
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBkOWNh
NmNiMzVmNjc2ZjAwOGJlMjYxMGI5NGMwN2JmNDg4MDIyZGU1Li5jOThlOTEzMmY2NDQ0NjMxYjNj
ODFlY2IwODU4YjcwOTRhZjUyZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjM2Niw4
ICsyMzY2LDYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5EcmF3VGV4
dChmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGkKICAgICBpZiAoIWZvbnRQcm94eSgp
LT5yZWFsaXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTY3JpcHREaXNhbGxv
d2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7Ci0KICAgICBhdXRv
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGYxNzg4NzRhZmE2Njc5Zjkw
MWE1ZWNlZTMyYmI0ZmY1ZGQzZjI5MzguLmNjODk1N2RmMmE2NDkzZmYyNGEwY2M4NGM4MzJlNWZj
Nzk3NGI5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMzgsOCArMzgs
OCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIgogI2luY2x1
ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAg
LTYzLDggKzYzLDYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNv
bW1pdCgpCiB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
b25zdCBTdHJpbmcmIG5ld0ZvbnQpCiB7CiAgICAgYXV0byYgY29udGV4dCA9ICpjYW52YXNCYXNl
KCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghaXM8RG9jdW1lbnQ+KGNvbnRl
eHQpKQotICAgICAgICByZXR1cm47CiAKICAgICBpZiAobmV3Rm9udC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTkwLDExICs4OCwxMSBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6ZSk7CiAKLSAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsKLSAgICBhdXRvIGZvbnRDYXNj
YWRlID0gU3R5bGU6OnJlc29sdmVGb3JGb250UmF3KCpmb250UmF3LCBXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbiksIGRvY3VtZW50KTsKLQotICAgIGlmIChmb250Q2FzY2FkZSkKLSAgICAgICAgbW9k
aWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKGRvY3VtZW50LmZvbnRTZWxlY3RvcigpLCAq
Zm9udENhc2NhZGUpOworICAgIGF1dG8gZm9udENhc2NhZGUgPSBTdHlsZTo6cmVzb2x2ZUZvckZv
bnRSYXcoKmZvbnRSYXcsIFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSwgY29udGV4dCk7CisgICAg
aWYgKGZvbnRDYXNjYWRlKSB7CisgICAgICAgIEFTU0VSVChjb250ZXh0LmNzc0ZvbnRTZWxlY3Rv
cigpKTsKKyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKCpjb250ZXh0
LmNzc0ZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOworICAgIH0KIH0KIAogQ2FudmFzRGly
ZWN0aW9uIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlyZWN0aW9uKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmlu
ZGV4IGZkZmI2ZGE0NjY0NzQxOWUwNjlhODI0ZWJjYjhkNzBlNjhiNjBjY2QuLjVlMTIzZjViM2Qx
MjUwMDBmNWExNzM4NTBhZTNiMzA5NzFiOTEzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtNDksMjIgKzQ5LDYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLUZvbnRDYWNoZSYgRm9udENhY2hl
OjpzaW5nbGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FjaGU+IGds
b2JhbEZvbnRDYWNoZTsKLSAgICByZXR1cm4gZ2xvYmFsRm9udENhY2hlOwotfQotCi1Gb250Q2Fj
aGU6OkZvbnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQotICAgICwgbV9mb250UGxhdGZvcm1EYXRhQ2Fj
aGUobWFrZVVuaXF1ZVJlZjxGb250UGxhdGZvcm1EYXRhQ2FjaGU+KCkpCi0gICAgLCBtX2ZvbnRE
YXRhQ2FjaGUobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlPigpKQotI2lmIEVOQUJMRShPUEVO
VFlQRV9WRVJUSUNBTCkKLSAgICAsIG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlKG1ha2VVbmlxdWVS
ZWY8Rm9udFZlcnRpY2FsRGF0YUNhY2hlPigpKQotI2VuZGlmCi17Ci19Ci0KIHN0cnVjdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtMTM0LDYgKzExOCw3MyBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
SGFzaFRyYWl0cyA6IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8Rm9udFBsYQogICAgIHN0
YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKIH07CiAKK3N0cnVjdCBG
b250RGF0YUNhY2hlS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBsYXRm
b3JtRGF0YS5oYXNoKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgYikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhID09IGI7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworc3RydWN0IEZvbnREYXRhQ2Fj
aGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGE+IHsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udFBsYXRmb3JtRGF0YT4ga2V5KDAuZiwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgY29uc3Ry
dWN0RGVsZXRlZFZhbHVlKEZvbnRQbGF0Zm9ybURhdGEmIHNsb3QpCisgICAgeworICAgICAgICBu
ZXcgKE5vdE51bGwsICZzbG90KSBGb250UGxhdGZvcm1EYXRhKEhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSk7CisgICAgfQorICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7CisgICAgfQorfTsKKwordXNpbmcgRm9udFBsYXRmb3JtRGF0YUNhY2hl
ID0gSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxGb250
UGxhdGZvcm1EYXRhPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5SGFzaFRyYWl0cz47Cit1c2luZyBGb250RGF0YUNhY2hlID0gSGFzaE1hcDxG
b250UGxhdGZvcm1EYXRhLCBSZWY8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0
YUNhY2hlS2V5VHJhaXRzPjsKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCit1c2luZyBG
b250VmVydGljYWxEYXRhQ2FjaGUgPSBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGEsIFJlZlB0cjxP
cGVuVHlwZVZlcnRpY2FsRGF0YT4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hl
S2V5VHJhaXRzPjsKKyNlbmRpZgorCitzdHJ1Y3QgRm9udERhdGFDYWNoZXMgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEZvbnREYXRhQ2FjaGUgZGF0YTsKKyAg
ICBGb250UGxhdGZvcm1EYXRhQ2FjaGUgcGxhdGZvcm1EYXRhOworI2lmIEVOQUJMRShPUEVOVFlQ
RV9WRVJUSUNBTCkKKyAgICBGb250VmVydGljYWxEYXRhQ2FjaGUgdmVydGljYWxEYXRhOworI2Vu
ZGlmCit9OworCitSZWY8Rm9udENhY2hlPiBGb250Q2FjaGU6OmNyZWF0ZSgpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRm9udENhY2hl
KCkpOworfQorCitGb250Q2FjaGUmIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0
aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPEZvbnRDYWNoZT4gZ2xvYmFsRm9udENhY2hlOwor
ICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7Cit9CisKK0ZvbnRDYWNoZTo6fkZvbnRDYWNoZSgp
ID0gZGVmYXVsdDsKKworRm9udENhY2hlOjpGb250Q2FjaGUoKQorICAgIDogbV9wdXJnZVRpbWVy
KCp0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCkKKyAgICAs
IG1fZm9udERhdGFDYWNoZXMobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlcz4oKSkKK3sKK30K
KwogT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OmFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIGlmIChhdXRvIHBsYXRmb3JtU3BlY2lm
aWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFtaWx5TmFtZSkpCkBA
IC0xOTcsNyArMjQ4LDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KIAogICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0aW9uLCBmb250RmFj
ZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAKLSAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5hZGQoa2V5LCBudWxscHRy
KTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0
ZXJhdG9yOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBpdC0+dmFs
dWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5TmFtZSwg
Zm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwpAQCAtMjA5LDggKzI2MCw4
IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgICAgICAgICAgYXV0byogZm9udFBs
YXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZv
bnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNl
Q2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29rdXAgdGhlIGtleSBp
biB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0b3IgbWF5IGhhdmUK
ICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSByZWN1cnNpdmUgY2Fs
bCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAgICAgICAgaXQgPSBt
X2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgICAgICAgICAgICAgIEFTU0VS
VChpdCAhPSBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZW5kKCkpOworICAgICAgICAgICAgICAg
IGl0ID0gbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhLmZpbmQoa2V5KTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoaXQgIT0gbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhLmVuZCgp
KTsKICAgICAgICAgICAgICAgICBpZiAoZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUp
CiAgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8Rm9udFBsYXRmb3Jt
RGF0YT4oKmZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKTsKICAgICAgICAgICAgIH0K
QEAgLTIyMCw0NyArMjcxLDYgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KICAgICByZXR1cm4g
aXQtPnZhbHVlLmdldCgpOwogfQogCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewotICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGEuaGFzaCgpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGEsIGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0K
LQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDogV1RGOjpHZW5lcmlj
SGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGVtcHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQ
bGF0Zm9ybURhdGE+IGtleSgwLmYsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBrZXk7
Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZv
cm1EYXRhJiBzbG90KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udFBs
YXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0KLX07
Ci0KLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi1SZWZQdHI8T3BlblR5cGVWZXJ0aWNh
bERhdGE+IEZvbnRDYWNoZTo6dmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udFZlcnRpY2FsRGF0YUNh
Y2hlLT5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBsYXRmb3JtRGF0YV0gewotICAgICAgICByZXR1
cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwotICAgIH0pOwot
ICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotI2VuZGlmCi0KICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogY29uc3QgdW5zaWduZWQgY01heEluYWN0aXZlRm9udERhdGEg
PSAxMjA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDEwMDsKQEAg
LTI4OSw3ICsyOTksNyBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9yUGxhdGZvcm1EYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fZm9udExvY2spOwogI2VuZGlmCiAKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
Zm9udERhdGFDYWNoZS0+ZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPmRhdGEuZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsK
ICAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwogICAgIH0pOwogCkBA
IC0zMDUsNyArMzE1LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlm
TmVlZGVkKCkKIAogICAgIExPRyhGb250cywgIkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhSWZOZWVkZWQoKSAtIHVuZGVyTWVtb3J5UHJlc3N1cmUgJWQsIGluYWN0aXZlRm9udERhdGFM
aW1pdCAldSIsIHVuZGVyTWVtb3J5UHJlc3N1cmUsIGluYWN0aXZlRm9udERhdGFMaW1pdCk7CiAK
LSAgICBpZiAobV9mb250RGF0YUNhY2hlLT5zaXplKCkgPCBpbmFjdGl2ZUZvbnREYXRhTGltaXQp
CisgICAgaWYgKG1fZm9udERhdGFDYWNoZXMtPmRhdGEuc2l6ZSgpIDwgaW5hY3RpdmVGb250RGF0
YUxpbWl0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5hY3RpdmVDb3VudCA9IGlu
YWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250
RGF0YUxpbWl0KQpAQCAtMzI4LDcgKzMzOCw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0
aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIAogICAgIHdoaWxlIChwdXJnZUNvdW50
KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250c1RvRGVsZXRlOwotICAgICAg
ICBmb3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUtPnZhbHVlcygpKSB7CisgICAgICAg
IGZvciAoYXV0byYgZm9udCA6IG1fZm9udERhdGFDYWNoZXMtPmRhdGEudmFsdWVzKCkpIHsKICAg
ICAgICAgICAgIExPRyhGb250cywgIiB0cnlpbmcgdG8gcHVyZ2UgZm9udCAlcyAoaGFzIG9uZSBy
ZWYgJWQpIiwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgp
LCBmb250LT5oYXNPbmVSZWYoKSk7CiAgICAgICAgICAgICBpZiAoIWZvbnQtPmhhc09uZVJlZigp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzQwLDI1ICszNTAsMjUgQEAgdm9pZCBG
b250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJnZUNvdW50KQogICAg
ICAgICBpZiAoZm9udHNUb0RlbGV0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgZm9yIChhdXRvJiBmb250IDogZm9udHNUb0RlbGV0ZSkgewotICAgICAgICAgICAgYm9v
bCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hlLT5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkp
OworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5yZW1v
dmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNj
ZXNzLCBzdWNjZXNzKTsKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgICAgICAg
ICBtX2ZvbnRWZXJ0aWNhbERhdGFDYWNoZS0+cmVtb3ZlKGZvbnQtPnBsYXRmb3JtRGF0YSgpKTsK
KyAgICAgICAgICAgIG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2FsRGF0YS5yZW1vdmUoZm9udC0+
cGxhdGZvcm1EYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9OwogCiAgICAgVmVjdG9y
PEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOwotICAgIGtleXNUb1JlbW92
ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS5nZXQoKSkg
ewotICAgICAgICBpZiAoZW50cnkudmFsdWUgJiYgIW1fZm9udERhdGFDYWNoZS0+Y29udGFpbnMo
KmVudHJ5LnZhbHVlKSkKKyAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhKSB7CisgICAgICAgIGlmIChlbnRy
eS52YWx1ZSAmJiAhbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5jb250YWlucygqZW50cnkudmFsdWUp
KQogICAgICAgICAgICAga2V5c1RvUmVtb3ZlLnVuY2hlY2tlZEFwcGVuZChlbnRyeS5rZXkpOwog
ICAgIH0KIAogICAgIExPRyhGb250cywgIiByZW1vdmluZyAlbHUga2V5cyIsIGtleXNUb1JlbW92
ZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1vdmUpCi0gICAgICAg
IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5yZW1vdmUoa2V5KTsKKyAgICAgICAgbV9mb250RGF0
YUNhY2hlcy0+cGxhdGZvcm1EYXRhLnJlbW92ZShrZXkpOwogCiAgICAgcGxhdGZvcm1QdXJnZUlu
YWN0aXZlRm9udERhdGEoKTsKIH0KQEAgLTQwMiw2ICs0MTIsMTYgQEAgdm9pZCBGb250Q2FjaGU6
OmNsZWFyV2lkdGhDYWNoZXMoKQogICAgICAgICB2YWx1ZS0+Zm9udHMuZ2V0KCkud2lkdGhDYWNo
ZSgpLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCitSZWZQdHI8
T3BlblR5cGVWZXJ0aWNhbERhdGE+IEZvbnRDYWNoZTo6dmVydGljYWxEYXRhKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9u
dERhdGFDYWNoZXMtPnZlcnRpY2FsRGF0YS5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBsYXRmb3Jt
RGF0YV0geworICAgICAgICByZXR1cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0
Zm9ybURhdGEpOworICAgIH0pOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OworfQorI2VuZGlmCisKIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1ha2VGb250Q2FzY2Fk
ZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBGb250
U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAgICBGb250Q2FzY2FkZUNhY2hlS2V5IGtleTsK
QEAgLTQ1OCw3ICs0NzgsNyBAQCB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9udENhc2NhZGUoY29u
c3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbAogCiBzaXplX3QgRm9u
dENhY2hlOjpmb250Q291bnQoKQogewotICAgIHJldHVybiBtX2ZvbnREYXRhQ2FjaGUtPnNpemUo
KTsKKyAgICByZXR1cm4gbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5zaXplKCk7CiB9CiAKIHNpemVf
dCBGb250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKQEAgLTQ2Nyw3ICs0ODcsNyBAQCBzaXpl
X3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhtX2ZvbnRMb2NrKTsKICNlbmRpZgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBm
b3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUtPnZhbHVlcygpKSB7CisgICAgZm9yIChh
dXRvJiBmb250IDogbV9mb250RGF0YUNhY2hlcy0+ZGF0YS52YWx1ZXMoKSkgewogICAgICAgICBp
ZiAoZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAgICAgICArK2NvdW50OwogICAgIH0KQEAgLTQ4
OSw5ICs1MDksOSBAQCB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYg
Y2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9mb250UGxh
dGZvcm1EYXRhQ2FjaGUtPmNsZWFyKCk7CisgICAgbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1E
YXRhLmNsZWFyKCk7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIG1fZm9udFZl
cnRpY2FsRGF0YUNhY2hlLT5jbGVhcigpOworICAgIG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2Fs
RGF0YS5jbGVhcigpOwogI2VuZGlmCiAgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCA5
ODdmNWE5MTY2MTM1MTVlYjZmYzFlNzAzOTQ2ZTQyODE1ZTUxYWI4Li45ZTJhY2M4Y2RiYzg5YjVh
OTNjNzY2YjM1ODljMzBhMWEyZjgyOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuaApAQCAtNjgsMTEgKzY4LDcgQEAgY2xhc3MgRm9udFNlbGVjdG9y
OwogY2xhc3MgT3BlblR5cGVWZXJ0aWNhbERhdGE7CiBjbGFzcyBGb250OwogZW51bSBjbGFzcyBJ
c0ZvclBsYXRmb3JtRm9udCA6IHVpbnQ4X3Q7Ci1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2g7
Ci1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleVRyYWl0czsKLXN0cnVjdCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXk7Ci1zdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaDsKLXN0cnVjdCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoVHJhaXRzOworc3RydWN0IEZvbnREYXRhQ2FjaGVz
OwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9MSU5LMikKQEAgLTIx
OCwyMSArMjE0LDE3IEBAIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaFRyYWl0cyA6IFdU
Rjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhCiAKIHVzaW5nIEZvbnRDYXNj
YWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRlQ2FjaGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxG
b250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaCwgRm9udENhc2Nh
ZGVDYWNoZUtleUhhc2hUcmFpdHM+OwogCi10eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHM+IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZTsKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBS
ZWY8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBG
b250RGF0YUNhY2hlOwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLXR5cGVkZWYgSGFz
aE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+LCBGb250
RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9udFZlcnRpY2FsRGF0
YUNhY2hlOwotI2VuZGlmCi0KIGNsYXNzIEZvbnRDYWNoZSA6IHB1YmxpYyBSZWZDb3VudGVkPEZv
bnRDYWNoZT4gewogICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPEZvbnRDYWNo
ZT47CiAKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb250Q2FjaGUpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBGb250Q2FjaGUoKTsKLQorICAgIHN0YXRpYyBSZWY8
Rm9udENhY2hlPiBjcmVhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRm9udENhY2hl
JiBzaW5nbGV0b24oKTsKIAorICAgIEZvbnRDYWNoZSgpOworICAgIH5Gb250Q2FjaGUoKTsKKwog
ICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KICAg
ICBlbnVtIGNsYXNzIFByZWZlckNvbG9yZWRGb250IDogdWludDhfdCB7IE5vLCBZZXMgfTsKICAg
ICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIElzRm9yUGxhdGZvcm1Gb250
LCBQcmVmZXJDb2xvcmVkRm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCk7CkBAIC0zMjIsMTEgKzMxNCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZE1v
Y2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAgICAgSGFzaFNl
dDxGb250U2VsZWN0b3IqPiBtX2NsaWVudHM7Ci0gICAgVW5pcXVlUmVmPEZvbnRQbGF0Zm9ybURh
dGFDYWNoZT4gbV9mb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0gICAgVW5pcXVlUmVmPEZvbnREYXRh
Q2FjaGU+IG1fZm9udERhdGFDYWNoZTsKLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0g
ICAgVW5pcXVlUmVmPEZvbnRWZXJ0aWNhbERhdGFDYWNoZT4gbV9mb250VmVydGljYWxEYXRhQ2Fj
aGU7Ci0jZW5kaWYKKyAgICBVbmlxdWVSZWY8Rm9udERhdGFDYWNoZXM+IG1fZm9udERhdGFDYWNo
ZXM7CiAgICAgRm9udENhc2NhZGVDYWNoZSBtX2ZvbnRDYXNjYWRlQ2FjaGU7CiAKICAgICB1bnNp
Z25lZCBzaG9ydCBtX2dlbmVyYXRpb24geyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNl
MTE2NjU5N2I3OWZkOGY3M2Q3ZC4uNTQ0ZmU2ZTUyMzlmZDI3OTY2MDFmNjE2ZGQyMDllYzUzMDI0
YWQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmlzQ3VycmVudChj
b25zdCBGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcikgY29uc3QKIHsKICAgICBpZiAoIW1fZm9u
dHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9mb250cy0+Z2VuZXJhdGlvbigp
ICE9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQorICAgIGlmIChtX2ZvbnRz
LT5nZW5lcmF0aW9uKCkgIT0gZm9udFNlbGVjdG9yLmZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2ZvbnRzLT5mb250U2VsZWN0b3JWZXJz
aW9uKCkgIT0gZm9udFNlbGVjdG9yLnZlcnNpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTY4LDcgKzE2OCw4IEBAIHZvaWQgRm9udENhc2NhZGU6OnVwZGF0ZUZvbnRzKFJlZjxGb250
Q2FzY2FkZUZvbnRzPiYmIGZvbnRzKSBjb25zdAogCiB2b2lkIEZvbnRDYXNjYWRlOjp1cGRhdGUo
UmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpIGNvbnN0CiB7Ci0gICAgRm9udENh
Y2hlOjpzaW5nbGV0b24oKS51cGRhdGVGb250Q2FzY2FkZSgqdGhpcywgV1RGTW92ZShmb250U2Vs
ZWN0b3IpKTsKKyAgICBhdXRvJiBmb250Q2FjaGUgPSBmb250U2VsZWN0b3IgPyBmb250U2VsZWN0
b3ItPmZvbnRDYWNoZSgpIDogRm9udENhY2hlOjpzaW5nbGV0b24oKTsKKyAgICBmb250Q2FjaGUu
dXBkYXRlRm9udENhc2NhZGUoKnRoaXMsIFdURk1vdmUoZm9udFNlbGVjdG9yKSk7CiB9CiAKIEds
eXBoQnVmZmVyIEZvbnRDYXNjYWRlOjpsYXlvdXRUZXh0KENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Us
IGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKaW5kZXggOWM3YmVl
YmQ4ZDUyN2M3ODEwYTkwMTQ0OTVjMDFmM2NhODg0ZGFlMS4uNWQ3NTY3OGE0NzUzMTRjZGI5M2E4
OWIwYWU2Y2FiYjdmYTI0ZWNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBGb250
Q2FzY2FkZUZvbnRzOjpGb250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9u
dFNlbGVjdG9yKQogICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQogICAgICwgbV9m
b250U2VsZWN0b3IoZm9udFNlbGVjdG9yKQogICAgICwgbV9mb250U2VsZWN0b3JWZXJzaW9uKG1f
Zm9udFNlbGVjdG9yID8gbV9mb250U2VsZWN0b3ItPnZlcnNpb24oKSA6IDApCi0gICAgLCBtX2dl
bmVyYXRpb24oRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCisgICAgLCBtX2dl
bmVyYXRpb24obV9mb250U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+Zm9udENhY2hlKCkuZ2Vu
ZXJhdGlvbigpIDogRm9udENhY2hlOjpzaW5nbGV0b24oKS5nZW5lcmF0aW9uKCkpCiB7CiAjaWYg
QVNTRVJUX0VOQUJMRUQKICAgICBpZiAoIWlzTWFpblRocmVhZCgpKQpAQCAtMTQ0LDcgKzE0NCw3
IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZGVzY3Jp
cHRpb24uZWZmZWN0aXZlRmFtaWx5Q291bnQoKSk7CiAKLSAgICBhdXRvJiBmb250Q2FjaGUgPSBG
b250Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIGF1dG8mIGZvbnRDYWNoZSA9IGZvbnRTZWxlY3Rv
ciA/IGZvbnRTZWxlY3Rvci0+Zm9udENhY2hlKCkgOiBGb250Q2FjaGU6OnNpbmdsZXRvbigpOwog
ICAgIHdoaWxlIChpbmRleCA8IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUNvdW50KCkpIHsK
ICAgICAgICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQXRvbVN0
cmluZyYgZmFtaWx5KSAtPiBGb250UmFuZ2VzIHsKICAgICAgICAgICAgIGlmIChmYW1pbHkuaXNF
bXB0eSgpKQpAQCAtMTgxLDcgKzE4MSw5IEBAIGNvbnN0IEZvbnRSYW5nZXMmIEZvbnRDYXNjYWRl
Rm9udHM6OnJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGNvbnN0IEZvbnRDYXNjYWRlRGVzCiAgICAg
ICAgIHJldHVybiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXNbaW5kZXhdOwogCiAgICAgQVNTRVJU
KGluZGV4ID09IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5zaXplKCkpOwotICAgIEFTU0VSVChG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOworCisg
ICAgYXV0byYgZm9udENhY2hlID0gbV9mb250U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+Zm9u
dENhY2hlKCkgOiBGb250Q2FjaGU6OnNpbmdsZXRvbigpOworICAgIEFTU0VSVChmb250Q2FjaGUu
Z2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKICAgICBtX3JlYWxpemVkRmFsbGJhY2tS
YW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7CiAgICAgYXV0byYgZm9udFJhbmdlcyA9IG1fcmVh
bGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CkBAIC0xOTEsNyArMTkzLDcgQEAgY29uc3QgRm9u
dFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3Qg
Rm9udENhc2NhZGVEZXMKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkgJiYgbV9mb250
U2VsZWN0b3IpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0gbV9mb250U2VsZWN0b3ItPmZvbnRS
YW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJkRmFtaWx5KTsKICAgICAgICAgaWYg
KGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBmb250UmFuZ2VzID0gRm9udFJhbmdl
cyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZGVzY3JpcHRp
b24pKTsKKyAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBGb250UmFuZ2VzKGZvbnRDYWNoZS5sYXN0
UmVzb3J0RmFsbGJhY2tGb250KGRlc2NyaXB0aW9uKSk7CiAgICAgICAgIHJldHVybiBmb250UmFu
Z2VzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
U2VsZWN0b3IuaAppbmRleCBhYzljMTY5NmQxNDM3ZmM1NDgxYWE2Mzk4MGI2MTAwNmQ4NWMyZjUw
Li42NTQ4ZTc2Zjk5NjFmZjdlMWE1ODlmNWNiYjFjMDU3MmViYmFkODhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaApAQCAtMzEsNiArMzEs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZvbnRDYWNoZTsKIGNsYXNzIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb247CiBjbGFzcyBGb250RGVzY3JpcHRpb247CiBjbGFzcyBGb250
U2VsZWN0b3JDbGllbnQ7CkBAIC01NCw2ICs1NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBvcHBvcnR1bmlzdGljYWxseVN0YXJ0Rm9udERhdGFVUkxMb2FkaW5nKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mLCBjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpID0gMDsKIAorICAg
IHZpcnR1YWwgRm9udENhY2hlJiBmb250Q2FjaGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGZvbnRDYWNoZUludmFsaWRhdGVkKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0
ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBhMDg4MmY3YzJjZjhiMjM0MjNiYzcwNDhhMzg5
NmE3Y2NhNGVhMDQ4Li5iNTU2ZGY4NDIzM2FlYjZmOGFmN2Y4ZWVjN2JmNTM3OGEwMjIwODdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM4LDcgKzEzOCw4IEBAIGNvbnN0IEZv
bnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
VUNoYXIqIG9yaWdpbmFsCiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tGb250OwogICAgIH0K
IAotICAgIGlmIChhdXRvIHN5c3RlbUZhbGxiYWNrID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5z
eXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMobV9mb250RGVzY3JpcHRpb24sIGJhc2VGb250LCBJ
c0ZvclBsYXRmb3JtRm9udDo6Tm8sIHByZWZlckNvbG9yZWRGb250ID8gRm9udENhY2hlOjpQcmVm
ZXJDb2xvcmVkRm9udDo6WWVzIDogRm9udENhY2hlOjpQcmVmZXJDb2xvcmVkRm9udDo6Tm8sIGNo
YXJhY3RlcnMsIGxlbmd0aCkpIHsKKyAgICBhdXRvJiBmb250Q2FjaGUgPSBmb250U2VsZWN0b3Io
KSA/IGZvbnRTZWxlY3RvcigpLT5mb250Q2FjaGUoKSA6IEZvbnRDYWNoZTo6c2luZ2xldG9uKCk7
CisgICAgaWYgKGF1dG8gc3lzdGVtRmFsbGJhY2sgPSBmb250Q2FjaGUuc3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKG1fZm9udERlc2NyaXB0aW9uLCBiYXNlRm9udCwgSXNGb3JQbGF0Zm9ybUZv
bnQ6Ok5vLCBwcmVmZXJDb2xvcmVkRm9udCA/IEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6
OlllcyA6IEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6Ok5vLCBjaGFyYWN0ZXJzLCBsZW5n
dGgpKSB7CiAgICAgICAgIGlmIChzeXN0ZW1GYWxsYmFjay0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSAmJiAoIXByZWZlckNvbG9yZWRGb250
IHx8IHN5c3RlbUZhbGxiYWNrLT5wbGF0Zm9ybURhdGEoKS5pc0NvbG9yQml0bWFwRm9udCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBzeXN0ZW1GYWxsYmFjay5nZXQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCBlMzQ3ZmUzZGVhYTk4ZjliNTljNzk4
ZDM2NzAwZDc5ZDNkNjMzMGRlLi45MTQ0ZTM4ZGU2OTM3MDA5NDFlZWFkMDNjMjkxY2QwOGYyYWQ0
Y2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMTA2
MSw3ICsxMDYxLDcgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRG
YW1pbHkoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1YKICAgICAgICAgICAgICAgICBm
YW1pbHkgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZh
bWlseSgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaXNHZW5lcmljRmFt
aWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoY29udGVudFZhbHVlLnZhbHVlSUQo
KSk7CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpn
ZW5lcmljRm9udEZhbWlseShjb250ZW50VmFsdWUudmFsdWVJRCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29s
dmVGb3JGb250UmF3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZv
bnRSYXcuY3BwCmluZGV4IDFmNWNjNDE0OGQ1YTBiZmY4NWVlMDExMjEzNzU1MmYxZjhkMzliZDMu
LjcyYzgyY2ZlZDgzZGQzYmM0OWExMGRiMjQzNjhjZmMwNWE0MmI0YzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCkBAIC0zMiwyOCArMzIs
MzkgQEAKICNpbmNsdWRlICJTdHlsZVJlc29sdmVGb3JGb250UmF3LmgiCiAKICNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9u
cy5oIgorI2luY2x1ZGUgIldlYktpdEZvbnRGYW1pbHlOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIG5hbWVzcGFjZSBTdHlsZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVzOwog
Ci1PcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYg
Zm9udFJhdywgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgRG9jdW1l
bnQmIGRvY3VtZW50KQorc3RhdGljIGJvb2wgdXNlRml4ZWREZWZhdWx0U2l6ZShjb25zdCBGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CisgICAgcmV0dXJuIGZvbnRE
ZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpID09IDEgJiYgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFt
aWx5KCkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5
TmFtZXNJbmRleDo6TW9ub3NwYWNlRmFtaWx5KSk7Cit9CisKK09wdGlvbmFsPEZvbnRDYXNjYWRl
PiByZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb250UmF3JiBmb250UmF3LCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiYgZm9udERlc2NyaXB0aW9uLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0KQoreworICAgIEFTU0VSVChjb250ZXh0LmNzc0ZvbnRTZWxlY3RvcigpKTsKKwogICAgIC8v
IE1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgZmxv
YXQgcGFyZW50U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCk7CiAKICAgICAv
LyBGb250IGZhbWlseSBhcHBsaWVkIGluIHRoZSBzYW1lIHdheSBhcyBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVGb250RmFtaWx5CiAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcg
Zm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHku
Ci0gICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlv
bi51c2VGaXhlZERlZmF1bHRTaXplKCk7CisgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSA9IHVzZUZpeGVkRGVmYXVsdFNpemUoZm9udERlc2NyaXB0aW9uKTsKIAogICAgIFZl
Y3RvcjxBdG9tU3RyaW5nPiBmYW1pbGllczsKICAgICBmYW1pbGllcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGZvbnRSYXcuZmFtaWx5LnNpemUoKSk7CkBAIC02Myw3ICs3NCwxMCBAQCBPcHRpb25h
bDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywg
Rm9udENhc2NhZGVEZXNjcgogICAgICAgICBib29sIGlzR2VuZXJpY0ZhbWlseSA9IGZhbHNlOwog
ICAgICAgICBzd2l0Y2hPbihpdGVtLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKICAgICAgICAg
ICAgIGlzR2VuZXJpY0ZhbWlseSA9IGlkZW50ICE9IENTU1ZhbHVlV2Via2l0Qm9keTsKLSAgICAg
ICAgICAgIGZhbWlseSA9IGlzR2VuZXJpY0ZhbWlseSA/IENTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChpZGVudCkgOiBBdG9tU3RyaW5nKGRvY3Vt
ZW50LnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCkpOworICAgICAgICAgICAgaWYgKGlz
R2VuZXJpY0ZhbWlseSkKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlOYW1lc0RhdGEt
PmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVy
aWNGb250RmFtaWx5SW5kZXgoaWRlbnQpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgZmFtaWx5ID0gQXRvbVN0cmluZyhjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkuZm9udEdl
bmVyaWNGYW1pbGllcy5zdGFuZGFyZEZvbnRGYW1pbHkoKSk7CiAgICAgICAgIH0sIFsmXSAoY29u
c3QgU3RyaW5nJiBmYW1pbHlTdHJpbmcpIHsKICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseVN0
cmluZzsKICAgICAgICAgfSk7CkBAIC03OSwxMSArOTMsMTEgQEAgT3B0aW9uYWw8Rm9udENhc2Nh
ZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRl
RGVzY3IKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0RmFtaWxpZXMoZmFtaWxpZXMpOwogCi0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhl
ZERlZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKKyAgICBp
ZiAodXNlRml4ZWREZWZhdWx0U2l6ZShmb250RGVzY3JpcHRpb24pICE9IG9sZEZhbWlseVVzZWRG
aXhlZERlZmF1bHRTaXplKSB7CiAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVy
ID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIs
ICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAg
YXV0byBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplLCBjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkpOwog
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7Ci0gICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZv
bnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVT
aXplKCksIDEuMCwgTWluaW11bUZvbnRTaXplUnVsZTo6Tm9uZSwgZG9jdW1lbnQuc2V0dGluZ3NW
YWx1ZXMoKSkpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShT
dHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnREZXNjcmlw
dGlvbi5pc0Fic29sdXRlU2l6ZSgpLCAxLjAsIE1pbmltdW1Gb250U2l6ZVJ1bGU6Ok5vbmUsIGNv
bnRleHQuc2V0dGluZ3NWYWx1ZXMoKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNzYsNyAr
MTkwLDcgQEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZv
bnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4
TGFyZ2U6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKGlkZW50KTsKLSAg
ICAgICAgICAgIHJldHVybiBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVz
Y3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBkb2N1bWVudCk7CisgICAgICAgICAgICBy
ZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSwgY29udGV4dC5zZXR0aW5nc1ZhbHVlcygpKTsKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUxhcmdlcjoKICAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4y
ZjsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CkBAIC0xODcsOCArMjAxLDggQEAgT3B0
aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRS
YXcsIEZvbnRDYXNjYWRlRGVzY3IKICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKICAgICAgICAg
cmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CiAgICAgICAgICAgICBhdXRvIGZvbnRD
YXNjYWRlID0gRm9udENhc2NhZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pKTsKLSAgICAgICAgICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVj
dG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0aERvdWJsZShsZW5ndGgudHlwZSwg
bGVuZ3RoLnZhbHVlLCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAmZm9udENhc2NhZGUuZm9udE1ldHJp
Y3MoKSwgJmZvbnRDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCAmZm9udENhc2NhZGUuZm9udERl
c2NyaXB0aW9uKCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSkpOworICAgICAgICAgICAgZm9udENh
c2NhZGUudXBkYXRlKGNvbnRleHQuY3NzRm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZVVuem9vbWVk
Tm9uQ2FsY0xlbmd0aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlLCBDU1NQcm9wZXJ0
eUZvbnRTaXplLCAmZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwgJmZvbnRDYXNjYWRlLmZvbnRE
ZXNjcmlwdGlvbigpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksIGlzPERvY3VtZW50
Pihjb250ZXh0KSA/IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5yZW5kZXJWaWV3KCkgOiBu
dWxscHRyKSk7CiAgICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAv
IDEwMC4wKTsKICAgICAgICAgfSk7CkBAIC0yMDMsNyArMjE3LDcgQEAgT3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlRGVzY3IKICAgICAvLyBpdCwgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbGluZS1oZWlnaHQgaW5m
b3JtYXRpb24gb24gRm9udFJhdy4KIAogICAgIGF1dG8gZm9udENhc2NhZGUgPSBGb250Q2FzY2Fk
ZShXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwotICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9j
dW1lbnQuZm9udFNlbGVjdG9yKCkpOworICAgIGZvbnRDYXNjYWRlLnVwZGF0ZShjb250ZXh0LmNz
c0ZvbnRTZWxlY3RvcigpKTsKICAgICByZXR1cm4gZm9udENhc2NhZGU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaAppbmRleCAxYTg2YTlmMTU4
OGRjZTE3OGE0MzkwZDc0OTM1NDBmZjg5MmFiM2IwLi4yYmNmY2JmYWRkNDUyN2MzYTFiMmViNjhm
MmM4ZWI1ZmU5ZTlmYTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
Rm9yRm9udFJhdy5oCkBAIC0zMiw5ICszMiw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGb250Q2FzY2FkZTsKIGNsYXNzIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb247CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBuYW1lc3BhY2UgQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzIHsKIHN0cnVjdCBGb250UmF3OwpAQCAtNDIsNyArNDIsNyBA
QCBzdHJ1Y3QgRm9udFJhdzsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotT3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Rm9udFJhdyYsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiwgRG9jdW1lbnQmKTsKK09wdGlvbmFs
PEZvbnRDYXNjYWRlPiByZXNvbHZlRm9yRm9udFJhdyhjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OkZvbnRSYXcmLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiYsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmKTsKIAogfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXJHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmNwcAppbmRleCBiZWI2N2JkNTRhZjNiNTlhOWQwOWE0MjIzMjJlYWNjNzVkY2UwZjAz
Li5mMWQ3ZjJmZTQxZWNiOTc0ZGNjOGFlYjQxMTg5MjM5OWUwNGY5YWJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcApAQCAtMjgsMTAgKzI4LDEyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIKIAor
I2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgog
I2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGlj
eS5oIgogI2luY2x1ZGUgIkNyeXB0by5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogI2luY2x1
ZGUgIklEQkNvbm5lY3Rpb25Qcm94eS5oIgogI2luY2x1ZGUgIkltYWdlQml0bWFwT3B0aW9ucy5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgpAQCAtOTAsNiArOTIsOCBA
QCBXb3JrZXJHbG9iYWxTY29wZTo6fldvcmtlckdsb2JhbFNjb3BlKCkKICAgICAvLyBXZSBuZWVk
IHRvIHJlbW92ZSBmcm9tIHRoZSBjb250ZXh0cyBtYXAgdmVyeSBlYXJseSBpbiB0aGUgZGVzdHJ1
Y3RvciBzbyB0aGF0IGNhbGxpbmcgcG9zdFRhc2soKSBvbiB0aGlzIFdvcmtlckdsb2JhbFNjb3Bl
IGZyb20gYW5vdGhlciB0aHJlYWQgaXMgc2FmZS4KICAgICByZW1vdmVGcm9tQ29udGV4dHNNYXAo
KTsKIAorICAgIGlmIChtX2Nzc0ZvbnRTZWxlY3RvcikKKyAgICAgICAgbV9jc3NGb250U2VsZWN0
b3ItPnN0b3BMb2FkaW5nQW5kQ2xlYXJGb250cygpOwogICAgIG1fcGVyZm9ybWFuY2UgPSBudWxs
cHRyOwogICAgIG1fY3J5cHRvID0gbnVsbHB0cjsKIApAQCAtNDc4LDYgKzQ4MiwyMCBAQCBDU1NW
YWx1ZVBvb2wmIFdvcmtlckdsb2JhbFNjb3BlOjpjc3NWYWx1ZVBvb2woKQogICAgIHJldHVybiAq
bV9jc3NWYWx1ZVBvb2w7CiB9CiAKK0NTU0ZvbnRTZWxlY3RvciogV29ya2VyR2xvYmFsU2NvcGU6
OmNzc0ZvbnRTZWxlY3RvcigpCit7CisgICAgaWYgKCFtX2Nzc0ZvbnRTZWxlY3RvcikKKyAgICAg
ICAgbV9jc3NGb250U2VsZWN0b3IgPSBDU1NGb250U2VsZWN0b3I6OmNyZWF0ZSgqdGhpcyk7Cisg
ICAgcmV0dXJuIG1fY3NzRm9udFNlbGVjdG9yLmdldCgpOworfQorCitGb250Q2FjaGUmIFdvcmtl
ckdsb2JhbFNjb3BlOjpmb250Q2FjaGUoKQoreworICAgIGlmICghbV9mb250Q2FjaGUpCisgICAg
ICAgIG1fZm9udENhY2hlID0gRm9udENhY2hlOjpjcmVhdGUoKTsKKyAgICByZXR1cm4gKm1fZm9u
dENhY2hlOworfQorCiBSZWZlcnJlclBvbGljeSBXb3JrZXJHbG9iYWxTY29wZTo6cmVmZXJyZXJQ
b2xpY3koKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmVycmVyUG9saWN5OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCmluZGV4IDExMDI1OGRkZmM4ZWIxZDQ1
YjMwYzAyZGYyYzlhZDdjOGM0YmJkNDQuLmJmM2Y2ODU0YTE4ZTRmN2I4ZTBmYThjNTAxMzZiOWE3
NmNhMDUxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFs
U2NvcGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgK
QEAgLTQyLDYgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NGb250
U2VsZWN0b3I7CiBjbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnM7CiBjbGFzcyBDcnlwdG87CkBAIC0xMTYsNiArMTE3LDggQEAgcHVi
bGljOgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCaXRtYXAoSW1hZ2VCaXRtYXA6OlNvdXJjZSYmLCBp
bnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBJbWFn
ZUJpdG1hcDo6UHJvbWlzZSYmKTsKIAogICAgIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7
CisgICAgQ1NTRm9udFNlbGVjdG9yKiBjc3NGb250U2VsZWN0b3IoKSBmaW5hbDsKKyAgICBGb250
Q2FjaGUmIGZvbnRDYWNoZSgpIGZpbmFsOwogCiAgICAgUmVmZXJyZXJQb2xpY3kgcmVmZXJyZXJQ
b2xpY3koKSBjb25zdCBmaW5hbDsKIApAQCAtMTgwLDYgKzE4Myw4IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPFdvcmtlclNXQ2xpZW50Q29ubmVjdGlvbj4gbV9zd0NsaWVudENvbm5lY3Rpb247CiAj
ZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTVmFsdWVQb29sPiBtX2Nzc1ZhbHVlUG9vbDsK
KyAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2Nzc0ZvbnRTZWxlY3RvcjsKKyAgICBSZWZQ
dHI8Rm9udENhY2hlPiBtX2ZvbnRDYWNoZTsKICAgICBSZWZlcnJlclBvbGljeSBtX3JlZmVycmVy
UG9saWN5OwogICAgIFNldHRpbmdzOjpWYWx1ZXMgbV9zZXR0aW5nc1ZhbHVlczsKICAgICBXb3Jr
ZXJUeXBlIG1fd29ya2VyVHlwZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiNDQ2MWY5MDFiOTY0YjI3ZTliNDM1YmEzMzll
M2Y3YmJhM2ZmMjg4Li4yMGZmYzA5YjdhYjRmZjUxNmRjMTgzN2EzMmVlYmEwMmIxYzllMzA2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDMtMzEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0ZXh0IHJlbmRlcmluZyBvbiBPZmZzY3JlZW5D
YW52YXMgaW4gYSBXb3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjc5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkanVzdCBleHBlY3RhdGlvbnMgZm9yIG1hbnVhbCBPZmZzY3JlZW5DYW52YXMg
d29ya2VyIHRleHQgdGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0
aW9uczoKKwogMjAyMS0wNC0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgRml4IHNvbWUgbWlzc2luZyBleGNlcHRpb24gY2hlY2tzIGluIEhUTUxNZWRpYUVsZW1l
bnQgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCmluZGV4IDY0Mzc1YWY4Njhj
Y2FiMjliNGJjNTdjOTYwNDIzNzQwNWRjNDc5M2EuLjM1ODRlNjQ3ZGRmODliYTc3MTk2OTRhMmZl
MWI1ZDYyODU0MTA1NzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDIxLTAzLTMxICBDaHJpcyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgdGV4dCByZW5kZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29y
a2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGp1
c3QgdGVzdCBleHBlY3RhdGlvbnMuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmJhc2ljLndvcmtlci1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29m
ZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtlci1leHBlY3RlZC50
eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90
ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRl
eHQuZm9udC5wYXJzZS50aW55Lndvcmtlci1leHBlY3RlZC50eHQ6CisKIDIwMjEtMDMtMzEgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
SW1wb3J0IFdQVCB0ZXN0IG1vZGlmaWVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZv
cm0tdGVzdHMvd3B0L3B1bGwvMjgzMTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4
dC5mb250LnBhcnNlLmJhc2ljLndvcmtlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJk
LnRleHQuZm9udC5wYXJzZS5iYXNpYy53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDA4NGVmZTQ2
ZWRmOWE2ZmU5ZWE4ODgzNDJhYWFlNjM2YTMzZmQ0MzIuLmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1
Yjc5NzhlZTRiOWJlMjBkYzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250
LnBhcnNlLmJhc2ljLndvcmtlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50
ZXh0LmZvbnQucGFyc2UuYmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDMgQEAK
IAotRkFJTCAyZCBhc3NlcnRfZXF1YWxzOiBjdHguZm9udCA9PT0gJzIwcHggc2VyaWYnIChnb3Qg
MTBweCBzYW5zLXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIDIwcHggc2VyaWZbc3RyaW5nXSkgZXhw
ZWN0ZWQgIjIwcHggc2VyaWYiIGJ1dCBnb3QgIjEwcHggc2Fucy1zZXJpZiIKK1BBU1MgMmQKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9o
dG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29tcGxleC53b3Jr
ZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29tcGxl
eC53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDFmNGYwZWY5OGI5NzJkYzM2YmUwNWI3M2UzZjMz
MzY5ODE5NGVjZGIuLmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJlMjBkYzIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmNvbXBsZXgud29ya2Vy
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21w
bGV4Lndvcmtlci1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgMmQgYXNzZXJ0
X2VxdWFsczogY3R4LmZvbnQgPT09ICdpdGFsaWMgc21hbGwtY2FwcyAxMnB4ICJVbmtub3duIEZv
bnQiLCBzYW5zLXNlcmlmJyAoZ290IDEwcHggc2Fucy1zZXJpZltzdHJpbmddLCBleHBlY3RlZCBp
dGFsaWMgc21hbGwtY2FwcyAxMnB4ICJVbmtub3duIEZvbnQiLCBzYW5zLXNlcmlmW3N0cmluZ10p
IGV4cGVjdGVkICJpdGFsaWMgc21hbGwtY2FwcyAxMnB4IFwiVW5rbm93biBGb250XCIsIHNhbnMt
c2VyaWYiIGJ1dCBnb3QgIjEwcHggc2Fucy1zZXJpZiIKK1BBU1MgMmQKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9v
ZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nh
bnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXItZXhw
ZWN0ZWQudHh0CmluZGV4IDA4NGVmZTQ2ZWRmOWE2ZmU5ZWE4ODgzNDJhYWFlNjM2YTMzZmQ0MzIu
LmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJlMjBkYzIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zm
c2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
Y2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1l
eHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgMmQgYXNzZXJ0X2VxdWFsczogY3R4
LmZvbnQgPT09ICcyMHB4IHNlcmlmJyAoZ290IDEwcHggc2Fucy1zZXJpZltzdHJpbmddLCBleHBl
Y3RlZCAyMHB4IHNlcmlmW3N0cmluZ10pIGV4cGVjdGVkICIyMHB4IHNlcmlmIiBidXQgZ290ICIx
MHB4IHNhbnMtc2VyaWYiCitQQVNTIDJkCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQu
dGV4dC5mb250LnBhcnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQv
MmQudGV4dC5mb250LnBhcnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dAppbmRleCAzZjJlM2Ni
ODViZjI4YjFmMmUxY2RmZTM1OTY2NGZiYzYxOWFjYzYxLi5hMTdlZWY1MDkyYjdkMDM4MjdhY2Q2
NWI3OTc4ZWU0YjliZTIwZGMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9u
dC5wYXJzZS50aW55Lndvcmtlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50
ZXh0LmZvbnQucGFyc2UudGlueS53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMyBAQAog
Ci1GQUlMIDJkIGFzc2VydF9lcXVhbHM6IGN0eC5mb250ID09PSAnMXB4IHNhbnMtc2VyaWYnIChn
b3QgMTBweCBzYW5zLXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIDFweCBzYW5zLXNlcmlmW3N0cmlu
Z10pIGV4cGVjdGVkICIxcHggc2Fucy1zZXJpZiIgYnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgor
UEFTUyAyZAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggN2MxMTdkYmYxNTVmNjY4MTJhYzk1Mzk0MjA4ZWQ1ZDY2Yzg4MTFiMC4uNTlhZmMzNzM3NDgw
ODdmNzQ1ZTA2MTFjMjAxN2M4ODExYTZmZmY5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNjU0LDcgKzY1NCw2IEBAIHdlYmtpdC5vcmcvYi8yMDMx
NDYgaHR0cC93cHQvb2Zmc2NyZWVuLWNhbnZhcyBbIFBhc3MgXQogd2Via2l0Lm9yZy9iLzIwMzE0
NiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbiBb
IFBhc3MgXQogd2Via2l0Lm9yZy9iLzIwNjA1NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi9kcmF3aW5nLWltYWdlcy10by10aGUtY2FudmFzLzJk
LmRyYXdJbWFnZS5zdmcud29ya2VyLmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8yMDYwNTUg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vZHJh
d2luZy1pbWFnZXMtdG8tdGhlLWNhbnZhcy8yZC5kcmF3SW1hZ2UuemVyb3NvdXJjZS5pbWFnZS53
b3JrZXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIyMzY3MSBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi9tYW51YWwvZHJhdy1nZW5lcmlj
LWZhbWlseS8yZC50ZXh0LmRyYXcuZ2VuZXJpYy5mYW1pbHkudy5odG1sIFsgRmFpbHVyZSBdCiAK
ICMgQ29uc29sZSBsb2cgbGluZXMgbWF5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBvcmRlciBzbyB3
ZSBzaWxlbmNlIHRoZW0uCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2Fu
dmFzL29mZnNjcmVlbi9jb252ZXJ0LXRvLWJsb2Ivb2Zmc2NyZWVuY2FudmFzLmNvbnZlcnQudG8u
YmxvYi53Lmh0bWwgWyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425005</attachid>
            <date>2021-04-02 04:34:52 -0700</date>
            <delta_ts>2021-04-02 05:37:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202793-20210402123450.patch</filename>
            <type>text/plain</type>
            <size>57022</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyYWQwYTg2ODdmZjZk
YmZjODViNWE2MTlkMjIzNWNlOTQ1ODgwMC4uZGZhYmFhZTgzOWQ5ZTRiZTlhNDc2MDBlZGQ3N2Jl
YWRiM2YzM2ZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGV4dCByZW5k
ZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgYSBDU1NGb250U2VsZWN0b3IgYW5kIEZvbnRD
YWNoZSB0byBXb3JrZXJHbG9iYWxTY29wZSBhbmQgdmlhCisgICAgICAgIGludGVyZmFjZSBjaGFu
Z2VzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYW5kIEZvbnRTZWxlY3RvciwgdXNlIHRoZW0K
KyAgICAgICAgYXMgYXBwcm9wcmlhdGUgYWZ0ZXIgZW5hYmxpbmcgdGV4dCBmdW5jdGlvbnMgb24g
V29ya2VyIHRocmVhZHMgd2l0aAorICAgICAgICBPZmZzY3JlZW5DYW52YXMuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCByZWJhc2VsaW5lZCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGNz
cy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bV92ZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdCk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUluZGV4KToKKyAgICAgICAgKiBjc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmZvbnRDYWNoZSk6CisgICAgICAgICogZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmNzc0ZvbnRTZWxlY3Rvcik6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMu
cGw6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5E
cmF3VGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlIYXNoOjpoYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGF0YUNhY2hlS2V5VHJhaXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YUNhY2hlS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250Rm9yUGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjp2ZXJ0aWNhbERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmludmFsaWRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250Q2FjaGVGYWxsYmFja1RvU2lu
Z2xldG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNDdXJyZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp1cGRhdGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFsaXpl
TmV4dEZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZh
bWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJD
dXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRm9udEZhbWlseSk6CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dXNlRml4ZWREZWZhdWx0U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjp+V29ya2Vy
R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OmNzc0Zv
bnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6Zm9udENh
Y2hlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisKIDIwMjEtMDQt
MDEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2UgRm9udENh
Y2hlIGNvbnN0cnVjdGFibGUgYW5kIHNhZmUgdG8gdXNlIG9mZiB0aGUgbWFpbiB0aHJlYWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMzhlZmI2NjY4ZDA4ODhlMDEx
YmMwZWYwYWU4MzhiNDUwNTVhM2ExZS4uYzExNTc4Y2ZjNTA0MTJjYmE2YzU1MzBmOTRiZThhYTM2
MzQ0NzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTUyLDcg
KzUyLDYgQEAKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZh
bWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JT
Y29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTY2LDYgKzY1LDcg
QEAgc3RhdGljIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwogQ1NTRm9udFNlbGVjdG9yOjpDU1NG
b250U2VsZWN0b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICA6IEFjdGl2
ZURPTU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fY29udGV4dChtYWtlV2Vha1B0cihjb250ZXh0
KSkKKyAgICAsIG1fZm9udENhY2hlKG1ha2VSZWYoY29udGV4dC5mb250Q2FjaGUoKSkpCiAgICAg
LCBtX2Nzc0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUodGhpcykpCiAgICAgLCBt
X2ZvbnRNb2RpZmllZE9ic2VydmVyKFt0aGlzXSB7IGZvbnRNb2RpZmllZCgpOyB9KQogICAgICwg
bV9mb250TG9hZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGluZ1Rp
bWVyRmlyZWQpCkBAIC04Miw3ICs4Miw3IEBAIENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVj
dG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgICAgICAgICBtX2ZvbnRG
YW1pbHlOYW1lcy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5TmFtZSk7CiAgICAgfQogCi0gICAgRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5hZGRDbGllbnQoKnRoaXMpOworICAgIG1fZm9udENhY2hlLT5h
ZGRDbGllbnQoKnRoaXMpOwogICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZEZvbnRNb2RpZmllZE9i
c2VydmVyKG1fZm9udE1vZGlmaWVkT2JzZXJ2ZXIpOwogICAgIExPRyhGb250cywgIkNTU0ZvbnRT
ZWxlY3RvciAlcCBjdG9yIiwgdGhpcyk7CiAKQEAgLTk0LDcgKzk0LDcgQEAgQ1NTRm9udFNlbGVj
dG9yOjp+Q1NTRm9udFNlbGVjdG9yKCkKICAgICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3Ig
JXAgZHRvciIsIHRoaXMpOwogCiAgICAgc3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCk7Ci0gICAg
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fZm9udENh
Y2hlLT5yZW1vdmVDbGllbnQoKnRoaXMpOwogfQogCiBGb250RmFjZVNldCogQ1NTRm9udFNlbGVj
dG9yOjpmb250RmFjZVNldElmRXhpc3RzKCkKQEAgLTMwOCw3ICszMDgsNyBAQCBGb250UmFuZ2Vz
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcgogICAgIEFTU0VSVCghbV9idWlsZElzVW5kZXJ3YXkgfHwgbV9jb21wdXRp
bmdSb290U3R5bGVGb250Q291bnQpOwogCiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmly
ZWZveCkgc2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0
Yy4pIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4K
LSAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1lID09IG1fZm9u
dEZhbWlseU5hbWVzW3N0YXRpY19jYXN0PGludD4oRmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRG
YW1pbHkpXTsKKyAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1l
ID09IG1fZm9udEZhbWlseU5hbWVzLmF0KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5
KTsKIAogICAgIEF0b21TdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gZmFtaWx5TmFtZTsKICAgICBP
cHRpb25hbDxGb250RGVzY3JpcHRpb24+IG92ZXJyaWRlRm9udERlc2NyaXB0aW9uOwpAQCAtMzMw
LDcgKzMzMCw3IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAKICAgICBpZiAoIXJlc29sdmVH
ZW5lcmljRmFtaWx5Rmlyc3QpCiAgICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5
KCk7Ci0gICAgYXV0byBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5
KCpmb250RGVzY3JpcHRpb25Gb3JMb29rdXAsIGZhbWlseUZvckxvb2t1cCk7CisgICAgYXV0byBm
b250ID0gbV9mb250Q2FjaGUtPmZvbnRGb3JGYW1pbHkoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1
cCwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoZG9jdW1lbnQgJiYgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQogICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50
LCBmYW1pbHlGb3JMb29rdXAuc3RyaW5nKCksICEhZm9udCk7CiAgICAgcmV0dXJuIEZvbnRSYW5n
ZXMgeyBXVEZNb3ZlKGZvbnQpIH07CkBAIC00NDIsNyArNDQyLDcgQEAgUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHQKICAgICBpZiAoIW1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJh
Y2tQcmVmZXJzUGljdG9ncmFwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8m
IHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRH
ZW5lcmljRmFtaWxpZXMucGljdG9ncmFwaEZvbnRGYW1pbHkoKTsKLSAgICBhdXRvIGZvbnQgPSBG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBwaWN0
b2dyYXBoRm9udEZhbWlseSk7CisgICAgYXV0byBmb250ID0gbV9mb250Q2FjaGUtPmZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7CiAgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSAmJiBpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkKICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKGRvd25jYXN0PERvY3VtZW50Pigq
bV9jb250ZXh0KSwgcGljdG9ncmFwaEZvbnRGYW1pbHksICEhZm9udCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuaAppbmRleCBhOWZhMjhmZjdhNTQxZjQ4ODY4YTVjNTUwMGI4ZDlk
M2M0YWZhMDQyLi5lNGFmZjI2YWFhZmYwOGY4Njg2N2UwNDU1OWZhNDFiNGJiN2U4ZjM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTcw
LDYgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxl
Rm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUp
OwogCisgICAgRm9udENhY2hlJiBmb250Q2FjaGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Zv
bnRDYWNoZS5nZXQoKTsgfQogICAgIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSBmaW5hbDsK
IAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTIzLDYgKzEyNSw3IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFBlbmRpbmdGb250RmFjZVJ1bGU+IG1fc3RhZ2luZ0FyZWE7CiAKICAgICBX
ZWFrUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBSZWY8Rm9udENh
Y2hlPiBtX2ZvbnRDYWNoZTsKICAgICBSZWZQdHI8Rm9udEZhY2VTZXQ+IG1fZm9udEZhY2VTZXQ7
CiAgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2Nzc0ZvbnRGYWNlU2V0OwogICAgIEhhc2hTZXQ8
Rm9udFNlbGVjdG9yQ2xpZW50Kj4gbV9jbGllbnRzOwpAQCAtMTQzLDcgKzE0Niw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2J1aWxkSXNVbmRlcndheSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lz
U3RvcHBlZCB7IGZhbHNlIH07CiAKLSAgICBXVEY6OlZlY3RvcjxBdG9tU3RyaW5nPiBtX2ZvbnRG
YW1pbHlOYW1lczsKKyAgICBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzTGlzdDxB
dG9tU3RyaW5nPiBtX2ZvbnRGYW1pbHlOYW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAppbmRleCBmY2Q0YjMwYmVhZGU1NzFmZWIzODhmMTRhMjU4MGIxMzVmMTdk
NTMyLi5kYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEyZGQxZDVkMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTdHlsZUNvbG9yLmgiCisjaW5jbHVkZSAi
V2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMwNjEsNyArMzA2Miw3
IEBAIE9wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29ya2VyU2FmZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEIGlk
ZW50KQorY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHkoQ1NTVmFsdWVJRCBpZGVu
dCkKIHsKICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgpAQCAt
MzA4Myw2ICszMDg0LDI5IEBAIGNvbnN0IEF0b21TdHJpbmcmIGdlbmVyaWNGb250RmFtaWx5RnJv
bVZhbHVlSUQoQ1NTVmFsdWVJRCBpZGVudCkKICAgICB9CiB9CiAKK1dlYktpdEZvbnRGYW1pbHlO
YW1lczo6RmFtaWx5TmFtZXNJbmRleCBnZW5lcmljRm9udEZhbWlseUluZGV4KENTU1ZhbHVlSUQg
aWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoK
KyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6
U2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJu
IFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6U2Fuc1NlcmlmRmFtaWx5
OworICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZh
bWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpDdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NT
VmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1p
bHlOYW1lc0luZGV4OjpGYW50YXN5RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6
CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXg6
Ok1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAg
ICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6UGlj
dG9ncmFwaEZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlU3lzdGVtVWk6CisgICAgICAgIHJldHVy
biBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXg6OlN5c3RlbVVpRmFtaWx5
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZh
bWlseTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVy
cwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAppbmRleCA5MTNjMTA4ZjNhYzk0M2Y0
YjBhNTQ5MmI0ZWM1ZDE5YWUwZGE2MzRlLi44MmY0NDJmYjcwMmMzNjAxOGZkNmEwNWYzZDNmYTQ4
NmE2OTY5MDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTQyLDYgKzQyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1lcyB7CitlbnVtIGNsYXNzIEZh
bWlseU5hbWVzSW5kZXg7Cit9CisKIC8vIFdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWNjZXNz
ZnVsLCB0aGV5IHdpbGwgY29uc3VtZSBhbGwgdGhlIHJlbGV2YW50CiAvLyB0b2tlbnMgZnJvbSB0
aGUgcmFuZ2UgYW5kIGFsc28gY29uc3VtZSBhbnkgd2hpdGVzcGFjZSB3aGljaCBmb2xsb3dzLiBX
aGVuCiAvLyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgd2Un
cmUgbG9va2luZyBmb3IsIHRoZSByYW5nZQpAQCAtMTY5LDcgKzE3Myw4IEBAIE9wdGlvbmFsPFZl
Y3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwogT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCk7CiBPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CiBPcHRpb25hbDxGb250UmF3
PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUpOwotY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NW
YWx1ZUlEKTsKK2NvbnN0IEF0b21TdHJpbmcmIGdlbmVyaWNGb250RmFtaWx5KENTU1ZhbHVlSUQp
OworV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4IGdlbmVyaWNGb250RmFt
aWx5SW5kZXgoQ1NTVmFsdWVJRCk7CiAKIGJvb2wgaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZG91
YmxlIGFuZ2xlSW5EZWdyZWVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBjNGZlMjI1ODkw
YWI0OGZkNGFlMzEwOWQ5OGU0MzZlMWMzZWM0OGJkLi4xZjlhODNiZmQyNjRhNGUxNDBlM2MxZjEz
OGJmYWM0ZjI1Nzk0MjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTY0NSw2ICsxNjQ1LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVJlbmRlclRyZWUoKTsKICAgICB2b2lkIGRldGFj
aFBhcnNlcigpOwogCisgICAgLy8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgIENTU0ZvbnRT
ZWxlY3RvciogY3NzRm9udFNlbGVjdG9yKCkgZmluYWwgeyByZXR1cm4gbV9mb250U2VsZWN0b3Iu
cHRyKCk7IH0KKwogICAgIC8vIEZvbnRTZWxlY3RvckNsaWVudAogICAgIHZvaWQgZm9udHNOZWVk
VXBkYXRlKEZvbnRTZWxlY3RvciYpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggZDI3MTdiZjc4MzFmNGZiNWQ3OGYwNTBjOTRi
NGFhNjcxMmNiNjlkOC4uYzc3MzgzMWI4OGMyYjAyYjA1YmMyZmZiNmYwNTNlOGRhZjFhNWY3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKQEAgLTIyNiw2ICsyMjcs
MTEgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaWRMb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnN0IFVSTCYpCiB7CiB9CiAKK0ZvbnRDYWNoZSYgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6Zm9udENhY2hlKCkKK3sKKyAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24oKTsK
K30KKwogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb3JFYWNoQWN0aXZlRE9NT2JqZWN0
KGNvbnN0IEZ1bmN0aW9uPFNob3VsZENvbnRpbnVlKEFjdGl2ZURPTU9iamVjdCYpPiYgYXBwbHkp
IGNvbnN0CiB7CiAgICAgLy8gSXQgaXMgbm90IGFsbG93ZWQgdG8gcnVuIGFyYml0cmFyeSBzY3Jp
cHQgb3IgY29uc3RydWN0IG5ldyBBY3RpdmVET01PYmplY3RzIHdoaWxlIHdlIGFyZSBpdGVyYXRp
bmcgb3ZlciBBY3RpdmVET01PYmplY3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKaW5kZXggMWQzNTI0MWZhZDgyYWQxYTY0YTkxMmQ0YjA2MjdhNjhmOTFi
ZDhlMi4uZThiZjBlZmNiNmJiYTEyNjBmMGE5MGI3OTc1NDM4MTZiMGRmMWJiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC02MCwxMCArNjAsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudExvb3A7CiBjbGFzcyBDYWNoZWRT
Y3JpcHQ7CitjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBj
bGFzcyBFdmVudFF1ZXVlOwogY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXZlbnRU
YXJnZXQ7CitjbGFzcyBGb250Q2FjaGU7CiBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFB1Ymxp
Y1VSTE1hbmFnZXI7CiBjbGFzcyBSZWplY3RlZFByb21pc2VUcmFja2VyOwpAQCAtMTYxLDYgKzE2
Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRMb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnN0IFVSTCYpOwogCisgICAgdmlydHVhbCBGb250Q2FjaGUmIGZvbnRDYWNoZSgp
OworICAgIHZpcnR1YWwgQ1NTRm9udFNlbGVjdG9yKiBjc3NGb250U2VsZWN0b3IoKSB7IHJldHVy
biBudWxscHRyOyB9CisKICAgICB2b2lkIHJlZigpIHsgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCA2NDE0ZTFlNmFiNTU2MGM4YjAzMTlj
ZTI1MmM2YzY2YWNiNzkzZjViLi43ODAwODI5ZGY2YjcxYWM0OTBiN2IzMjMyNTdkMTcwOTUzYzM2
OTg5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMTA0LDE1ICsxMDQsMjQgQEAgaWYg
KGxlbmd0aCgkZm9udE5hbWVzSW4pKSB7CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5o
PgogRU5ECiAKLSAgICBwcmludCBGICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPFZlY3Rvcjxj
b25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4g
ZmFtaWx5TmFtZXNEYXRhO1xuIjsKLSAgICBwcmludCBGICJleHRlcm4gTWFpblRocmVhZExhenlO
ZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFy
YW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsKLSAgICBwcmludE1hY3JvcygkRiwgImV4
dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IiwgIiIs
IFwlcGFyYW1ldGVycyk7Ci0gICAgcHJpbnQgRiAiXG4iOwogICAgIHByaW50IEYgImVudW0gY2xh
c3MgRmFtaWx5TmFtZXNJbmRleCB7XG4iOwogICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVw
YXJhbWV0ZXJzKSB7CiAgICAgICAgIHByaW50IEYgIiAgICAiLCB1Y2ZpcnN0KCR7bmFtZX0pLCAi
LFxuIjsKICAgICB9CiAgICAgcHJpbnQgRiAifTtcblxuIjsKKworICAgIHByaW50IEYgInRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+XG4iOworICAgIHByaW50
IEYgImNsYXNzIEZhbWlseU5hbWVzTGlzdCA6IHB1YmxpYyBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+IHtcbiI7CisgICAgcHJpbnQgRiAicHVibGljOlxuIjsKKyAgICBwcmludCBGICIgICAgVCYg
YXQoRmFtaWx5TmFtZXNJbmRleCBpKVxuIjsKKyAgICBwcmludCBGICIgICAge1xuIjsKKyAgICBw
cmludCBGICIgICAgICAgIHJldHVybiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjphdChzdGF0
aWNfY2FzdDxzaXplX3Q+KGkpKTtcbiI7CisgICAgcHJpbnQgRiAiICAgIH1cbiI7CisgICAgcHJp
bnQgRiAifTtcblxuIjsKKyAgICBwcmludCBGICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPEZh
bWlseU5hbWVzTGlzdDxjb25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBh
cmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJleHRlcm4g
TWFpblRocmVhZExhenlOZXZlckRlc3Ryb3llZDxGYW1pbHlOYW1lc0xpc3Q8QXRvbVN0cmluZ0lt
cGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsK
KyAgICBwcmludE1hY3JvcygkRiwgImV4dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CisgICAgcHJpbnQgRiAiXG4i
OwogICAgIHByaW50IEYgIiNlbmRpZlxuXG4iOwogCiAgICAgcHJpbnRJbml0KCRGLCAxKTsKQEAg
LTEyNiw4ICsxMzUsOCBAQCBFTkQKIAogICAgIHByaW50IEYgU3RhdGljU3RyaW5nOjpHZW5lcmF0
ZVN0cmluZ3MoXCVwYXJhbWV0ZXJzKTsKIAotICAgIHByaW50IEYgIkxhenlOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8Y29uc3QgU3RhdGljU3RyaW5nSW1wbCosICIsIHNjYWxhcihrZXlzICVwYXJhbWV0
ZXJzKSwgIj4+IGZhbWlseU5hbWVzRGF0YTtcbiI7Ci0gICAgcHJpbnQgRiAiTWFpblRocmVhZExh
enlOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAl
cGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsKKyAgICBwcmludCBGICJMYXp5TmV2
ZXJEZXN0cm95ZWQ8RmFtaWx5TmFtZXNMaXN0PGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqLCAiLCBz
Y2FsYXIoa2V5cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lc0RhdGE7XG4iOworICAgIHBy
aW50IEYgIk1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8RmFtaWx5TmFtZXNMaXN0PEF0b21T
dHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXM7
XG5cbiI7CiAKICAgICBwcmludE1hY3JvcygkRiwgIk1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4iLCAiIiwgXCVwYXJhbWV0ZXJzKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAppbmRleCBkOWNhNmNiMzVmNjc2ZjAwOGJlMjYxMGI5NGMwN2JmNDg4MDIyZGU1Li5j
OThlOTEzMmY2NDQ0NjMxYjNjODFlY2IwODU4YjcwOTRhZjUyZjQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcApAQCAtMjM2Niw4ICsyMzY2LDYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjYW5EcmF3VGV4dChmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGkKICAg
ICBpZiAoIWZvbnRQcm94eSgpLT5yZWFsaXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2Vk
U2NvcGU7Ci0KICAgICBhdXRvKiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IGYxNzg4NzRhZmE2Njc5ZjkwMWE1ZWNlZTMyYmI0ZmY1ZGQzZjI5MzguLjhhZTQ5ODQyYjkwYThi
ZmZhZDE2ZDczOTM3YTUyMWQzMWFmYTU5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcApAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9y
Rm9udFJhdy5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KQEAgLTYzLDggKzYzLDYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNvbW1pdCgpCiB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiB7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICgh
aXM8RG9jdW1lbnQ+KGNvbnRleHQpKQotICAgICAgICByZXR1cm47CiAKICAgICBpZiAobmV3Rm9u
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkwLDExICs4OCwxMCBAQCB2b2lkIE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5l
d0ZvbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRT
aXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6
ZSk7CiAKLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsK
LSAgICBhdXRvIGZvbnRDYXNjYWRlID0gU3R5bGU6OnJlc29sdmVGb3JGb250UmF3KCpmb250UmF3
LCBXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIGRvY3VtZW50KTsKLQotICAgIGlmIChmb250Q2Fz
Y2FkZSkKLSAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKGRvY3VtZW50
LmZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOworICAgIGlmIChhdXRvIGZvbnRDYXNjYWRl
ID0gU3R5bGU6OnJlc29sdmVGb3JGb250UmF3KCpmb250UmF3LCBXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbiksIGNvbnRleHQpKSB7CisgICAgICAgIEFTU0VSVChjb250ZXh0LmNzc0ZvbnRTZWxlY3Rv
cigpKTsKKyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKCpjb250ZXh0
LmNzc0ZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOworICAgIH0KIH0KIAogQ2FudmFzRGly
ZWN0aW9uIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlyZWN0aW9uKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmlu
ZGV4IGZkZmI2ZGE0NjY0NzQxOWUwNjlhODI0ZWJjYjhkNzBlNjhiNjBjY2QuLmVkZjJmZTA0NzNh
ZjNhODYwNjE1MzE3NDM4MzIxYmQ5Y2E5ZTAyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtNDksMjIgKzQ5LDYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLUZvbnRDYWNoZSYgRm9udENhY2hl
OjpzaW5nbGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FjaGU+IGds
b2JhbEZvbnRDYWNoZTsKLSAgICByZXR1cm4gZ2xvYmFsRm9udENhY2hlOwotfQotCi1Gb250Q2Fj
aGU6OkZvbnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQotICAgICwgbV9mb250UGxhdGZvcm1EYXRhQ2Fj
aGUobWFrZVVuaXF1ZVJlZjxGb250UGxhdGZvcm1EYXRhQ2FjaGU+KCkpCi0gICAgLCBtX2ZvbnRE
YXRhQ2FjaGUobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlPigpKQotI2lmIEVOQUJMRShPUEVO
VFlQRV9WRVJUSUNBTCkKLSAgICAsIG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlKG1ha2VVbmlxdWVS
ZWY8Rm9udFZlcnRpY2FsRGF0YUNhY2hlPigpKQotI2VuZGlmCi17Ci19Ci0KIHN0cnVjdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtMTI3LDEzICsxMTEsODAgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eUhhc2ggewogICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsK
IAogc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4gewotICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworc3RydWN0IEZvbnREYXRh
Q2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgeworICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRh
Lmhhc2goKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGEgPT0gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAorc3RydWN0IEZvbnREYXRhQ2FjaGVL
ZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGE+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGE+IGtleSgwLmYsIGZhbHNlLCBm
YWxzZSk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQorICAgIHsKKyAgICAgICAg
bmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFs
dWUpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KK307CisKK3VzaW5nIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSA9IEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2hUcmFpdHM+OwordXNpbmcgRm9udERhdGFDYWNoZSA9IEhhc2hNYXA8
Rm9udFBsYXRmb3JtRGF0YSwgUmVmPEZvbnQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERh
dGFDYWNoZUtleVRyYWl0cz47CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQordXNpbmcg
Rm9udFZlcnRpY2FsRGF0YUNhY2hlID0gSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8
T3BlblR5cGVWZXJ0aWNhbERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNo
ZUtleVRyYWl0cz47CisjZW5kaWYKKworc3RydWN0IEZvbnRDYWNoZTo6Rm9udERhdGFDYWNoZXMg
eworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIEZvbnREYXRhQ2Fj
aGUgZGF0YTsKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGUgcGxhdGZvcm1EYXRhOworI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBGb250VmVydGljYWxEYXRhQ2FjaGUgdmVydGlj
YWxEYXRhOworI2VuZGlmCit9OworCitSZWY8Rm9udENhY2hlPiBGb250Q2FjaGU6OmNyZWF0ZSgp
Cit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRm9udENhY2hlKCkpOworfQorCitGb250Q2FjaGUmIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkK
K3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPEZvbnRDYWNoZT4gZ2xvYmFs
Rm9udENhY2hlOworICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7Cit9CisKK0ZvbnRDYWNoZTo6
fkZvbnRDYWNoZSgpID0gZGVmYXVsdDsKKworRm9udENhY2hlOjpGb250Q2FjaGUoKQorICAgIDog
bV9wdXJnZVRpbWVyKCp0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5l
ZWRlZCkKKyAgICAsIG1fZm9udERhdGFDYWNoZXMobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hl
cz4oKSkKK3sKK30KKwogT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OmFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIGlmIChhdXRvIHBs
YXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFt
aWx5TmFtZSkpCkBAIC0xOTcsNyArMjQ4LDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KIAog
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0
aW9uLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAKLSAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5hZGQoa2V5LCBudWxscHRyKTsK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5hZGQo
a2V5LCBudWxscHRyKTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0g
YWRkUmVzdWx0Lml0ZXJhdG9yOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAg
ICAgICBpdC0+dmFsdWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwg
ZmFtaWx5TmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwpAQCAt
MjA5LDggKzI2MCw4IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgICAgICAgICAg
YXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29r
dXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0
b3IgbWF5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSBy
ZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAg
ICAgICAgaXQgPSBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChpdCAhPSBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZW5kKCkpOworICAg
ICAgICAgICAgICAgIGl0ID0gbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhLmZpbmQoa2V5
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbV9mb250RGF0YUNhY2hlcy0+cGxhdGZv
cm1EYXRhLmVuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZm9udFBsYXRmb3JtRGF0YUZvckFs
dGVybmF0ZU5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8
Rm9udFBsYXRmb3JtRGF0YT4oKmZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKTsKICAg
ICAgICAgICAgIH0KQEAgLTIyMCw0NyArMjcxLDYgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENh
Y2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8K
ICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGEuaGFzaCgp
OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9
PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDog
V1RGOjpHZW5lcmljSGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhPiB7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGVtcHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEZvbnRQbGF0Zm9ybURhdGE+IGtleSgwLmYsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAg
IHJldHVybiBrZXk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAm
c2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
OwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi1SZWZQdHI8T3Bl
blR5cGVWZXJ0aWNhbERhdGE+IEZvbnRDYWNoZTo6dmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udFZl
cnRpY2FsRGF0YUNhY2hlLT5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBsYXRmb3JtRGF0YV0gewot
ICAgICAgICByZXR1cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEp
OwotICAgIH0pOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogY29uc3QgdW5zaWduZWQgY01heEluYWN0
aXZlRm9udERhdGEgPSAxMjA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0
YSA9IDEwMDsKQEAgLTI4OSw3ICsyOTksNyBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9y
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwogI2VuZGlmCiAKLSAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZS0+ZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPmRhdGEuZW5zdXJlKHBsYXRmb3Jt
RGF0YSwgWyZdIHsKICAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwog
ICAgIH0pOwogCkBAIC0zMDUsNyArMzE1LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YUlmTmVlZGVkKCkKIAogICAgIExPRyhGb250cywgIkZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKSAtIHVuZGVyTWVtb3J5UHJlc3N1cmUgJWQsIGluYWN0
aXZlRm9udERhdGFMaW1pdCAldSIsIHVuZGVyTWVtb3J5UHJlc3N1cmUsIGluYWN0aXZlRm9udERh
dGFMaW1pdCk7CiAKLSAgICBpZiAobV9mb250RGF0YUNhY2hlLT5zaXplKCkgPCBpbmFjdGl2ZUZv
bnREYXRhTGltaXQpCisgICAgaWYgKG1fZm9udERhdGFDYWNoZXMtPmRhdGEuc2l6ZSgpIDwgaW5h
Y3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5hY3Rp
dmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0g
aW5hY3RpdmVGb250RGF0YUxpbWl0KQpAQCAtMzI4LDcgKzMzOCw3IEBAIHZvaWQgRm9udENhY2hl
OjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIAogICAgIHdoaWxl
IChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250c1RvRGVs
ZXRlOwotICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUtPnZhbHVlcygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IG1fZm9udERhdGFDYWNoZXMtPmRhdGEudmFs
dWVzKCkpIHsKICAgICAgICAgICAgIExPRyhGb250cywgIiB0cnlpbmcgdG8gcHVyZ2UgZm9udCAl
cyAoaGFzIG9uZSByZWYgJWQpIiwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpLCBmb250LT5oYXNPbmVSZWYoKSk7CiAgICAgICAgICAgICBpZiAoIWZvbnQt
Pmhhc09uZVJlZigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzQwLDI1ICszNTAs
MjUgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJn
ZUNvdW50KQogICAgICAgICBpZiAoZm9udHNUb0RlbGV0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogZm9udHNUb0RlbGV0ZSkgewotICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hlLT5yZW1vdmUoZm9udC0+cGxh
dGZvcm1EYXRhKCkpOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hl
cy0+ZGF0YS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOwogICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
Ci0gICAgICAgICAgICBtX2ZvbnRWZXJ0aWNhbERhdGFDYWNoZS0+cmVtb3ZlKGZvbnQtPnBsYXRm
b3JtRGF0YSgpKTsKKyAgICAgICAgICAgIG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2FsRGF0YS5y
ZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Owog
CiAgICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOwotICAg
IGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9udFBsYXRmb3JtRGF0YUNh
Y2hlLT5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2ZvbnRQbGF0Zm9ybURhdGFD
YWNoZS5nZXQoKSkgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgJiYgIW1fZm9udERhdGFDYWNo
ZS0+Y29udGFpbnMoKmVudHJ5LnZhbHVlKSkKKyAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhKSB7CisgICAg
ICAgIGlmIChlbnRyeS52YWx1ZSAmJiAhbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5jb250YWlucygq
ZW50cnkudmFsdWUpKQogICAgICAgICAgICAga2V5c1RvUmVtb3ZlLnVuY2hlY2tlZEFwcGVuZChl
bnRyeS5rZXkpOwogICAgIH0KIAogICAgIExPRyhGb250cywgIiByZW1vdmluZyAlbHUga2V5cyIs
IGtleXNUb1JlbW92ZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1v
dmUpCi0gICAgICAgIG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5yZW1vdmUoa2V5KTsKKyAgICAg
ICAgbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhLnJlbW92ZShrZXkpOwogCiAgICAgcGxh
dGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKTsKIH0KQEAgLTQwMiw2ICs0MTIsMTYgQEAgdm9p
ZCBGb250Q2FjaGU6OmNsZWFyV2lkdGhDYWNoZXMoKQogICAgICAgICB2YWx1ZS0+Zm9udHMuZ2V0
KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElD
QUwpCitSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+IEZvbnRDYWNoZTo6dmVydGljYWxEYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2FsRGF0YS5lbnN1cmUocGxhdGZvcm1EYXRh
LCBbJnBsYXRmb3JtRGF0YV0geworICAgICAgICByZXR1cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6
OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgIH0pOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworfQorI2VuZGlmCisKIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAgICBGb250Q2FzY2FkZUNh
Y2hlS2V5IGtleTsKQEAgLTQ1OCw3ICs0NzgsNyBAQCB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9u
dENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbAog
CiBzaXplX3QgRm9udENhY2hlOjpmb250Q291bnQoKQogewotICAgIHJldHVybiBtX2ZvbnREYXRh
Q2FjaGUtPnNpemUoKTsKKyAgICByZXR1cm4gbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5zaXplKCk7
CiB9CiAKIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKQEAgLTQ2Nyw3ICs0
ODcsNyBAQCBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2ZvbnRMb2NrKTsKICNlbmRpZgogICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKLSAgICBmb3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUtPnZhbHVlcygpKSB7
CisgICAgZm9yIChhdXRvJiBmb250IDogbV9mb250RGF0YUNhY2hlcy0+ZGF0YS52YWx1ZXMoKSkg
ewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAgICAgICArK2NvdW50Owog
ICAgIH0KQEAgLTQ4OSw5ICs1MDksOSBAQCB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZv
bnRTZWxlY3RvciYgY2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiB7Ci0g
ICAgbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUtPmNsZWFyKCk7CisgICAgbV9mb250RGF0YUNhY2hl
cy0+cGxhdGZvcm1EYXRhLmNsZWFyKCk7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQot
ICAgIG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlLT5jbGVhcigpOworICAgIG1fZm9udERhdGFDYWNo
ZXMtPnZlcnRpY2FsRGF0YS5jbGVhcigpOwogI2VuZGlmCiAgICAgaW52YWxpZGF0ZUZvbnRDYXNj
YWRlQ2FjaGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaAppbmRleCA5ODdmNWE5MTY2MTM1MTVlYjZmYzFlNzAzOTQ2ZTQyODE1ZTUxYWI4Li43NTAx
YzJkZjBkZjIzZjA0OGM3MDBhYWMwMGJmN2MyYWIyNzk4ODM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlRm9udHMuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDxhcnJheT4KQEAgLTY0LDE1ICs2NSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgRm9udFNlbGVjdG9yOwogY2xhc3MgT3BlblR5cGVWZXJ0
aWNhbERhdGE7CiBjbGFzcyBGb250OwogZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IHVp
bnQ4X3Q7Ci1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2g7Ci1zdHJ1Y3QgRm9udERhdGFDYWNo
ZUtleVRyYWl0czsKLXN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk7Ci1zdHJ1Y3QgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaDsKLXN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlIYXNoVHJhaXRzOwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9M
SU5LMikKQEAgLTIxOCwyMCArMjEzLDE2IEBAIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhCiAKIHVz
aW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRlQ2FjaGVLZXksIHN0ZDo6
dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwogCi10eXBlZGVmIEhhc2hNYXA8Rm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4s
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhh
c2hUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxh
dGZvcm1EYXRhLCBSZWY8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hl
S2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
LXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8T3BlblR5cGVWZXJ0aWNh
bERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dFZlcnRpY2FsRGF0YUNhY2hlOwotI2VuZGlmCi0KIGNsYXNzIEZvbnRDYWNoZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZvbnRDYWNoZT4gewotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJv
eWVkPEZvbnRDYWNoZT47CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Rm9u
dENhY2hlLCBNYWluVGhyZWFkQWNjZXNzVHJhaXRzPjsKIAogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEZvbnRDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEZv
bnRDYWNoZSgpOwotCisgICAgc3RhdGljIFJlZjxGb250Q2FjaGU+IGNyZWF0ZSgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBGb250Q2FjaGUmIHNpbmdsZXRvbigpOworICAgIHN0YXRpYyBG
b250Q2FjaGUmIGZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24oUmVmUHRyPEZvbnRTZWxlY3Rv
cj4pOworCisgICAgfkZvbnRDYWNoZSgpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIGVudW0gY2xhc3MgUHJlZmVyQ29sb3JlZEZv
bnQgOiB1aW50OF90IHsgTm8sIFllcyB9OwpAQCAtMzAzLDYgKzI5NCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCiBwcml2YXRlOgorICAgIEZvbnRDYWNoZSgpOwor
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgp
OwogICAgIHZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUo
KTsKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwpAQCAtMzIyLDExICszMTUs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nl
c3NpYmlsaXR5IHsgZmFsc2UgfTsKIAogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4gbV9jbGll
bnRzOwotICAgIFVuaXF1ZVJlZjxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IG1fZm9udFBsYXRmb3Jt
RGF0YUNhY2hlOwotICAgIFVuaXF1ZVJlZjxGb250RGF0YUNhY2hlPiBtX2ZvbnREYXRhQ2FjaGU7
Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIFVuaXF1ZVJlZjxGb250VmVydGlj
YWxEYXRhQ2FjaGU+IG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlOwotI2VuZGlmCisgICAgc3RydWN0
IEZvbnREYXRhQ2FjaGVzOworICAgIFVuaXF1ZVJlZjxGb250RGF0YUNhY2hlcz4gbV9mb250RGF0
YUNhY2hlczsKICAgICBGb250Q2FzY2FkZUNhY2hlIG1fZm9udENhc2NhZGVDYWNoZTsKIAogICAg
IHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbiB7IDAgfTsKQEAgLTM4OCw0ICszNzgsOSBAQCBP
cHRpb25hbDxGb250Q2FjaGU6OlByZXdhcm1JbmZvcm1hdGlvbj4gRm9udENhY2hlOjpQcmV3YXJt
SW5mb3JtYXRpb246OmRlY29kZShEZQogICAgIHJldHVybiBwcmV3YXJtSW5mb3JtYXRpb247CiB9
CiAKK2lubGluZSBGb250Q2FjaGUmIEZvbnRDYWNoZTo6Zm9udENhY2hlRmFsbGJhY2tUb1Npbmds
ZXRvbihSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCit7CisgICAgcmV0dXJuIGZv
bnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+Zm9udENhY2hlKCkgOiBGb250Q2FjaGU6OnNpbmds
ZXRvbigpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNlMTE2NjU5N2I3OWZkOGY3
M2Q3ZC4uYmIzNmVmNjI1NmVjNzk1NTI0N2VkZjE2Y2Y2YjdkOTA5YTFlZGY5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMTUw
LDcgKzE1MCw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmlzQ3VycmVudChjb25zdCBGb250U2VsZWN0
b3ImIGZvbnRTZWxlY3RvcikgY29uc3QKIHsKICAgICBpZiAoIW1fZm9udHMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobV9mb250cy0+Z2VuZXJhdGlvbigpICE9IEZvbnRDYWNoZTo6
c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQorICAgIGlmIChtX2ZvbnRzLT5nZW5lcmF0aW9uKCkg
IT0gZm9udFNlbGVjdG9yLmZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmIChtX2ZvbnRzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkgIT0gZm9udFNl
bGVjdG9yLnZlcnNpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY4LDcgKzE2OCw3
IEBAIHZvaWQgRm9udENhc2NhZGU6OnVwZGF0ZUZvbnRzKFJlZjxGb250Q2FzY2FkZUZvbnRzPiYm
IGZvbnRzKSBjb25zdAogCiB2b2lkIEZvbnRDYXNjYWRlOjp1cGRhdGUoUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4mJiBmb250U2VsZWN0b3IpIGNvbnN0CiB7Ci0gICAgRm9udENhY2hlOjpzaW5nbGV0b24o
KS51cGRhdGVGb250Q2FzY2FkZSgqdGhpcywgV1RGTW92ZShmb250U2VsZWN0b3IpKTsKKyAgICBG
b250Q2FjaGU6OmZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24oZm9udFNlbGVjdG9yKS51cGRh
dGVGb250Q2FzY2FkZSgqdGhpcywgV1RGTW92ZShmb250U2VsZWN0b3IpKTsKIH0KIAogR2x5cGhC
dWZmZXIgRm9udENhc2NhZGU6OmxheW91dFRleHQoQ29kZVBhdGggY29kZVBhdGhUb1VzZSwgY29u
c3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgRm9yVGV4dEVtcGhh
c2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAppbmRleCA5YzdiZWViZDhk
NTI3Yzc4MTBhOTAxNDQ5NWMwMWYzY2E4ODRkYWUxLi45ZjY1ZDI5OThmOTQ4Njk3M2Q0YmJmMThk
ZTI2ZjgyYjA0NDM5ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIEZvbnRDYXNj
YWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2Vs
ZWN0b3IpCiAgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KG51bGxwdHIpCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKLSAgICAsIG1fZ2VuZXJh
dGlvbihGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVyYXRpb24oKSkKKyAgICAsIG1fZ2VuZXJh
dGlvbihGb250Q2FjaGU6OmZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24obV9mb250U2VsZWN0
b3IpLmdlbmVyYXRpb24oKSkKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmICghaXNNYWlu
VGhyZWFkKCkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5l
eHRGYWxsYmFjayhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwKIHsK
ICAgICBBU1NFUlQoaW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsK
IAotICAgIGF1dG8mIGZvbnRDYWNoZSA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgYXV0
byYgZm9udENhY2hlID0gRm9udENhY2hlOjpmb250Q2FjaGVGYWxsYmFja1RvU2luZ2xldG9uKGZv
bnRTZWxlY3Rvcik7CiAgICAgd2hpbGUgKGluZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFt
aWx5Q291bnQoKSkgewogICAgICAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsm
XShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpIC0+IEZvbnRSYW5nZXMgewogICAgICAgICAgICAg
aWYgKGZhbWlseS5pc0VtcHR5KCkpCkBAIC0xODEsNyArMTgxLDcgQEAgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXMKICAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07
CiAKICAgICBBU1NFUlQoaW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSk7
Ci0gICAgQVNTRVJUKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2Vu
ZXJhdGlvbik7CisgICAgQVNTRVJUKEZvbnRDYWNoZTo6Zm9udENhY2hlRmFsbGJhY2tUb1Npbmds
ZXRvbihtX2ZvbnRTZWxlY3RvcikuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKICAg
ICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7CiAgICAgYXV0
byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CkBAIC0xOTEs
NyArMTkxLDcgQEAgY29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXMKICAgICAgICAgaWYgKGZvbnRSYW5n
ZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0g
bV9mb250U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJk
RmFtaWx5KTsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBm
b250UmFuZ2VzID0gRm9udFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBGb250
UmFuZ2VzKEZvbnRDYWNoZTo6Zm9udENhY2hlRmFsbGJhY2tUb1NpbmdsZXRvbihtX2ZvbnRTZWxl
Y3RvcikubGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbikpOwogICAgICAgICByZXR1
cm4gZm9udFJhbmdlczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFhNjM5ODBiNjEw
MDZkODVjMmY1MC4uNjU0OGU3NmY5OTYxZmY3ZTFhNTg5ZjVjYmIxYzA1NzJlYmJhZDg4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKQEAg
LTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250Q2FjaGU7
CiBjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwog
Y2xhc3MgRm9udFNlbGVjdG9yQ2xpZW50OwpAQCAtNTQsNiArNTUsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSA9
IDA7CiAKKyAgICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYp
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggYTA4ODJmN2MyY2Y4YjIzNDIz
YmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZDYwYjVkYjcwNzdhZWRjYzgyZDc1NTY4ZjFhNDM3ODAy
OWM4NDJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTEzOCw3ICsxMzgsNyBA
QCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrRm9u
dDsKICAgICB9CiAKLSAgICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9udERlc2NyaXB0aW9uLCBi
YXNlRm9udCwgSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vLCBwcmVmZXJDb2xvcmVkRm9udCA/IEZvbnRD
YWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6OlllcyA6IEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZv
bnQ6Ok5vLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgaWYgKGF1dG8gc3lzdGVtRmFsbGJh
Y2sgPSBGb250Q2FjaGU6OmZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24oZm9udFNlbGVjdG9y
KCkpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhtX2ZvbnREZXNjcmlwdGlvbiwgYmFzZUZv
bnQsIElzRm9yUGxhdGZvcm1Gb250OjpObywgcHJlZmVyQ29sb3JlZEZvbnQgPyBGb250Q2FjaGU6
OlByZWZlckNvbG9yZWRGb250OjpZZXMgOiBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpO
bywgY2hhcmFjdGVycywgbGVuZ3RoKSkgewogICAgICAgICBpZiAoc3lzdGVtRmFsbGJhY2stPmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkgJiYg
KCFwcmVmZXJDb2xvcmVkRm9udCB8fCBzeXN0ZW1GYWxsYmFjay0+cGxhdGZvcm1EYXRhKCkuaXND
b2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3lzdGVtRmFsbGJhY2suZ2V0
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmY2Q5MDk2NmI3ZjIyN2Fi
YmNkYjU3YTFiZTQ5ZWM4YWI4MWNlZmM0Li5hMWI5NTE0MWZlMTFiOWEwOTAyODVkYmRjYmEzMTY4
ZTZkYjkyY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0zMzgsMTkgKzMz
OCwxOSBAQCBzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5KQogICAgIGlmIChmYW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFy
dHNXaXRoKCItd2Via2l0LSIpKQogICAgICAgICByZXR1cm4gZmFtaWx5OwogCi0gICAgaWYgKGZh
bWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlO
YW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseSkpIHx8IGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEt
PmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTZXJpZkZhbWlseSkp
KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChGYW1pbHlOYW1lc0luZGV4
OjpTdGFuZGFyZEZhbWlseSkgfHwgZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoRmFtaWx5
TmFtZXNJbmRleDo6U2VyaWZGYW1pbHkpKQogICAgICAgICByZXR1cm4gInNlcmlmIjsKLSAgICBp
ZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZh
bWlseU5hbWVzSW5kZXg6OlNhbnNTZXJpZkZhbWlseSkpKQorICAgIGlmIChmYW1pbHkgPT0gZmFt
aWx5TmFtZXNEYXRhLT5hdChGYW1pbHlOYW1lc0luZGV4OjpTYW5zU2VyaWZGYW1pbHkpKQogICAg
ICAgICByZXR1cm4gInNhbnMtc2VyaWYiOwotICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNE
YXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6TW9ub3NwYWNl
RmFtaWx5KSkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KEZhbWlseU5h
bWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpCiAgICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsK
LSAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZhbWlseU5hbWVzSW5kZXg6OkN1cnNpdmVGYW1pbHkpKSkKKyAgICBpZiAoZmFtaWx5ID09
IGZhbWlseU5hbWVzRGF0YS0+YXQoRmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWlseSkpCiAg
ICAgICAgIHJldHVybiAiY3Vyc2l2ZSI7Ci0gICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0Rh
dGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFt
aWx5KSkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KEZhbWlseU5hbWVz
SW5kZXg6OkZhbnRhc3lGYW1pbHkpKQogICAgICAgICByZXR1cm4gImZhbnRhc3kiOwogCiAjaWYg
UExBVEZPUk0oR1RLKQotICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U3lzdGVtVWlGYW1pbHkpKSB8fCBm
YW1pbHkgPT0gIi13ZWJraXQtc3lzdGVtLWZvbnQiKQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5
TmFtZXNEYXRhLT5hdChGYW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1VaUZhbWlseSkgfHwgZmFtaWx5
ID09ICItd2Via2l0LXN5c3RlbS1mb250IikKICAgICAgICAgcmV0dXJuIGRlZmF1bHRHdGtTeXN0
ZW1Gb250KCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0
b20uaAppbmRleCBlMzQ3ZmUzZGVhYTk4ZjliNTljNzk4ZDM2NzAwZDc5ZDNkNjMzMGRlLi45MTQ0
ZTM4ZGU2OTM3MDA5NDFlZWFkMDNjMjkxY2QwOGYyYWQ0Y2YzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMTA2MSw3ICsxMDYxLDcgQEAgaW5saW5lIHZv
aWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIENTU1YKICAgICAgICAgICAgICAgICBmYW1pbHkgPSBidWlsZGVyU3RhdGUuZG9j
dW1lbnQoKS5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBmYW1pbHkgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
RnJvbVZhbHVlSUQoY29udGVudFZhbHVlLnZhbHVlSUQoKSk7CisgICAgICAgICAgICAgICAgZmFt
aWx5ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseShjb250ZW50
VmFsdWUudmFsdWVJRCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCmluZGV4IDFmNWNjNDE0
OGQ1YTBiZmY4NWVlMDExMjEzNzU1MmYxZjhkMzliZDMuLjhlMzcwNjY1ZTFjNjg2OTg0YzJhNWVj
NjdkMDcyM2Y5NTdhNTU1NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZUZvckZvbnRSYXcuY3BwCkBAIC0zMiwyOCArMzIsMzkgQEAKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVGb3JGb250UmF3LmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldlYktpdEZv
bnRGYW1pbHlOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBTdHls
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVzOwogCi1PcHRpb25hbDxGb250Q2FzY2FkZT4g
cmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGJv
b2wgdXNlRml4ZWREZWZhdWx0U2l6ZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pCiB7CisgICAgcmV0dXJuIGZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgp
ID09IDEgJiYgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkgPT0gZmFtaWx5TmFtZXNEYXRh
LT5hdChGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VGYW1pbHkpOworfQorCitPcHRpb25hbDxG
b250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC5jc3NGb250U2VsZWN0b3IoKSk7
CisKICAgICAvLyBNYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxl
LgogICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
OwogCiAgICAgLy8gRm9udCBmYW1pbHkgYXBwbGllZCBpbiB0aGUgc2FtZSB3YXkgYXMgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseQogICAgIC8vIEJlZm9yZSBtYXBwaW5n
IGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVy
aWMgZmFtaWx5LgotICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOworICAgIGJvb2wgb2xkRmFtaWx5VXNl
ZEZpeGVkRGVmYXVsdFNpemUgPSB1c2VGaXhlZERlZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbik7
CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFtaWxpZXM7CiAgICAgZmFtaWxpZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LmZhbWlseS5zaXplKCkpOwpAQCAtNjMsNyArNzQsMTAg
QEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcm
IGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAgICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkg
PSBmYWxzZTsKICAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7
CiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJv
ZHk7Ci0gICAgICAgICAgICBmYW1pbHkgPSBpc0dlbmVyaWNGYW1pbHkgPyBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoaWRlbnQpIDogQXRvbVN0
cmluZyhkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpKTsKKyAgICAgICAg
ICAgIGlmIChpc0dlbmVyaWNGYW1pbHkpCisgICAgICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5
TmFtZXNEYXRhLT5hdChDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
SW5kZXgoaWRlbnQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmYW1pbHkg
PSBBdG9tU3RyaW5nKGNvbnRleHQuc2V0dGluZ3NWYWx1ZXMoKS5mb250R2VuZXJpY0ZhbWlsaWVz
LnN0YW5kYXJkRm9udEZhbWlseSgpKTsKICAgICAgICAgfSwgWyZdIChjb25zdCBTdHJpbmcmIGZh
bWlseVN0cmluZykgewogICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5U3RyaW5nOwogICAgICAg
ICB9KTsKQEAgLTc5LDExICs5MywxMSBAQCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZv
ckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNjcgogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhm
YW1pbGllcyk7CiAKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkgeworICAgIGlmICh1c2VGaXhlZERl
ZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbikgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNp
emUpIHsKICAgICAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3Jp
cHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkgewotICAgICAgICAgICAgYXV0byBzaXpl
ID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplLCBkb2N1bWVudCk7CisgICAgICAgICAgICBhdXRvIHNpemUgPSBT
dHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZp
eGVkRGVmYXVsdFNpemUsIGNvbnRleHQuc2V0dGluZ3NWYWx1ZXMoKSk7CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3Bl
Y2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgMS4wLCBN
aW5pbXVtRm9udFNpemVSdWxlOjpOb25lLCBkb2N1bWVudC5zZXR0aW5nc1ZhbHVlcygpKSk7Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRl
ZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1
dGVTaXplKCksIDEuMCwgTWluaW11bUZvbnRTaXplUnVsZTo6Tm9uZSwgY29udGV4dC5zZXR0aW5n
c1ZhbHVlcygpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3Niw3ICsxOTAsNyBAQCBPcHRp
b25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJh
dywgRm9udENhc2NhZGVEZXNjcgogICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgogICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQpOwotICAgICAgICAgICAgcmV0
dXJuIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBTdHlsZTo6
Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpLCBjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkpOwogICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2VyOgogICAgICAgICAgICAgcmV0dXJuIHBhcmVudFNpemUgKiAxLjJmOwogICAgICAgICBj
YXNlIENTU1ZhbHVlU21hbGxlcjoKQEAgLTE4Nyw4ICsyMDEsOCBAQCBPcHRpb25hbDxGb250Q2Fz
Y2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2Nh
ZGVEZXNjcgogICAgIH0sIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5n
dGhPclBlcmNlbnRSYXcmIGxlbmd0aE9yUGVyY2VudCkgewogICAgICAgICByZXR1cm4gc3dpdGNo
T24obGVuZ3RoT3JQZXJjZW50LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
TGVuZ3RoUmF3JiBsZW5ndGgpIHsKICAgICAgICAgICAgIGF1dG8gZm9udENhc2NhZGUgPSBGb250
Q2FzY2FkZShGb250Q2FzY2FkZURlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpOwotICAgICAg
ICAgICAgZm9udENhc2NhZGUudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlVW56b29tZWROb25DYWxjTGVuZ3RoRG91YmxlKGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUs
IENTU1Byb3BlcnR5Rm9udFNpemUsICZmb250Q2FzY2FkZS5mb250TWV0cmljcygpLCAmZm9udENh
c2NhZGUuZm9udERlc2NyaXB0aW9uKCksICZmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwg
ZG9jdW1lbnQucmVuZGVyVmlldygpKSk7CisgICAgICAgICAgICBmb250Q2FzY2FkZS51cGRhdGUo
Y29udGV4dC5jc3NGb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlVW56b29tZWROb25DYWxjTGVuZ3Ro
RG91YmxlKGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUsIENTU1Byb3BlcnR5Rm9udFNpemUsICZm
b250Q2FzY2FkZS5mb250TWV0cmljcygpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCks
ICZmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKSwgaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8g
ZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnJlbmRlclZpZXcoKSA6IG51bGxwdHIpKTsKICAg
ICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgewogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PigocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2UpIC8gMTAwLjApOwogICAg
ICAgICB9KTsKQEAgLTIwMyw3ICsyMTcsNyBAQCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2
ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNjcgogICAg
IC8vIGl0LCBldmVuIHRob3VnaCB0aGVyZSBpcyBsaW5lLWhlaWdodCBpbmZvcm1hdGlvbiBvbiBG
b250UmF3LgogCiAgICAgYXV0byBmb250Q2FzY2FkZSA9IEZvbnRDYXNjYWRlKFdURk1vdmUoZm9u
dERlc2NyaXB0aW9uKSk7Ci0gICAgZm9udENhc2NhZGUudXBkYXRlKCZkb2N1bWVudC5mb250U2Vs
ZWN0b3IoKSk7CisgICAgZm9udENhc2NhZGUudXBkYXRlKGNvbnRleHQuY3NzRm9udFNlbGVjdG9y
KCkpOwogICAgIHJldHVybiBmb250Q2FzY2FkZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oCmluZGV4IDFhODZhOWYxNTg4ZGNlMTc4YTQzOTBk
NzQ5MzU0MGZmODkyYWIzYjAuLjJiY2ZjYmZhZGQ0NTI3YzNhMWIyZWI2OGYyYzhlYjVmZTllOWZh
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmgK
QEAgLTMyLDkgKzMyLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xhc3MgRm9udENhc2NhZGVEZXNjcmlwdGlvbjsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMgewogc3RydWN0IEZvbnRSYXc7CkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBGb250
UmF3OwogCiBuYW1lc3BhY2UgU3R5bGUgewogCi1PcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2
ZUZvckZvbnRSYXcoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3JiwgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYmLCBEb2N1bWVudCYpOworT3B0aW9uYWw8Rm9udENhc2NhZGU+
IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dyYsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwog
CiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmlu
ZGV4IGJlYjY3YmQ1NGFmM2I1OWE5ZDA5YTQyMjMyMmVhY2M3NWRjZTBmMDMuLmYxZDdmMmZlNDFl
Y2I5NzRkY2M4YWViNDExODkyMzk5ZTA0ZjlhYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5oIgogCisjaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVk
ZSAiQ3J5cHRvLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiSURCQ29ubmVj
dGlvblByb3h5LmgiCiAjaW5jbHVkZSAiSW1hZ2VCaXRtYXBPcHRpb25zLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05MCw2ICs5Miw4IEBAIFdvcmtlckdsb2Jh
bFNjb3BlOjp+V29ya2VyR2xvYmFsU2NvcGUoKQogICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGZy
b20gdGhlIGNvbnRleHRzIG1hcCB2ZXJ5IGVhcmx5IGluIHRoZSBkZXN0cnVjdG9yIHNvIHRoYXQg
Y2FsbGluZyBwb3N0VGFzaygpIG9uIHRoaXMgV29ya2VyR2xvYmFsU2NvcGUgZnJvbSBhbm90aGVy
IHRocmVhZCBpcyBzYWZlLgogICAgIHJlbW92ZUZyb21Db250ZXh0c01hcCgpOwogCisgICAgaWYg
KG1fY3NzRm9udFNlbGVjdG9yKQorICAgICAgICBtX2Nzc0ZvbnRTZWxlY3Rvci0+c3RvcExvYWRp
bmdBbmRDbGVhckZvbnRzKCk7CiAgICAgbV9wZXJmb3JtYW5jZSA9IG51bGxwdHI7CiAgICAgbV9j
cnlwdG8gPSBudWxscHRyOwogCkBAIC00NzgsNiArNDgyLDIwIEBAIENTU1ZhbHVlUG9vbCYgV29y
a2VyR2xvYmFsU2NvcGU6OmNzc1ZhbHVlUG9vbCgpCiAgICAgcmV0dXJuICptX2Nzc1ZhbHVlUG9v
bDsKIH0KIAorQ1NTRm9udFNlbGVjdG9yKiBXb3JrZXJHbG9iYWxTY29wZTo6Y3NzRm9udFNlbGVj
dG9yKCkKK3sKKyAgICBpZiAoIW1fY3NzRm9udFNlbGVjdG9yKQorICAgICAgICBtX2Nzc0ZvbnRT
ZWxlY3RvciA9IENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKCp0aGlzKTsKKyAgICByZXR1cm4gbV9j
c3NGb250U2VsZWN0b3IuZ2V0KCk7Cit9CisKK0ZvbnRDYWNoZSYgV29ya2VyR2xvYmFsU2NvcGU6
OmZvbnRDYWNoZSgpCit7CisgICAgaWYgKCFtX2ZvbnRDYWNoZSkKKyAgICAgICAgbV9mb250Q2Fj
aGUgPSBGb250Q2FjaGU6OmNyZWF0ZSgpOworICAgIHJldHVybiAqbV9mb250Q2FjaGU7Cit9CisK
IFJlZmVycmVyUG9saWN5IFdvcmtlckdsb2JhbFNjb3BlOjpyZWZlcnJlclBvbGljeSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcmVmZXJyZXJQb2xpY3k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXggMTEwMjU4ZGRmYzhlYjFkNDViMzBjMDJkZjJjOWFk
N2M4YzRiYmQ0NC4uYmYzZjY4NTRhMThlNGY3YjhlMGZhOGM1MDEzNmI5YTc2Y2EwNTE0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtNDIsNiArNDIs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNs
YXNzIENTU1ZhbHVlUG9vbDsKIGNsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVh
ZGVyczsKIGNsYXNzIENyeXB0bzsKQEAgLTExNiw2ICsxMTcsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjcmVhdGVJbWFnZUJpdG1hcChJbWFnZUJpdG1hcDo6U291cmNlJiYsIGludCBzeCwgaW50IHN5
LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXBPcHRpb25zJiYsIEltYWdlQml0bWFwOjpQcm9t
aXNlJiYpOwogCiAgICAgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2woKTsKKyAgICBDU1NGb250
U2VsZWN0b3IqIGNzc0ZvbnRTZWxlY3RvcigpIGZpbmFsOworICAgIEZvbnRDYWNoZSYgZm9udENh
Y2hlKCkgZmluYWw7CiAKICAgICBSZWZlcnJlclBvbGljeSByZWZlcnJlclBvbGljeSgpIGNvbnN0
IGZpbmFsOwogCkBAIC0xODAsNiArMTgzLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2Vy
U1dDbGllbnRDb25uZWN0aW9uPiBtX3N3Q2xpZW50Q29ubmVjdGlvbjsKICNlbmRpZgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDU1NWYWx1ZVBvb2w+IG1fY3NzVmFsdWVQb29sOworICAgIFJlZlB0cjxD
U1NGb250U2VsZWN0b3I+IG1fY3NzRm9udFNlbGVjdG9yOworICAgIFJlZlB0cjxGb250Q2FjaGU+
IG1fZm9udENhY2hlOwogICAgIFJlZmVycmVyUG9saWN5IG1fcmVmZXJyZXJQb2xpY3k7CiAgICAg
U2V0dGluZ3M6OlZhbHVlcyBtX3NldHRpbmdzVmFsdWVzOwogICAgIFdvcmtlclR5cGUgbV93b3Jr
ZXJUeXBlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGI0NDYxZjkwMWI5NjRiMjdlOWI0MzViYTMzOWUzZjdiYmEzZmYyODgu
LjBhMzVmZmMyOGZiMTVkYTg4MzIwYjkyMjBkMTIwNzZhNTFmOWIzNGQgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMS0wMy0zMSAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IHRleHQgcmVuZGVyaW5nIG9uIE9mZnNjcmVlbkNhbnZhcyBpbiBhIFdv
cmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAy
NzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRqdXN0
IGV4cGVjdGF0aW9ucyBmb3IgbWFudWFsIE9mZnNjcmVlbkNhbnZhcyB3b3JrZXIgdGV4dCB0ZXN0
LgorCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTA0
LTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBt
aXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4gSFRNTE1lZGlhRWxlbWVudCBtZXRob2RzLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5kZXggNjQzNzVhZjg2OGNjYWIyOWI0YmM1N2M5NjA0
MjM3NDA1ZGM0NzkzYS4uNmI0M2I2ZjY4NTJjMGZlNGRkNDlmODE5NWFmMjVmODAwN2QyOTEyZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDMt
MzEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0
ZXh0IHJlbmRlcmluZyBvbiBPZmZzY3JlZW5DYW52YXMgaW4gYSBXb3JrZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjc5MworCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkanVzdCB0ZXN0IGV4cGVjdGF0aW9u
cy4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4v
dGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuYmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4
dC5mb250LnBhcnNlLmNvbXBsZXgud29ya2VyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBh
cnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLnRpbnku
d29ya2VyLWV4cGVjdGVkLnR4dDoKKwogMjAyMS0wMy0zMSAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBJbXBvcnQgV1BUIHRlc3QgbW9k
aWZpZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvcHVsbC8y
ODMxNQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuYmFzaWMu
d29ya2VyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmJh
c2ljLndvcmtlci1leHBlY3RlZC50eHQKaW5kZXggMDg0ZWZlNDZlZGY5YTZmZTllYTg4ODM0MmFh
YWU2MzZhMzNmZDQzMi4uYTE3ZWVmNTA5MmI3ZDAzODI3YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9o
dG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuYmFzaWMud29ya2Vy
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5iYXNp
Yy53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0xLDMgKzEsMyBAQAogCi1GQUlMIDJkIGFzc2VydF9l
cXVhbHM6IGN0eC5mb250ID09PSAnMjBweCBzZXJpZicgKGdvdCAxMHB4IHNhbnMtc2VyaWZbc3Ry
aW5nXSwgZXhwZWN0ZWQgMjBweCBzZXJpZltzdHJpbmddKSBleHBlY3RlZCAiMjBweCBzZXJpZiIg
YnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgorUEFTUyAyZAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVl
bi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtlci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29m
ZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5jb21wbGV4Lndvcmtlci1leHBlY3RlZC50
eHQKaW5kZXggMWY0ZjBlZjk4Yjk3MmRjMzZiZTA1YjczZTNmMzMzNjk4MTk0ZWNkYi4uYTE3ZWVm
NTA5MmI3ZDAzODI3YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4v
dGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29tcGxleC53b3JrZXItZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMv
b2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmNvbXBsZXgud29ya2VyLWV4cGVjdGVk
LnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJTCAyZCBhc3NlcnRfZXF1YWxzOiBjdHguZm9udCA9
PT0gJ2l0YWxpYyBzbWFsbC1jYXBzIDEycHggIlVua25vd24gRm9udCIsIHNhbnMtc2VyaWYnIChn
b3QgMTBweCBzYW5zLXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIGl0YWxpYyBzbWFsbC1jYXBzIDEy
cHggIlVua25vd24gRm9udCIsIHNhbnMtc2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIml0YWxpYyBz
bWFsbC1jYXBzIDEycHggXCJVbmtub3duIEZvbnRcIiwgc2Fucy1zZXJpZiIgYnV0IGdvdCAiMTBw
eCBzYW5zLXNlcmlmIgorUEFTUyAyZAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRl
eHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0
LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtlci1leHBlY3RlZC50eHQKaW5kZXggMDg0
ZWZlNDZlZGY5YTZmZTllYTg4ODM0MmFhYWU2MzZhMzNmZDQzMi4uYTE3ZWVmNTA5MmI3ZDAzODI3
YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0
LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3Rl
eHQvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVkLnR4dApAQCAtMSwz
ICsxLDMgQEAKIAotRkFJTCAyZCBhc3NlcnRfZXF1YWxzOiBjdHguZm9udCA9PT0gJzIwcHggc2Vy
aWYnIChnb3QgMTBweCBzYW5zLXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIDIwcHggc2VyaWZbc3Ry
aW5nXSkgZXhwZWN0ZWQgIjIwcHggc2VyaWYiIGJ1dCBnb3QgIjEwcHggc2Fucy1zZXJpZiIKK1BB
U1MgMmQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UudGlu
eS53b3JrZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2Uu
dGlueS53b3JrZXItZXhwZWN0ZWQudHh0CmluZGV4IDNmMmUzY2I4NWJmMjhiMWYyZTFjZGZlMzU5
NjY0ZmJjNjE5YWNjNjEuLmExN2VlZjUwOTJiN2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJlMjBkYzIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLnRpbnkud29ya2Vy
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS50aW55
Lndvcmtlci1leHBlY3RlZC50eHQKQEAgLTEsMyArMSwzIEBACiAKLUZBSUwgMmQgYXNzZXJ0X2Vx
dWFsczogY3R4LmZvbnQgPT09ICcxcHggc2Fucy1zZXJpZicgKGdvdCAxMHB4IHNhbnMtc2VyaWZb
c3RyaW5nXSwgZXhwZWN0ZWQgMXB4IHNhbnMtc2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIjFweCBz
YW5zLXNlcmlmIiBidXQgZ290ICIxMHB4IHNhbnMtc2VyaWYiCitQQVNTIDJkCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA3YzExN2RiZjE1NWY2Njgx
MmFjOTUzOTQyMDhlZDVkNjZjODgxMWIwLi41OWFmYzM3Mzc0ODA4N2Y3NDVlMDYxMWMyMDE3Yzg4
MTFhNmZmZjk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25z
CkBAIC02NTQsNyArNjU0LDYgQEAgd2Via2l0Lm9yZy9iLzIwMzE0NiBodHRwL3dwdC9vZmZzY3Jl
ZW4tY2FudmFzIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjAzMTQ2IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuIFsgUGFzcyBdCiB3ZWJraXQub3Jn
L2IvMjA2MDU1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zm
c2NyZWVuL2RyYXdpbmctaW1hZ2VzLXRvLXRoZS1jYW52YXMvMmQuZHJhd0ltYWdlLnN2Zy53b3Jr
ZXIuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzIwNjA1NSBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi9kcmF3aW5nLWltYWdlcy10by10aGUt
Y2FudmFzLzJkLmRyYXdJbWFnZS56ZXJvc291cmNlLmltYWdlLndvcmtlci5odG1sIFsgU2tpcCBd
Ci13ZWJraXQub3JnL2IvMjIzNjcxIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jYW52YXMvb2Zmc2NyZWVuL21hbnVhbC9kcmF3LWdlbmVyaWMtZmFtaWx5LzJkLnRleHQuZHJh
dy5nZW5lcmljLmZhbWlseS53Lmh0bWwgWyBGYWlsdXJlIF0KIAogIyBDb25zb2xlIGxvZyBsaW5l
cyBtYXkgYXBwZWFyIGluIGEgZGlmZmVyZW50IG9yZGVyIHNvIHdlIHNpbGVuY2UgdGhlbS4KIGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL2NvbnZl
cnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMuY29udmVydC50by5ibG9iLncuaHRtbCBbIER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>425011</attachid>
            <date>2021-04-02 05:37:56 -0700</date>
            <delta_ts>2021-04-02 07:06:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202793-20210402133754.patch</filename>
            <type>text/plain</type>
            <size>57508</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc1MzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzkyYWQwYTg2ODdmZjZk
YmZjODViNWE2MTlkMjIzNWNlOTQ1ODgwMC4uZGZhYmFhZTgzOWQ5ZTRiZTlhNDc2MDBlZGQ3N2Jl
YWRiM2YzM2ZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDIxLTAzLTMxICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGV4dCByZW5k
ZXJpbmcgb24gT2Zmc2NyZWVuQ2FudmFzIGluIGEgV29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDI3OTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgYSBDU1NGb250U2VsZWN0b3IgYW5kIEZvbnRD
YWNoZSB0byBXb3JrZXJHbG9iYWxTY29wZSBhbmQgdmlhCisgICAgICAgIGludGVyZmFjZSBjaGFu
Z2VzIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgYW5kIEZvbnRTZWxlY3RvciwgdXNlIHRoZW0K
KyAgICAgICAgYXMgYXBwcm9wcmlhdGUgYWZ0ZXIgZW5hYmxpbmcgdGV4dCBmdW5jdGlvbnMgb24g
V29ya2VyIHRocmVhZHMgd2l0aAorICAgICAgICBPZmZzY3JlZW5DYW52YXMuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCByZWJhc2VsaW5lZCBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGNz
cy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9y
OjpDU1NGb250U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bV92ZXJzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmZvbnRSYW5nZXNGb3JGYW1pbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvbnRBdCk6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUluZGV4KToKKyAgICAgICAgKiBjc3MvcGFy
c2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmZvbnRDYWNoZSk6CisgICAgICAgICogZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmNzc0ZvbnRTZWxlY3Rvcik6CisgICAgICAgICogZG9tL21ha2VfbmFtZXMu
cGw6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYW5E
cmF3VGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlIYXNoOjpoYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlIYXNoOjplcXVhbCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250RGF0YUNhY2hlS2V5VHJhaXRzOjplbXB0eVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnREYXRhQ2FjaGVLZXlUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YUNhY2hlS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FjaGU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OkZvbnRDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldENhY2hlZEZvbnRQ
bGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250Rm9yUGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjp2ZXJ0aWNhbERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250Q291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmludmFsaWRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250Q2FjaGVGYWxsYmFja1RvU2lu
Z2xldG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6aXNDdXJyZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjp1cGRhdGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFsaXpl
TmV4dEZhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlRm9udHM6OnJlYWxp
emVGYWxsYmFja1Jhbmdlc0F0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250U2Vs
ZWN0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZh
bWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJD
dXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRm9udEZhbWlseSk6CisgICAgICAgICogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6dXNlRml4ZWREZWZhdWx0U2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcpOgorICAgICAgICAqIHN0eWxl
L1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaDoKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2Jh
bFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlOjp+V29ya2Vy
R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyR2xvYmFsU2NvcGU6OmNzc0Zv
bnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJHbG9iYWxTY29wZTo6Zm9udENh
Y2hlKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmg6CisKIDIwMjEtMDQt
MDEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2UgRm9udENh
Y2hlIGNvbnN0cnVjdGFibGUgYW5kIHNhZmUgdG8gdXNlIG9mZiB0aGUgbWFpbiB0aHJlYWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMzhlZmI2NjY4ZDA4ODhlMDEx
YmMwZWYwYWU4MzhiNDUwNTVhM2ExZS4uYzExNTc4Y2ZjNTA0MTJjYmE2YzU1MzBmOTRiZThhYTM2
MzQ0NzVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTUyLDcg
KzUyLDYgQEAKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Rm9udEZh
bWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JT
Y29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KQEAgLTY2LDYgKzY1LDcg
QEAgc3RhdGljIHVuc2lnbmVkIGZvbnRTZWxlY3RvcklkOwogQ1NTRm9udFNlbGVjdG9yOjpDU1NG
b250U2VsZWN0b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICA6IEFjdGl2
ZURPTU9iamVjdCgmY29udGV4dCkKICAgICAsIG1fY29udGV4dChtYWtlV2Vha1B0cihjb250ZXh0
KSkKKyAgICAsIG1fZm9udENhY2hlKG1ha2VSZWYoY29udGV4dC5mb250Q2FjaGUoKSkpCiAgICAg
LCBtX2Nzc0ZvbnRGYWNlU2V0KENTU0ZvbnRGYWNlU2V0OjpjcmVhdGUodGhpcykpCiAgICAgLCBt
X2ZvbnRNb2RpZmllZE9ic2VydmVyKFt0aGlzXSB7IGZvbnRNb2RpZmllZCgpOyB9KQogICAgICwg
bV9mb250TG9hZGluZ1RpbWVyKCp0aGlzLCAmQ1NTRm9udFNlbGVjdG9yOjpmb250TG9hZGluZ1Rp
bWVyRmlyZWQpCkBAIC04Miw3ICs4Miw3IEBAIENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVj
dG9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgICAgICAgICBtX2ZvbnRG
YW1pbHlOYW1lcy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5TmFtZSk7CiAgICAgfQogCi0gICAgRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5hZGRDbGllbnQoKnRoaXMpOworICAgIG1fZm9udENhY2hlLT5h
ZGRDbGllbnQoKnRoaXMpOwogICAgIG1fY3NzRm9udEZhY2VTZXQtPmFkZEZvbnRNb2RpZmllZE9i
c2VydmVyKG1fZm9udE1vZGlmaWVkT2JzZXJ2ZXIpOwogICAgIExPRyhGb250cywgIkNTU0ZvbnRT
ZWxlY3RvciAlcCBjdG9yIiwgdGhpcyk7CiAKQEAgLTk0LDcgKzk0LDcgQEAgQ1NTRm9udFNlbGVj
dG9yOjp+Q1NTRm9udFNlbGVjdG9yKCkKICAgICBMT0coRm9udHMsICJDU1NGb250U2VsZWN0b3Ig
JXAgZHRvciIsIHRoaXMpOwogCiAgICAgc3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCk7Ci0gICAg
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIG1fZm9udENh
Y2hlLT5yZW1vdmVDbGllbnQoKnRoaXMpOwogfQogCiBGb250RmFjZVNldCogQ1NTRm9udFNlbGVj
dG9yOjpmb250RmFjZVNldElmRXhpc3RzKCkKQEAgLTMwOCw3ICszMDgsNyBAQCBGb250UmFuZ2Vz
IENTU0ZvbnRTZWxlY3Rvcjo6Zm9udFJhbmdlc0ZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcgogICAgIEFTU0VSVCghbV9idWlsZElzVW5kZXJ3YXkgfHwgbV9jb21wdXRp
bmdSb290U3R5bGVGb250Q291bnQpOwogCiAgICAgLy8gRklYTUU6IFRoZSBzcGVjIChhbmQgRmly
ZWZveCkgc2F5cyB1c2VyIHNwZWNpZmllZCBnZW5lcmljIGZhbWlsaWVzIChzYW5zLXNlcmlmIGV0
Yy4pIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgdGhlIEBmb250LWZhY2UgbG9va3VwIHRvby4K
LSAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1lID09IG1fZm9u
dEZhbWlseU5hbWVzW3N0YXRpY19jYXN0PGludD4oRmFtaWx5TmFtZXNJbmRleDo6U3RhbmRhcmRG
YW1pbHkpXTsKKyAgICBib29sIHJlc29sdmVHZW5lcmljRmFtaWx5Rmlyc3QgPSBmYW1pbHlOYW1l
ID09IG1fZm9udEZhbWlseU5hbWVzLmF0KEZhbWlseU5hbWVzSW5kZXg6OlN0YW5kYXJkRmFtaWx5
KTsKIAogICAgIEF0b21TdHJpbmcgZmFtaWx5Rm9yTG9va3VwID0gZmFtaWx5TmFtZTsKICAgICBP
cHRpb25hbDxGb250RGVzY3JpcHRpb24+IG92ZXJyaWRlRm9udERlc2NyaXB0aW9uOwpAQCAtMzMw
LDcgKzMzMCw3IEBAIEZvbnRSYW5nZXMgQ1NTRm9udFNlbGVjdG9yOjpmb250UmFuZ2VzRm9yRmFt
aWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyCiAKICAgICBpZiAoIXJlc29sdmVH
ZW5lcmljRmFtaWx5Rmlyc3QpCiAgICAgICAgIHJlc29sdmVBbmRBc3NpZ25HZW5lcmljRmFtaWx5
KCk7Ci0gICAgYXV0byBmb250ID0gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5
KCpmb250RGVzY3JpcHRpb25Gb3JMb29rdXAsIGZhbWlseUZvckxvb2t1cCk7CisgICAgYXV0byBm
b250ID0gbV9mb250Q2FjaGUtPmZvbnRGb3JGYW1pbHkoKmZvbnREZXNjcmlwdGlvbkZvckxvb2t1
cCwgZmFtaWx5Rm9yTG9va3VwKTsKICAgICBpZiAoZG9jdW1lbnQgJiYgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQogICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nRm9udExvYWQoKmRvY3VtZW50
LCBmYW1pbHlGb3JMb29rdXAuc3RyaW5nKCksICEhZm9udCk7CiAgICAgcmV0dXJuIEZvbnRSYW5n
ZXMgeyBXVEZNb3ZlKGZvbnQpIH07CkBAIC00NDIsNyArNDQyLDcgQEAgUmVmUHRyPEZvbnQ+IENT
U0ZvbnRTZWxlY3Rvcjo6ZmFsbGJhY2tGb250QXQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHQKICAgICBpZiAoIW1fY29udGV4dC0+c2V0dGluZ3NWYWx1ZXMoKS5mb250RmFsbGJh
Y2tQcmVmZXJzUGljdG9ncmFwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8m
IHBpY3RvZ3JhcGhGb250RmFtaWx5ID0gbV9jb250ZXh0LT5zZXR0aW5nc1ZhbHVlcygpLmZvbnRH
ZW5lcmljRmFtaWxpZXMucGljdG9ncmFwaEZvbnRGYW1pbHkoKTsKLSAgICBhdXRvIGZvbnQgPSBG
b250Q2FjaGU6OnNpbmdsZXRvbigpLmZvbnRGb3JGYW1pbHkoZm9udERlc2NyaXB0aW9uLCBwaWN0
b2dyYXBoRm9udEZhbWlseSk7CisgICAgYXV0byBmb250ID0gbV9mb250Q2FjaGUtPmZvbnRGb3JG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCBwaWN0b2dyYXBoRm9udEZhbWlseSk7CiAgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSAmJiBpczxEb2N1bWVudD4obV9jb250ZXh0LmdldCgpKSkKICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0ZvbnRMb2FkKGRvd25jYXN0PERvY3VtZW50Pigq
bV9jb250ZXh0KSwgcGljdG9ncmFwaEZvbnRGYW1pbHksICEhZm9udCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuaAppbmRleCBhOWZhMjhmZjdhNTQxZjQ4ODY4YTVjNTUwMGI4ZDlk
M2M0YWZhMDQyLi5lNGFmZjI2YWFhZmYwOGY4Njg2N2UwNDU1OWZhNDFiNGJiN2U4ZjM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTcw
LDYgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoU3R5bGVSdWxl
Rm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUp
OwogCisgICAgRm9udENhY2hlJiBmb250Q2FjaGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2Zv
bnRDYWNoZS5nZXQoKTsgfQogICAgIHZvaWQgZm9udENhY2hlSW52YWxpZGF0ZWQoKSBmaW5hbDsK
IAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwpAQCAtMTIzLDYgKzEyNSw3IEBAIHByaXZhdGU6
CiAgICAgVmVjdG9yPFBlbmRpbmdGb250RmFjZVJ1bGU+IG1fc3RhZ2luZ0FyZWE7CiAKICAgICBX
ZWFrUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICBSZWY8Rm9udENh
Y2hlPiBtX2ZvbnRDYWNoZTsKICAgICBSZWZQdHI8Rm9udEZhY2VTZXQ+IG1fZm9udEZhY2VTZXQ7
CiAgICAgUmVmPENTU0ZvbnRGYWNlU2V0PiBtX2Nzc0ZvbnRGYWNlU2V0OwogICAgIEhhc2hTZXQ8
Rm9udFNlbGVjdG9yQ2xpZW50Kj4gbV9jbGllbnRzOwpAQCAtMTQzLDcgKzE0Niw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2J1aWxkSXNVbmRlcndheSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lz
U3RvcHBlZCB7IGZhbHNlIH07CiAKLSAgICBXVEY6OlZlY3RvcjxBdG9tU3RyaW5nPiBtX2ZvbnRG
YW1pbHlOYW1lczsKKyAgICBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzTGlzdDxB
dG9tU3RyaW5nPiBtX2ZvbnRGYW1pbHlOYW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcAppbmRleCBmY2Q0YjMwYmVhZGU1NzFmZWIzODhmMTRhMjU4MGIxMzVmMTdk
NTMyLi5kYWRiNmE3YzgwODk4YjAxNDllMjg5YjgxZjFiNWEyZGQxZDVkMGU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTdHlsZUNvbG9yLmgiCisjaW5jbHVkZSAi
V2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGVOdW1iZXJzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMwNjEsNyArMzA2Miw3
IEBAIE9wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29ya2VyU2FmZShDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotY29u
c3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEIGlk
ZW50KQorY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHkoQ1NTVmFsdWVJRCBpZGVu
dCkKIHsKICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgpAQCAt
MzA4Myw2ICszMDg0LDI5IEBAIGNvbnN0IEF0b21TdHJpbmcmIGdlbmVyaWNGb250RmFtaWx5RnJv
bVZhbHVlSUQoQ1NTVmFsdWVJRCBpZGVudCkKICAgICB9CiB9CiAKK1dlYktpdEZvbnRGYW1pbHlO
YW1lczo6RmFtaWx5TmFtZXNJbmRleCBnZW5lcmljRm9udEZhbWlseUluZGV4KENTU1ZhbHVlSUQg
aWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoK
KyAgICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6
U2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJu
IFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6U2Fuc1NlcmlmRmFtaWx5
OworICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZh
bWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpDdXJzaXZlRmFtaWx5OworICAgIGNhc2UgQ1NT
VmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1p
bHlOYW1lc0luZGV4OjpGYW50YXN5RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6
CisgICAgICAgIHJldHVybiBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXg6
Ok1vbm9zcGFjZUZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAg
ICAgICAgcmV0dXJuIFdlYktpdEZvbnRGYW1pbHlOYW1lczo6RmFtaWx5TmFtZXNJbmRleDo6UGlj
dG9ncmFwaEZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlU3lzdGVtVWk6CisgICAgICAgIHJldHVy
biBXZWJLaXRGb250RmFtaWx5TmFtZXM6OkZhbWlseU5hbWVzSW5kZXg6OlN5c3RlbVVpRmFtaWx5
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4OjpTdGFuZGFyZEZh
bWlseTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVy
cwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAppbmRleCA5MTNjMTA4ZjNhYzk0M2Y0
YjBhNTQ5MmI0ZWM1ZDE5YWUwZGE2MzRlLi44MmY0NDJmYjcwMmMzNjAxOGZkNmEwNWYzZDNmYTQ4
NmE2OTY5MDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmgKQEAgLTQyLDYgKzQyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1lcyB7CitlbnVtIGNsYXNzIEZh
bWlseU5hbWVzSW5kZXg7Cit9CisKIC8vIFdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBzdWNjZXNz
ZnVsLCB0aGV5IHdpbGwgY29uc3VtZSBhbGwgdGhlIHJlbGV2YW50CiAvLyB0b2tlbnMgZnJvbSB0
aGUgcmFuZ2UgYW5kIGFsc28gY29uc3VtZSBhbnkgd2hpdGVzcGFjZSB3aGljaCBmb2xsb3dzLiBX
aGVuCiAvLyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgd2Un
cmUgbG9va2luZyBmb3IsIHRoZSByYW5nZQpAQCAtMTY5LDcgKzE3Myw4IEBAIE9wdGlvbmFsPFZl
Y3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOwogT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCk7CiBPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CiBPcHRpb25hbDxGb250UmF3
PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUpOwotY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NW
YWx1ZUlEKTsKK2NvbnN0IEF0b21TdHJpbmcmIGdlbmVyaWNGb250RmFtaWx5KENTU1ZhbHVlSUQp
OworV2ViS2l0Rm9udEZhbWlseU5hbWVzOjpGYW1pbHlOYW1lc0luZGV4IGdlbmVyaWNGb250RmFt
aWx5SW5kZXgoQ1NTVmFsdWVJRCk7CiAKIGJvb2wgaXNGb250U3R5bGVBbmdsZUluUmFuZ2UoZG91
YmxlIGFuZ2xlSW5EZWdyZWVzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCBjNGZlMjI1ODkw
YWI0OGZkNGFlMzEwOWQ5OGU0MzZlMWMzZWM0OGJkLi4xZjlhODNiZmQyNjRhNGUxNDBlM2MxZjEz
OGJmYWM0ZjI1Nzk0MjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMTY0NSw2ICsxNjQ1LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVJlbmRlclRyZWUoKTsKICAgICB2b2lkIGRldGFj
aFBhcnNlcigpOwogCisgICAgLy8gU2NyaXB0RXhlY3V0aW9uQ29udGV4dAorICAgIENTU0ZvbnRT
ZWxlY3RvciogY3NzRm9udFNlbGVjdG9yKCkgZmluYWwgeyByZXR1cm4gbV9mb250U2VsZWN0b3Iu
cHRyKCk7IH0KKwogICAgIC8vIEZvbnRTZWxlY3RvckNsaWVudAogICAgIHZvaWQgZm9udHNOZWVk
VXBkYXRlKEZvbnRTZWxlY3RvciYpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKaW5kZXggZDI3MTdiZjc4MzFmNGZiNWQ3OGYwNTBjOTRi
NGFhNjcxMmNiNjlkOC4uYzc3MzgzMWI4OGMyYjAyYjA1YmMyZmZiNmYwNTNlOGRhZjFhNWY3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcApAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlQ29udGV4dC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2NvcGUuaCIKQEAgLTIyNiw2ICsyMjcs
MTEgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaWRMb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnN0IFVSTCYpCiB7CiB9CiAKK0ZvbnRDYWNoZSYgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6Zm9udENhY2hlKCkKK3sKKyAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24oKTsK
K30KKwogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpmb3JFYWNoQWN0aXZlRE9NT2JqZWN0
KGNvbnN0IEZ1bmN0aW9uPFNob3VsZENvbnRpbnVlKEFjdGl2ZURPTU9iamVjdCYpPiYgYXBwbHkp
IGNvbnN0CiB7CiAgICAgLy8gSXQgaXMgbm90IGFsbG93ZWQgdG8gcnVuIGFyYml0cmFyeSBzY3Jp
cHQgb3IgY29uc3RydWN0IG5ldyBBY3RpdmVET01PYmplY3RzIHdoaWxlIHdlIGFyZSBpdGVyYXRp
bmcgb3ZlciBBY3RpdmVET01PYmplY3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgKaW5kZXggMWQzNTI0MWZhZDgyYWQxYTY0YTkxMmQ0YjA2MjdhNjhmOTFi
ZDhlMi4uZThiZjBlZmNiNmJiYTEyNjBmMGE5MGI3OTc1NDM4MTZiMGRmMWJiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCkBAIC02MCwxMCArNjAsMTIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFdmVudExvb3A7CiBjbGFzcyBDYWNoZWRT
Y3JpcHQ7CitjbGFzcyBDU1NGb250U2VsZWN0b3I7CiBjbGFzcyBEYXRhYmFzZUNvbnRleHQ7CiBj
bGFzcyBFdmVudFF1ZXVlOwogY2xhc3MgRXZlbnRMb29wVGFza0dyb3VwOwogY2xhc3MgRXZlbnRU
YXJnZXQ7CitjbGFzcyBGb250Q2FjaGU7CiBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFB1Ymxp
Y1VSTE1hbmFnZXI7CiBjbGFzcyBSZWplY3RlZFByb21pc2VUcmFja2VyOwpAQCAtMTYxLDYgKzE2
Myw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRMb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KGNvbnN0IFVSTCYpOwogCisgICAgdmlydHVhbCBGb250Q2FjaGUmIGZvbnRDYWNoZSgp
OworICAgIHZpcnR1YWwgQ1NTRm9udFNlbGVjdG9yKiBjc3NGb250U2VsZWN0b3IoKSB7IHJldHVy
biBudWxscHRyOyB9CisKICAgICB2b2lkIHJlZigpIHsgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAppbmRleCA2NDE0ZTFlNmFiNTU2MGM4YjAzMTlj
ZTI1MmM2YzY2YWNiNzkzZjViLi43ODAwODI5ZGY2YjcxYWM0OTBiN2IzMjMyNTdkMTcwOTUzYzM2
OTg5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbApAQCAtMTA0LDE1ICsxMDQsMjQgQEAgaWYg
KGxlbmd0aCgkZm9udE5hbWVzSW4pKSB7CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5o
PgogRU5ECiAKLSAgICBwcmludCBGICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPFZlY3Rvcjxj
b25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4g
ZmFtaWx5TmFtZXNEYXRhO1xuIjsKLSAgICBwcmludCBGICJleHRlcm4gTWFpblRocmVhZExhenlO
ZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFy
YW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsKLSAgICBwcmludE1hY3JvcygkRiwgImV4
dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IiwgIiIs
IFwlcGFyYW1ldGVycyk7Ci0gICAgcHJpbnQgRiAiXG4iOwogICAgIHByaW50IEYgImVudW0gY2xh
c3MgRmFtaWx5TmFtZXNJbmRleCB7XG4iOwogICAgIGZvciBteSAkbmFtZSAoc29ydCBrZXlzICVw
YXJhbWV0ZXJzKSB7CiAgICAgICAgIHByaW50IEYgIiAgICAiLCB1Y2ZpcnN0KCR7bmFtZX0pLCAi
LFxuIjsKICAgICB9CiAgICAgcHJpbnQgRiAifTtcblxuIjsKKworICAgIHByaW50IEYgInRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+XG4iOworICAgIHByaW50
IEYgImNsYXNzIEZhbWlseU5hbWVzTGlzdCA6IHB1YmxpYyBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+IHtcbiI7CisgICAgcHJpbnQgRiAicHVibGljOlxuIjsKKyAgICBwcmludCBGICIgICAgVCYg
YXQoRmFtaWx5TmFtZXNJbmRleCBpKVxuIjsKKyAgICBwcmludCBGICIgICAge1xuIjsKKyAgICBw
cmludCBGICIgICAgICAgIHJldHVybiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjphdChzdGF0
aWNfY2FzdDxzaXplX3Q+KGkpKTtcbiI7CisgICAgcHJpbnQgRiAiICAgIH1cbiI7CisgICAgcHJp
bnQgRiAifTtcblxuIjsKKyAgICBwcmludCBGICJleHRlcm4gTGF6eU5ldmVyRGVzdHJveWVkPEZh
bWlseU5hbWVzTGlzdDxjb25zdCBTdGF0aWNTdHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBh
cmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXNEYXRhO1xuIjsKKyAgICBwcmludCBGICJleHRlcm4g
TWFpblRocmVhZExhenlOZXZlckRlc3Ryb3llZDxGYW1pbHlOYW1lc0xpc3Q8QXRvbVN0cmluZ0lt
cGwqLCAiLCBzY2FsYXIoa2V5cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsK
KyAgICBwcmludE1hY3JvcygkRiwgImV4dGVybiBNYWluVGhyZWFkTGF6eU5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21TdHJpbmc+IiwgIiIsIFwlcGFyYW1ldGVycyk7CisgICAgcHJpbnQgRiAiXG4i
OwogICAgIHByaW50IEYgIiNlbmRpZlxuXG4iOwogCiAgICAgcHJpbnRJbml0KCRGLCAxKTsKQEAg
LTEyNiw4ICsxMzUsOCBAQCBFTkQKIAogICAgIHByaW50IEYgU3RhdGljU3RyaW5nOjpHZW5lcmF0
ZVN0cmluZ3MoXCVwYXJhbWV0ZXJzKTsKIAotICAgIHByaW50IEYgIkxhenlOZXZlckRlc3Ryb3ll
ZDxWZWN0b3I8Y29uc3QgU3RhdGljU3RyaW5nSW1wbCosICIsIHNjYWxhcihrZXlzICVwYXJhbWV0
ZXJzKSwgIj4+IGZhbWlseU5hbWVzRGF0YTtcbiI7Ci0gICAgcHJpbnQgRiAiTWFpblRocmVhZExh
enlOZXZlckRlc3Ryb3llZDxWZWN0b3I8QXRvbVN0cmluZ0ltcGwqLCAiLCBzY2FsYXIoa2V5cyAl
cGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lcztcblxuIjsKKyAgICBwcmludCBGICJMYXp5TmV2
ZXJEZXN0cm95ZWQ8RmFtaWx5TmFtZXNMaXN0PGNvbnN0IFN0YXRpY1N0cmluZ0ltcGwqLCAiLCBz
Y2FsYXIoa2V5cyAlcGFyYW1ldGVycyksICI+PiBmYW1pbHlOYW1lc0RhdGE7XG4iOworICAgIHBy
aW50IEYgIk1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95ZWQ8RmFtaWx5TmFtZXNMaXN0PEF0b21T
dHJpbmdJbXBsKiwgIiwgc2NhbGFyKGtleXMgJXBhcmFtZXRlcnMpLCAiPj4gZmFtaWx5TmFtZXM7
XG5cbiI7CiAKICAgICBwcmludE1hY3JvcygkRiwgIk1haW5UaHJlYWRMYXp5TmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbVN0cmluZz4iLCAiIiwgXCVwYXJhbWV0ZXJzKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAppbmRleCBkOWNhNmNiMzVmNjc2ZjAwOGJlMjYxMGI5NGMwN2JmNDg4MDIyZGU1Li5j
OThlOTEzMmY2NDQ0NjMxYjNjODFlY2IwODU4YjcwOTRhZjUyZjQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcApAQCAtMjM2Niw4ICsyMzY2LDYgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjYW5EcmF3VGV4dChmbG9hdCB4LCBmbG9hdCB5LCBib29sIGZpbGwsIE9wdGkKICAg
ICBpZiAoIWZvbnRQcm94eSgpLT5yZWFsaXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2Vk
U2NvcGU7Ci0KICAgICBhdXRvKiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IGYxNzg4NzRhZmE2Njc5ZjkwMWE1ZWNlZTMyYmI0ZmY1ZGQzZjI5MzguLjhhZTQ5ODQyYjkwYThi
ZmZhZDE2ZDczOTM3YTUyMWQzMWFmYTU5MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcApAQCAtMzgsOCArMzgsOCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9y
Rm9udFJhdy5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KQEAgLTYzLDggKzYzLDYgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNvbW1pdCgpCiB2b2lkIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiB7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpjYW52YXNCYXNlKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICgh
aXM8RG9jdW1lbnQ+KGNvbnRleHQpKQotICAgICAgICByZXR1cm47CiAKICAgICBpZiAobmV3Rm9u
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTkwLDExICs4OCwxMCBAQCB2b2lkIE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5l
d0ZvbnQpCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRT
aXplKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6
ZSk7CiAKLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KTsK
LSAgICBhdXRvIGZvbnRDYXNjYWRlID0gU3R5bGU6OnJlc29sdmVGb3JGb250UmF3KCpmb250UmF3
LCBXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbiksIGRvY3VtZW50KTsKLQotICAgIGlmIChmb250Q2Fz
Y2FkZSkKLSAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKGRvY3VtZW50
LmZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOworICAgIGlmIChhdXRvIGZvbnRDYXNjYWRl
ID0gU3R5bGU6OnJlc29sdmVGb3JGb250UmF3KCpmb250UmF3LCBXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbiksIGNvbnRleHQpKSB7CisgICAgICAgIEFTU0VSVChjb250ZXh0LmNzc0ZvbnRTZWxlY3Rv
cigpKTsKKyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKCpjb250ZXh0
LmNzc0ZvbnRTZWxlY3RvcigpLCAqZm9udENhc2NhZGUpOworICAgIH0KIH0KIAogQ2FudmFzRGly
ZWN0aW9uIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlyZWN0aW9uKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCmlu
ZGV4IGZkZmI2ZGE0NjY0NzQxOWUwNjlhODI0ZWJjYjhkNzBlNjhiNjBjY2QuLmVkZjJmZTA0NzNh
ZjNhODYwNjE1MzE3NDM4MzIxYmQ5Y2E5ZTAyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtNDksMjIgKzQ5LDYgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLUZvbnRDYWNoZSYgRm9udENhY2hl
OjpzaW5nbGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGb250Q2FjaGU+IGds
b2JhbEZvbnRDYWNoZTsKLSAgICByZXR1cm4gZ2xvYmFsRm9udENhY2hlOwotfQotCi1Gb250Q2Fj
aGU6OkZvbnRDYWNoZSgpCi0gICAgOiBtX3B1cmdlVGltZXIoKnRoaXMsICZGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKQotICAgICwgbV9mb250UGxhdGZvcm1EYXRhQ2Fj
aGUobWFrZVVuaXF1ZVJlZjxGb250UGxhdGZvcm1EYXRhQ2FjaGU+KCkpCi0gICAgLCBtX2ZvbnRE
YXRhQ2FjaGUobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hlPigpKQotI2lmIEVOQUJMRShPUEVO
VFlQRV9WRVJUSUNBTCkKLSAgICAsIG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlKG1ha2VVbmlxdWVS
ZWY8Rm9udFZlcnRpY2FsRGF0YUNhY2hlPigpKQotI2VuZGlmCi17Ci19Ci0KIHN0cnVjdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtMTI3LDEzICsxMTEsODAgQEAgc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eUhhc2ggewogICAgICAgICByZXR1cm4gYSA9PSBiOwogICAgIH0KIAotICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsK
IAogc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2hUcmFpdHMgOiBwdWJsaWMgU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4gewotICAgIHN0YXRp
YyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworc3RydWN0IEZvbnREYXRh
Q2FjaGVLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgeworICAgICAgICByZXR1cm4gcGxhdGZvcm1EYXRh
Lmhhc2goKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGEgPT0gYjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAorc3RydWN0IEZvbnREYXRhQ2FjaGVL
ZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGE+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRQbGF0Zm9ybURhdGE+IGtleSgwLmYsIGZhbHNlLCBm
YWxzZSk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQorICAgIHsKKyAgICAgICAg
bmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFs
dWUpOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpOworICAgIH0KK307CisKK3VzaW5nIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSA9IEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9u
dFBsYXRmb3JtRGF0YT4sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2hUcmFpdHM+OwordXNpbmcgRm9udERhdGFDYWNoZSA9IEhhc2hNYXA8
Rm9udFBsYXRmb3JtRGF0YSwgUmVmPEZvbnQ+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERh
dGFDYWNoZUtleVRyYWl0cz47CisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQordXNpbmcg
Rm9udFZlcnRpY2FsRGF0YUNhY2hlID0gSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8
T3BlblR5cGVWZXJ0aWNhbERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNo
ZUtleVRyYWl0cz47CisjZW5kaWYKKworc3RydWN0IEZvbnRDYWNoZTo6Rm9udERhdGFDYWNoZXMg
eworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKworICAgIEZvbnREYXRhQ2Fj
aGUgZGF0YTsKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGUgcGxhdGZvcm1EYXRhOworI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBGb250VmVydGljYWxEYXRhQ2FjaGUgdmVydGlj
YWxEYXRhOworI2VuZGlmCit9OworCitSZWY8Rm9udENhY2hlPiBGb250Q2FjaGU6OmNyZWF0ZSgp
Cit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRm9udENhY2hlKCkpOworfQorCitGb250Q2FjaGUmIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkK
K3sKKyAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPEZvbnRDYWNoZT4gZ2xvYmFs
Rm9udENhY2hlOworICAgIHJldHVybiBnbG9iYWxGb250Q2FjaGU7Cit9CisKK0ZvbnRDYWNoZTo6
fkZvbnRDYWNoZSgpID0gZGVmYXVsdDsKKworRm9udENhY2hlOjpGb250Q2FjaGUoKQorICAgIDog
bV9wdXJnZVRpbWVyKCp0aGlzLCAmRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5l
ZWRlZCkKKyAgICAsIG1fZm9udERhdGFDYWNoZXMobWFrZVVuaXF1ZVJlZjxGb250RGF0YUNhY2hl
cz4oKSkKK3sKK30KKwogT3B0aW9uYWw8QVNDSUlMaXRlcmFsPiBGb250Q2FjaGU6OmFsdGVybmF0
ZUZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIGlmIChhdXRvIHBs
YXRmb3JtU3BlY2lmaWNBbHRlcm5hdGUgPSBwbGF0Zm9ybUFsdGVybmF0ZUZhbWlseU5hbWUoZmFt
aWx5TmFtZSkpCkBAIC0xOTcsNyArMjQ4LDcgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8KIAog
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0
aW9uLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZUNhcGFiaWxpdGllcyk7CiAKLSAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5hZGQoa2V5LCBudWxscHRyKTsK
KyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnBsYXRmb3JtRGF0YS5hZGQo
a2V5LCBudWxscHRyKTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0g
YWRkUmVzdWx0Lml0ZXJhdG9yOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAg
ICAgICBpdC0+dmFsdWUgPSBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwg
ZmFtaWx5TmFtZSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VDYXBhYmlsaXRpZXMpOwpAQCAt
MjA5LDggKzI2MCw4IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgICAgICAgICAgICAg
YXV0byogZm9udFBsYXRmb3JtRGF0YUZvckFsdGVybmF0ZU5hbWUgPSBnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgKmFsdGVybmF0ZU5hbWUsIGZvbnRGYWNlRmVhdHVy
ZXMsIGZvbnRGYWNlQ2FwYWJpbGl0aWVzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAvLyBMb29r
dXAgdGhlIGtleSBpbiB0aGUgaGFzaCB0YWJsZSBhZ2FpbiBhcyB0aGUgcHJldmlvdXMgaXRlcmF0
b3IgbWF5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBiZWVuIGludmFsaWRhdGVkIGJ5IHRoZSBy
ZWN1cnNpdmUgY2FsbCB0byBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKCkuCi0gICAgICAgICAg
ICAgICAgaXQgPSBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChpdCAhPSBtX2ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+ZW5kKCkpOworICAg
ICAgICAgICAgICAgIGl0ID0gbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhLmZpbmQoa2V5
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbV9mb250RGF0YUNhY2hlcy0+cGxhdGZv
cm1EYXRhLmVuZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoZm9udFBsYXRmb3JtRGF0YUZvckFs
dGVybmF0ZU5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGl0LT52YWx1ZSA9IG1ha2VVbmlxdWU8
Rm9udFBsYXRmb3JtRGF0YT4oKmZvbnRQbGF0Zm9ybURhdGFGb3JBbHRlcm5hdGVOYW1lKTsKICAg
ICAgICAgICAgIH0KQEAgLTIyMCw0NyArMjcxLDYgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENh
Y2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm8K
ICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1zdHJ1Y3QgRm9udERhdGFDYWNoZUtl
eUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IHBsYXRmb3JtRGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwbGF0Zm9ybURhdGEuaGFzaCgp
OwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYSA9
PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250RGF0YUNhY2hlS2V5VHJhaXRzIDog
V1RGOjpHZW5lcmljSGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhPiB7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIGVtcHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEZvbnRQbGF0Zm9ybURhdGE+IGtleSgwLmYsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAg
IHJldHVybiBrZXk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1
ZShGb250UGxhdGZvcm1EYXRhJiBzbG90KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAm
c2xvdCkgRm9udFBsYXRmb3JtRGF0YShIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAg
ICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
OwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi1SZWZQdHI8T3Bl
blR5cGVWZXJ0aWNhbERhdGE+IEZvbnRDYWNoZTo6dmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKLXsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udFZl
cnRpY2FsRGF0YUNhY2hlLT5lbnN1cmUocGxhdGZvcm1EYXRhLCBbJnBsYXRmb3JtRGF0YV0gewot
ICAgICAgICByZXR1cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0Zm9ybURhdGEp
OwotICAgIH0pOwotICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogY29uc3QgdW5zaWduZWQgY01heEluYWN0
aXZlRm9udERhdGEgPSAxMjA7CiBjb25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0
YSA9IDEwMDsKQEAgLTI4OSw3ICsyOTksNyBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpmb250Rm9y
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZm9udExvY2spOwogI2VuZGlmCiAKLSAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZS0+ZW5zdXJlKHBsYXRmb3JtRGF0YSwgWyZdIHsKKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPmRhdGEuZW5zdXJlKHBsYXRmb3Jt
RGF0YSwgWyZdIHsKICAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEpOwog
ICAgIH0pOwogCkBAIC0zMDUsNyArMzE1LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YUlmTmVlZGVkKCkKIAogICAgIExPRyhGb250cywgIkZvbnRDYWNoZTo6cHVyZ2VJ
bmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQoKSAtIHVuZGVyTWVtb3J5UHJlc3N1cmUgJWQsIGluYWN0
aXZlRm9udERhdGFMaW1pdCAldSIsIHVuZGVyTWVtb3J5UHJlc3N1cmUsIGluYWN0aXZlRm9udERh
dGFMaW1pdCk7CiAKLSAgICBpZiAobV9mb250RGF0YUNhY2hlLT5zaXplKCkgPCBpbmFjdGl2ZUZv
bnREYXRhTGltaXQpCisgICAgaWYgKG1fZm9udERhdGFDYWNoZXMtPmRhdGEuc2l6ZSgpIDwgaW5h
Y3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgaW5hY3Rp
dmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0g
aW5hY3RpdmVGb250RGF0YUxpbWl0KQpAQCAtMzI4LDcgKzMzOCw3IEBAIHZvaWQgRm9udENhY2hl
OjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIAogICAgIHdoaWxl
IChwdXJnZUNvdW50KSB7CiAgICAgICAgIFZlY3RvcjxSZWY8Rm9udD4sIDIwPiBmb250c1RvRGVs
ZXRlOwotICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUtPnZhbHVlcygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgZm9udCA6IG1fZm9udERhdGFDYWNoZXMtPmRhdGEudmFs
dWVzKCkpIHsKICAgICAgICAgICAgIExPRyhGb250cywgIiB0cnlpbmcgdG8gcHVyZ2UgZm9udCAl
cyAoaGFzIG9uZSByZWYgJWQpIiwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpLCBmb250LT5oYXNPbmVSZWYoKSk7CiAgICAgICAgICAgICBpZiAoIWZvbnQt
Pmhhc09uZVJlZigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzQwLDI1ICszNTAs
MjUgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNpZ25lZCBwdXJn
ZUNvdW50KQogICAgICAgICBpZiAoZm9udHNUb0RlbGV0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogZm9udHNUb0RlbGV0ZSkgewotICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hlLT5yZW1vdmUoZm9udC0+cGxh
dGZvcm1EYXRhKCkpOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gbV9mb250RGF0YUNhY2hl
cy0+ZGF0YS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOwogICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwp
Ci0gICAgICAgICAgICBtX2ZvbnRWZXJ0aWNhbERhdGFDYWNoZS0+cmVtb3ZlKGZvbnQtPnBsYXRm
b3JtRGF0YSgpKTsKKyAgICAgICAgICAgIG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2FsRGF0YS5y
ZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9Owog
CiAgICAgVmVjdG9yPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4ga2V5c1RvUmVtb3ZlOwotICAg
IGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZm9udFBsYXRmb3JtRGF0YUNh
Y2hlLT5zaXplKCkpOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2ZvbnRQbGF0Zm9ybURhdGFD
YWNoZS5nZXQoKSkgewotICAgICAgICBpZiAoZW50cnkudmFsdWUgJiYgIW1fZm9udERhdGFDYWNo
ZS0+Y29udGFpbnMoKmVudHJ5LnZhbHVlKSkKKyAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2ZvbnREYXRhQ2FjaGVzLT5wbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8mIGVudHJ5IDogbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhKSB7CisgICAg
ICAgIGlmIChlbnRyeS52YWx1ZSAmJiAhbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5jb250YWlucygq
ZW50cnkudmFsdWUpKQogICAgICAgICAgICAga2V5c1RvUmVtb3ZlLnVuY2hlY2tlZEFwcGVuZChl
bnRyeS5rZXkpOwogICAgIH0KIAogICAgIExPRyhGb250cywgIiByZW1vdmluZyAlbHUga2V5cyIs
IGtleXNUb1JlbW92ZS5zaXplKCkpOwogCiAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzVG9SZW1v
dmUpCi0gICAgICAgIG1fZm9udFBsYXRmb3JtRGF0YUNhY2hlLT5yZW1vdmUoa2V5KTsKKyAgICAg
ICAgbV9mb250RGF0YUNhY2hlcy0+cGxhdGZvcm1EYXRhLnJlbW92ZShrZXkpOwogCiAgICAgcGxh
dGZvcm1QdXJnZUluYWN0aXZlRm9udERhdGEoKTsKIH0KQEAgLTQwMiw2ICs0MTIsMTYgQEAgdm9p
ZCBGb250Q2FjaGU6OmNsZWFyV2lkdGhDYWNoZXMoKQogICAgICAgICB2YWx1ZS0+Zm9udHMuZ2V0
KCkud2lkdGhDYWNoZSgpLmNsZWFyKCk7CiB9CiAKKyNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElD
QUwpCitSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+IEZvbnRDYWNoZTo6dmVydGljYWxEYXRh
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZm9udERhdGFDYWNoZXMtPnZlcnRpY2FsRGF0YS5lbnN1cmUocGxhdGZvcm1EYXRh
LCBbJnBsYXRmb3JtRGF0YV0geworICAgICAgICByZXR1cm4gT3BlblR5cGVWZXJ0aWNhbERhdGE6
OmNyZWF0ZShwbGF0Zm9ybURhdGEpOworICAgIH0pOworICAgIHJldHVybiBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlOworfQorI2VuZGlmCisKIHN0YXRpYyBGb250Q2FzY2FkZUNhY2hlS2V5IG1h
a2VGb250Q2FzY2FkZUNhY2hlS2V5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGRlc2Ny
aXB0aW9uLCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcikKIHsKICAgICBGb250Q2FzY2FkZUNh
Y2hlS2V5IGtleTsKQEAgLTQ1OCw3ICs0NzgsNyBAQCB2b2lkIEZvbnRDYWNoZTo6dXBkYXRlRm9u
dENhc2NhZGUoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBSZWZQdHI8Rm9udFNlbAog
CiBzaXplX3QgRm9udENhY2hlOjpmb250Q291bnQoKQogewotICAgIHJldHVybiBtX2ZvbnREYXRh
Q2FjaGUtPnNpemUoKTsKKyAgICByZXR1cm4gbV9mb250RGF0YUNhY2hlcy0+ZGF0YS5zaXplKCk7
CiB9CiAKIHNpemVfdCBGb250Q2FjaGU6OmluYWN0aXZlRm9udENvdW50KCkKQEAgLTQ2Nyw3ICs0
ODcsNyBAQCBzaXplX3QgRm9udENhY2hlOjppbmFjdGl2ZUZvbnRDb3VudCgpCiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX2ZvbnRMb2NrKTsKICNlbmRpZgogICAgIHVuc2lnbmVkIGNvdW50
ID0gMDsKLSAgICBmb3IgKGF1dG8mIGZvbnQgOiBtX2ZvbnREYXRhQ2FjaGUtPnZhbHVlcygpKSB7
CisgICAgZm9yIChhdXRvJiBmb250IDogbV9mb250RGF0YUNhY2hlcy0+ZGF0YS52YWx1ZXMoKSkg
ewogICAgICAgICBpZiAoZm9udC0+aGFzT25lUmVmKCkpCiAgICAgICAgICAgICArK2NvdW50Owog
ICAgIH0KQEAgLTQ4OSw5ICs1MDksOSBAQCB2b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZv
bnRTZWxlY3RvciYgY2xpZW50KQogCiB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiB7Ci0g
ICAgbV9mb250UGxhdGZvcm1EYXRhQ2FjaGUtPmNsZWFyKCk7CisgICAgbV9mb250RGF0YUNhY2hl
cy0+cGxhdGZvcm1EYXRhLmNsZWFyKCk7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQot
ICAgIG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlLT5jbGVhcigpOworICAgIG1fZm9udERhdGFDYWNo
ZXMtPnZlcnRpY2FsRGF0YS5jbGVhcigpOwogI2VuZGlmCiAgICAgaW52YWxpZGF0ZUZvbnRDYXNj
YWRlQ2FjaGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaAppbmRleCA5ODdmNWE5MTY2MTM1MTVlYjZmYzFlNzAzOTQ2ZTQyODE1ZTUxYWI4Li43NTAx
YzJkZjBkZjIzZjA0OGM3MDBhYWMwMGJmN2MyYWIyNzk4ODM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlRm9udHMuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNp
bmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDxhcnJheT4KQEAgLTY0LDE1ICs2NSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgRm9udFNlbGVjdG9yOwogY2xhc3MgT3BlblR5cGVWZXJ0
aWNhbERhdGE7CiBjbGFzcyBGb250OwogZW51bSBjbGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IHVp
bnQ4X3Q7Ci1zdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2g7Ci1zdHJ1Y3QgRm9udERhdGFDYWNo
ZUtleVRyYWl0czsKLXN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk7Ci1zdHJ1Y3QgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaDsKLXN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlIYXNoVHJhaXRzOwogCiAjaWYgUExBVEZPUk0oV0lOKQogI2lmIFVTRShJTUxBTkdfRk9OVF9M
SU5LMikKQEAgLTIxOCwyMCArMjEzLDE2IEBAIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aFRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8V2ViQ29yZTo6Rm9udENhc2NhCiAKIHVz
aW5nIEZvbnRDYXNjYWRlQ2FjaGUgPSBIYXNoTWFwPEZvbnRDYXNjYWRlQ2FjaGVLZXksIHN0ZDo6
dW5pcXVlX3B0cjxGb250Q2FzY2FkZUNhY2hlRW50cnk+LCBGb250Q2FzY2FkZUNhY2hlS2V5SGFz
aCwgRm9udENhc2NhZGVDYWNoZUtleUhhc2hUcmFpdHM+OwogCi10eXBlZGVmIEhhc2hNYXA8Rm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4s
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhh
c2hUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLXR5cGVkZWYgSGFzaE1hcDxGb250UGxh
dGZvcm1EYXRhLCBSZWY8Rm9udD4sIEZvbnREYXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hl
S2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkK
LXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhLCBSZWZQdHI8T3BlblR5cGVWZXJ0aWNh
bERhdGE+LCBGb250RGF0YUNhY2hlS2V5SGFzaCwgRm9udERhdGFDYWNoZUtleVRyYWl0cz4gRm9u
dFZlcnRpY2FsRGF0YUNhY2hlOwotI2VuZGlmCi0KIGNsYXNzIEZvbnRDYWNoZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZvbnRDYWNoZT4gewotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJv
eWVkPEZvbnRDYWNoZT47CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Rm9u
dENhY2hlLCBNYWluVGhyZWFkQWNjZXNzVHJhaXRzPjsKIAogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEZvbnRDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEZv
bnRDYWNoZSgpOwotCisgICAgc3RhdGljIFJlZjxGb250Q2FjaGU+IGNyZWF0ZSgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBGb250Q2FjaGUmIHNpbmdsZXRvbigpOworICAgIHN0YXRpYyBG
b250Q2FjaGUmIGZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24oUmVmUHRyPEZvbnRTZWxlY3Rv
cj4pOworCisgICAgfkZvbnRDYWNoZSgpOwogCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIGVudW0gY2xhc3MgUHJlZmVyQ29sb3JlZEZv
bnQgOiB1aW50OF90IHsgTm8sIFllcyB9OwpAQCAtMzAzLDYgKzI5NCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHByZXdhcm1HbG9iYWxseSgpOwogCiBwcml2YXRlOgorICAgIEZvbnRDYWNoZSgpOwor
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgp
OwogICAgIHZvaWQgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUo
KTsKICAgICB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpOwpAQCAtMzIyLDExICszMTUs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nl
c3NpYmlsaXR5IHsgZmFsc2UgfTsKIAogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yKj4gbV9jbGll
bnRzOwotICAgIFVuaXF1ZVJlZjxGb250UGxhdGZvcm1EYXRhQ2FjaGU+IG1fZm9udFBsYXRmb3Jt
RGF0YUNhY2hlOwotICAgIFVuaXF1ZVJlZjxGb250RGF0YUNhY2hlPiBtX2ZvbnREYXRhQ2FjaGU7
Ci0jaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQotICAgIFVuaXF1ZVJlZjxGb250VmVydGlj
YWxEYXRhQ2FjaGU+IG1fZm9udFZlcnRpY2FsRGF0YUNhY2hlOwotI2VuZGlmCisgICAgc3RydWN0
IEZvbnREYXRhQ2FjaGVzOworICAgIFVuaXF1ZVJlZjxGb250RGF0YUNhY2hlcz4gbV9mb250RGF0
YUNhY2hlczsKICAgICBGb250Q2FzY2FkZUNhY2hlIG1fZm9udENhc2NhZGVDYWNoZTsKIAogICAg
IHVuc2lnbmVkIHNob3J0IG1fZ2VuZXJhdGlvbiB7IDAgfTsKQEAgLTM4OCw0ICszNzgsOSBAQCBP
cHRpb25hbDxGb250Q2FjaGU6OlByZXdhcm1JbmZvcm1hdGlvbj4gRm9udENhY2hlOjpQcmV3YXJt
SW5mb3JtYXRpb246OmRlY29kZShEZQogICAgIHJldHVybiBwcmV3YXJtSW5mb3JtYXRpb247CiB9
CiAKK2lubGluZSBGb250Q2FjaGUmIEZvbnRDYWNoZTo6Zm9udENhY2hlRmFsbGJhY2tUb1Npbmds
ZXRvbihSZWZQdHI8Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCit7CisgICAgcmV0dXJuIGZv
bnRTZWxlY3RvciA/IGZvbnRTZWxlY3Rvci0+Zm9udENhY2hlKCkgOiBGb250Q2FjaGU6OnNpbmds
ZXRvbigpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggNWNlYTc0NTJkNWZmMmU2Y2I1ZjNlMTE2NjU5N2I3OWZkOGY3
M2Q3ZC4uYmIzNmVmNjI1NmVjNzk1NTI0N2VkZjE2Y2Y2YjdkOTA5YTFlZGY5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMTUw
LDcgKzE1MCw3IEBAIGJvb2wgRm9udENhc2NhZGU6OmlzQ3VycmVudChjb25zdCBGb250U2VsZWN0
b3ImIGZvbnRTZWxlY3RvcikgY29uc3QKIHsKICAgICBpZiAoIW1fZm9udHMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobV9mb250cy0+Z2VuZXJhdGlvbigpICE9IEZvbnRDYWNoZTo6
c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpKQorICAgIGlmIChtX2ZvbnRzLT5nZW5lcmF0aW9uKCkg
IT0gZm9udFNlbGVjdG9yLmZvbnRDYWNoZSgpLmdlbmVyYXRpb24oKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmIChtX2ZvbnRzLT5mb250U2VsZWN0b3JWZXJzaW9uKCkgIT0gZm9udFNl
bGVjdG9yLnZlcnNpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY4LDcgKzE2OCw3
IEBAIHZvaWQgRm9udENhc2NhZGU6OnVwZGF0ZUZvbnRzKFJlZjxGb250Q2FzY2FkZUZvbnRzPiYm
IGZvbnRzKSBjb25zdAogCiB2b2lkIEZvbnRDYXNjYWRlOjp1cGRhdGUoUmVmUHRyPEZvbnRTZWxl
Y3Rvcj4mJiBmb250U2VsZWN0b3IpIGNvbnN0CiB7Ci0gICAgRm9udENhY2hlOjpzaW5nbGV0b24o
KS51cGRhdGVGb250Q2FzY2FkZSgqdGhpcywgV1RGTW92ZShmb250U2VsZWN0b3IpKTsKKyAgICBG
b250Q2FjaGU6OmZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24oZm9udFNlbGVjdG9yKS51cGRh
dGVGb250Q2FzY2FkZSgqdGhpcywgV1RGTW92ZShmb250U2VsZWN0b3IpKTsKIH0KIAogR2x5cGhC
dWZmZXIgRm9udENhc2NhZGU6OmxheW91dFRleHQoQ29kZVBhdGggY29kZVBhdGhUb1VzZSwgY29u
c3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgRm9yVGV4dEVtcGhh
c2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAppbmRleCA5YzdiZWViZDhk
NTI3Yzc4MTBhOTAxNDQ5NWMwMWYzY2E4ODRkYWUxLi45ZjY1ZDI5OThmOTQ4Njk3M2Q0YmJmMThk
ZTI2ZjgyYjA0NDM5ZmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIEZvbnRDYXNj
YWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2Vs
ZWN0b3IpCiAgICAgOiBtX2NhY2hlZFByaW1hcnlGb250KG51bGxwdHIpCiAgICAgLCBtX2ZvbnRT
ZWxlY3Rvcihmb250U2VsZWN0b3IpCiAgICAgLCBtX2ZvbnRTZWxlY3RvclZlcnNpb24obV9mb250
U2VsZWN0b3IgPyBtX2ZvbnRTZWxlY3Rvci0+dmVyc2lvbigpIDogMCkKLSAgICAsIG1fZ2VuZXJh
dGlvbihGb250Q2FjaGU6OnNpbmdsZXRvbigpLmdlbmVyYXRpb24oKSkKKyAgICAsIG1fZ2VuZXJh
dGlvbihGb250Q2FjaGU6OmZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24obV9mb250U2VsZWN0
b3IpLmdlbmVyYXRpb24oKSkKIHsKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGlmICghaXNNYWlu
VGhyZWFkKCkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5l
eHRGYWxsYmFjayhjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwKIHsK
ICAgICBBU1NFUlQoaW5kZXggPCBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlDb3VudCgpKTsK
IAotICAgIGF1dG8mIGZvbnRDYWNoZSA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgYXV0
byYgZm9udENhY2hlID0gRm9udENhY2hlOjpmb250Q2FjaGVGYWxsYmFja1RvU2luZ2xldG9uKGZv
bnRTZWxlY3Rvcik7CiAgICAgd2hpbGUgKGluZGV4IDwgZGVzY3JpcHRpb24uZWZmZWN0aXZlRmFt
aWx5Q291bnQoKSkgewogICAgICAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsm
XShjb25zdCBBdG9tU3RyaW5nJiBmYW1pbHkpIC0+IEZvbnRSYW5nZXMgewogICAgICAgICAgICAg
aWYgKGZhbWlseS5pc0VtcHR5KCkpCkBAIC0xODEsNyArMTgxLDcgQEAgY29uc3QgRm9udFJhbmdl
cyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZhbGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENh
c2NhZGVEZXMKICAgICAgICAgcmV0dXJuIG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlc1tpbmRleF07
CiAKICAgICBBU1NFUlQoaW5kZXggPT0gbV9yZWFsaXplZEZhbGxiYWNrUmFuZ2VzLnNpemUoKSk7
Ci0gICAgQVNTRVJUKEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZ2VuZXJhdGlvbigpID09IG1fZ2Vu
ZXJhdGlvbik7CisgICAgQVNTRVJUKEZvbnRDYWNoZTo6Zm9udENhY2hlRmFsbGJhY2tUb1Npbmds
ZXRvbihtX2ZvbnRTZWxlY3RvcikuZ2VuZXJhdGlvbigpID09IG1fZ2VuZXJhdGlvbik7CiAKICAg
ICBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXMuYXBwZW5kKEZvbnRSYW5nZXMoKSk7CiAgICAgYXV0
byYgZm9udFJhbmdlcyA9IG1fcmVhbGl6ZWRGYWxsYmFja1Jhbmdlcy5sYXN0KCk7CkBAIC0xOTEs
NyArMTkxLDcgQEAgY29uc3QgRm9udFJhbmdlcyYgRm9udENhc2NhZGVGb250czo6cmVhbGl6ZUZh
bGxiYWNrUmFuZ2VzQXQoY29uc3QgRm9udENhc2NhZGVEZXMKICAgICAgICAgaWYgKGZvbnRSYW5n
ZXMuaXNOdWxsKCkgJiYgbV9mb250U2VsZWN0b3IpCiAgICAgICAgICAgICBmb250UmFuZ2VzID0g
bV9mb250U2VsZWN0b3ItPmZvbnRSYW5nZXNGb3JGYW1pbHkoZGVzY3JpcHRpb24sIHN0YW5kYXJk
RmFtaWx5KTsKICAgICAgICAgaWYgKGZvbnRSYW5nZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBm
b250UmFuZ2VzID0gRm9udFJhbmdlcyhGb250Q2FjaGU6OnNpbmdsZXRvbigpLmxhc3RSZXNvcnRG
YWxsYmFja0ZvbnQoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIGZvbnRSYW5nZXMgPSBGb250
UmFuZ2VzKEZvbnRDYWNoZTo6Zm9udENhY2hlRmFsbGJhY2tUb1NpbmdsZXRvbihtX2ZvbnRTZWxl
Y3RvcikubGFzdFJlc29ydEZhbGxiYWNrRm9udChkZXNjcmlwdGlvbikpOwogICAgICAgICByZXR1
cm4gZm9udFJhbmdlczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFNlbGVjdG9yLmgKaW5kZXggYWM5YzE2OTZkMTQzN2ZjNTQ4MWFhNjM5ODBiNjEw
MDZkODVjMmY1MC4uNjU0OGU3NmY5OTYxZmY3ZTFhNTg5ZjVjYmIxYzA1NzJlYmJhZDg4YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKQEAg
LTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250Q2FjaGU7
CiBjbGFzcyBGb250Q2FzY2FkZURlc2NyaXB0aW9uOwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwog
Y2xhc3MgRm9udFNlbGVjdG9yQ2xpZW50OwpAQCAtNTQsNiArNTUsNyBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3Bwb3J0dW5pc3RpY2FsbHlTdGFydEZvbnREYXRhVVJMTG9hZGluZyhj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgY29uc3QgQXRvbVN0cmluZyYgZmFtaWx5KSA9
IDA7CiAKKyAgICB2aXJ0dWFsIEZvbnRDYWNoZSYgZm9udENhY2hlKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBmb250Q2FjaGVJbnZhbGlkYXRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYp
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggYTA4ODJmN2MyY2Y4YjIzNDIz
YmM3MDQ4YTM4OTZhN2NjYTRlYTA0OC4uZDYwYjVkYjcwNzdhZWRjYzgyZDc1NTY4ZjFhNDM3ODAy
OWM4NDJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTEzOCw3ICsxMzgsNyBA
QCBjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNvbnN0IFVDaGFyKiBvcmlnaW5hbAogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrRm9u
dDsKICAgICB9CiAKLSAgICBpZiAoYXV0byBzeXN0ZW1GYWxsYmFjayA9IEZvbnRDYWNoZTo6c2lu
Z2xldG9uKCkuc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKG1fZm9udERlc2NyaXB0aW9uLCBi
YXNlRm9udCwgSXNGb3JQbGF0Zm9ybUZvbnQ6Ok5vLCBwcmVmZXJDb2xvcmVkRm9udCA/IEZvbnRD
YWNoZTo6UHJlZmVyQ29sb3JlZEZvbnQ6OlllcyA6IEZvbnRDYWNoZTo6UHJlZmVyQ29sb3JlZEZv
bnQ6Ok5vLCBjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7CisgICAgaWYgKGF1dG8gc3lzdGVtRmFsbGJh
Y2sgPSBGb250Q2FjaGU6OmZvbnRDYWNoZUZhbGxiYWNrVG9TaW5nbGV0b24oZm9udFNlbGVjdG9y
KCkpLnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhtX2ZvbnREZXNjcmlwdGlvbiwgYmFzZUZv
bnQsIElzRm9yUGxhdGZvcm1Gb250OjpObywgcHJlZmVyQ29sb3JlZEZvbnQgPyBGb250Q2FjaGU6
OlByZWZlckNvbG9yZWRGb250OjpZZXMgOiBGb250Q2FjaGU6OlByZWZlckNvbG9yZWRGb250OjpO
bywgY2hhcmFjdGVycywgbGVuZ3RoKSkgewogICAgICAgICBpZiAoc3lzdGVtRmFsbGJhY2stPmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkgJiYg
KCFwcmVmZXJDb2xvcmVkRm9udCB8fCBzeXN0ZW1GYWxsYmFjay0+cGxhdGZvcm1EYXRhKCkuaXND
b2xvckJpdG1hcEZvbnQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3lzdGVtRmFsbGJhY2suZ2V0
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0
eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAppbmRleCBmY2Q5MDk2NmI3ZjIyN2Fi
YmNkYjU3YTFiZTQ5ZWM4YWI4MWNlZmM0Li5hMWI5NTE0MWZlMTFiOWEwOTAyODVkYmRjYmEzMTY4
ZTZkYjkyY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCkBAIC0zMzgsMTkgKzMz
OCwxOSBAQCBzdGF0aWMgU3RyaW5nIGdldEZhbWlseU5hbWVTdHJpbmdGcm9tRmFtaWx5KGNvbnN0
IFN0cmluZyYgZmFtaWx5KQogICAgIGlmIChmYW1pbHkubGVuZ3RoKCkgJiYgIWZhbWlseS5zdGFy
dHNXaXRoKCItd2Via2l0LSIpKQogICAgICAgICByZXR1cm4gZmFtaWx5OwogCi0gICAgaWYgKGZh
bWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlO
YW1lc0luZGV4OjpTdGFuZGFyZEZhbWlseSkpIHx8IGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEt
PmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpTZXJpZkZhbWlseSkp
KQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChGYW1pbHlOYW1lc0luZGV4
OjpTdGFuZGFyZEZhbWlseSkgfHwgZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoRmFtaWx5
TmFtZXNJbmRleDo6U2VyaWZGYW1pbHkpKQogICAgICAgICByZXR1cm4gInNlcmlmIjsKLSAgICBp
ZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZh
bWlseU5hbWVzSW5kZXg6OlNhbnNTZXJpZkZhbWlseSkpKQorICAgIGlmIChmYW1pbHkgPT0gZmFt
aWx5TmFtZXNEYXRhLT5hdChGYW1pbHlOYW1lc0luZGV4OjpTYW5zU2VyaWZGYW1pbHkpKQogICAg
ICAgICByZXR1cm4gInNhbnMtc2VyaWYiOwotICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNE
YXRhLT5hdChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6TW9ub3NwYWNl
RmFtaWx5KSkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KEZhbWlseU5h
bWVzSW5kZXg6Ok1vbm9zcGFjZUZhbWlseSkpCiAgICAgICAgIHJldHVybiAibW9ub3NwYWNlIjsK
LSAgICBpZiAoZmFtaWx5ID09IGZhbWlseU5hbWVzRGF0YS0+YXQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEZhbWlseU5hbWVzSW5kZXg6OkN1cnNpdmVGYW1pbHkpKSkKKyAgICBpZiAoZmFtaWx5ID09
IGZhbWlseU5hbWVzRGF0YS0+YXQoRmFtaWx5TmFtZXNJbmRleDo6Q3Vyc2l2ZUZhbWlseSkpCiAg
ICAgICAgIHJldHVybiAiY3Vyc2l2ZSI7Ci0gICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0Rh
dGEtPmF0KHN0YXRpY19jYXN0PHVuc2lnbmVkPihGYW1pbHlOYW1lc0luZGV4OjpGYW50YXN5RmFt
aWx5KSkpCisgICAgaWYgKGZhbWlseSA9PSBmYW1pbHlOYW1lc0RhdGEtPmF0KEZhbWlseU5hbWVz
SW5kZXg6OkZhbnRhc3lGYW1pbHkpKQogICAgICAgICByZXR1cm4gImZhbnRhc3kiOwogCiAjaWYg
UExBVEZPUk0oR1RLKQotICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5TmFtZXNEYXRhLT5hdChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oRmFtaWx5TmFtZXNJbmRleDo6U3lzdGVtVWlGYW1pbHkpKSB8fCBm
YW1pbHkgPT0gIi13ZWJraXQtc3lzdGVtLWZvbnQiKQorICAgIGlmIChmYW1pbHkgPT0gZmFtaWx5
TmFtZXNEYXRhLT5hdChGYW1pbHlOYW1lc0luZGV4OjpTeXN0ZW1VaUZhbWlseSkgfHwgZmFtaWx5
ID09ICItd2Via2l0LXN5c3RlbS1mb250IikKICAgICAgICAgcmV0dXJuIGRlZmF1bHRHdGtTeXN0
ZW1Gb250KCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0
b20uaAppbmRleCBlMzQ3ZmUzZGVhYTk4ZjliNTljNzk4ZDM2NzAwZDc5ZDNkNjMzMGRlLi45MTQ0
ZTM4ZGU2OTM3MDA5NDFlZWFkMDNjMjkxY2QwOGYyYWQ0Y2YzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtMTA2MSw3ICsxMDYxLDcgQEAgaW5saW5lIHZv
aWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIENTU1YKICAgICAgICAgICAgICAgICBmYW1pbHkgPSBidWlsZGVyU3RhdGUuZG9j
dW1lbnQoKS5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBmYW1pbHkgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
RnJvbVZhbHVlSUQoY29udGVudFZhbHVlLnZhbHVlSUQoKSk7CisgICAgICAgICAgICAgICAgZmFt
aWx5ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseShjb250ZW50
VmFsdWUudmFsdWVJRCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCmluZGV4IDFmNWNjNDE0
OGQ1YTBiZmY4NWVlMDExMjEzNzU1MmYxZjhkMzliZDMuLjRiM2VlYTMyNjQxYjUzMDdiOGM4Mjdk
ODk1MzU0MjA3NTUzNGUzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZUZvckZvbnRSYXcuY3BwCkBAIC0zMiwyOCArMzIsMzkgQEAKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVGb3JGb250UmF3LmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVk
ZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldlYktpdEZv
bnRGYW1pbHlOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBTdHls
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM7Cit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVzOwogCi1PcHRpb25hbDxGb250Q2FzY2FkZT4g
cmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGJv
b2wgdXNlRml4ZWREZWZhdWx0U2l6ZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24pCiB7CisgICAgcmV0dXJuIGZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgp
ID09IDEgJiYgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkgPT0gZmFtaWx5TmFtZXNEYXRh
LT5hdChGYW1pbHlOYW1lc0luZGV4OjpNb25vc3BhY2VGYW1pbHkpOworfQorCitPcHRpb25hbDxG
b250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC5jc3NGb250U2VsZWN0b3IoKSk7
CisKICAgICAvLyBNYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxl
LgogICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgp
OwogCiAgICAgLy8gRm9udCBmYW1pbHkgYXBwbGllZCBpbiB0aGUgc2FtZSB3YXkgYXMgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseQogICAgIC8vIEJlZm9yZSBtYXBwaW5n
IGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVy
aWMgZmFtaWx5LgotICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOworICAgIGJvb2wgb2xkRmFtaWx5VXNl
ZEZpeGVkRGVmYXVsdFNpemUgPSB1c2VGaXhlZERlZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbik7
CiAKICAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFtaWxpZXM7CiAgICAgZmFtaWxpZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LmZhbWlseS5zaXplKCkpOwpAQCAtNjMsNyArNzQsMTAg
QEAgT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcm
IGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3IKICAgICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkg
PSBmYWxzZTsKICAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7
CiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJv
ZHk7Ci0gICAgICAgICAgICBmYW1pbHkgPSBpc0dlbmVyaWNGYW1pbHkgPyBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoaWRlbnQpIDogQXRvbVN0
cmluZyhkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpKTsKKyAgICAgICAg
ICAgIGlmIChpc0dlbmVyaWNGYW1pbHkpCisgICAgICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5
TmFtZXNEYXRhLT5hdChDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
SW5kZXgoaWRlbnQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmYW1pbHkg
PSBBdG9tU3RyaW5nKGNvbnRleHQuc2V0dGluZ3NWYWx1ZXMoKS5mb250R2VuZXJpY0ZhbWlsaWVz
LnN0YW5kYXJkRm9udEZhbWlseSgpKTsKICAgICAgICAgfSwgWyZdIChjb25zdCBTdHJpbmcmIGZh
bWlseVN0cmluZykgewogICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5U3RyaW5nOwogICAgICAg
ICB9KTsKQEAgLTc5LDExICs5MywxMSBAQCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZv
ckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJhdywgRm9udENhc2NhZGVEZXNjcgogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhm
YW1pbGllcyk7CiAKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUo
KSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkgeworICAgIGlmICh1c2VGaXhlZERl
ZmF1bHRTaXplKGZvbnREZXNjcmlwdGlvbikgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNp
emUpIHsKICAgICAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3Jp
cHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkgewotICAgICAgICAgICAgYXV0byBzaXpl
ID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplLCBkb2N1bWVudCk7CisgICAgICAgICAgICBhdXRvIHNpemUgPSBT
dHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZp
eGVkRGVmYXVsdFNpemUsIGNvbnRleHQuc2V0dGluZ3NWYWx1ZXMoKSk7CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKLSAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3Bl
Y2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgMS4wLCBN
aW5pbXVtRm9udFNpemVSdWxlOjpOb25lLCBkb2N1bWVudC5zZXR0aW5nc1ZhbHVlcygpKSk7Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRl
ZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1
dGVTaXplKCksIDEuMCwgTWluaW11bUZvbnRTaXplUnVsZTo6Tm9uZSwgY29udGV4dC5zZXR0aW5n
c1ZhbHVlcygpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3Niw3ICsxOTAsNyBAQCBPcHRp
b25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYgZm9udFJh
dywgRm9udENhc2NhZGVEZXNjcgogICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgogICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQpOwotICAgICAgICAgICAgcmV0
dXJuIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBTdHlsZTo6
Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0
U2l6ZSgpLCBjb250ZXh0LnNldHRpbmdzVmFsdWVzKCkpOwogICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2VyOgogICAgICAgICAgICAgcmV0dXJuIHBhcmVudFNpemUgKiAxLjJmOwogICAgICAgICBj
YXNlIENTU1ZhbHVlU21hbGxlcjoKQEAgLTE4Nyw4ICsyMDEsMTMgQEAgT3B0aW9uYWw8Rm9udENh
c2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNj
YWRlRGVzY3IKICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVu
Z3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKICAgICAgICAgcmV0dXJuIHN3aXRj
aE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CiAgICAgICAgICAgICBhdXRvIGZvbnRDYXNjYWRlID0gRm9u
dENhc2NhZGUoRm9udENhc2NhZGVEZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKTsKLSAgICAg
ICAgICAgIGZvbnRDYXNjYWRlLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZVVuem9vbWVkTm9uQ2FsY0xlbmd0aERvdWJsZShsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVl
LCBDU1NQcm9wZXJ0eUZvbnRTaXplLCAmZm9udENhc2NhZGUuZm9udE1ldHJpY3MoKSwgJmZvbnRD
YXNjYWRlLmZvbnREZXNjcmlwdGlvbigpLCAmZm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCks
IGRvY3VtZW50LnJlbmRlclZpZXcoKSkpOworICAgICAgICAgICAgZm9udENhc2NhZGUudXBkYXRl
KGNvbnRleHQuY3NzRm9udFNlbGVjdG9yKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IFBhc3Np
bmcgbnVsbCBmb3IgdGhlIFJlbmRlclZpZXcgcGFyYW1ldGVyIG1lYW5zIHRoYXQgdncgYW5kIHZo
IHVuaXRzIHdpbGwgZXZhbHVhdGUgdG8KKyAgICAgICAgICAgIC8vICAgICAgICB6ZXJvIGFuZCB2
bWluIGFuZCB2bWF4IHVuaXRzIHdpbGwgZXZhbHVhdGUgYXMgaWYgdGhleSB3ZXJlIHB4IHVuaXRz
LgorICAgICAgICAgICAgLy8gICAgICAgIEl0J3MgdW5jbGVhciBpbiB0aGUgc3BlY2lmaWNhdGlv
biBpZiB0aGV5J3JlIGV4cGVjdGVkIHRvIHdvcmsgb24gT2Zmc2NyZWVuQ2FudmFzLCBnaXZlbgor
ICAgICAgICAgICAgLy8gICAgICAgIHRoYXQgaXQncyBvZmYtc2NyZWVuIGFuZCB0aGVyZWZvcmUg
ZG9lc24ndCBzdHJpY3RseSBoYXZlIGFuIGFzc29jaWF0ZWQgdmlld3BvcnQuCisgICAgICAgICAg
ICAvLyAgICAgICAgVGhpcyBuZWVkcyBjbGFyaWZpY2F0aW9uIGFuZCBwb3NzaWJseSBmaXhpbmcu
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlVW56b29tZWROb25DYWxjTGVuZ3RoRG91YmxlKGxlbmd0aC50eXBlLCBsZW5ndGgu
dmFsdWUsIENTU1Byb3BlcnR5Rm9udFNpemUsICZmb250Q2FzY2FkZS5mb250TWV0cmljcygpLCAm
Zm9udENhc2NhZGUuZm9udERlc2NyaXB0aW9uKCksICZmb250Q2FzY2FkZS5mb250RGVzY3JpcHRp
b24oKSwgaXM8RG9jdW1lbnQ+KGNvbnRleHQpID8gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQp
LnJlbmRlclZpZXcoKSA6IG51bGxwdHIpKTsKICAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2Vu
dGFnZSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigocGFyZW50U2l6
ZSAqIHBlcmNlbnRhZ2UpIC8gMTAwLjApOwogICAgICAgICB9KTsKQEAgLTIwMyw3ICsyMjIsNyBA
QCBPcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgRm9udFJhdyYg
Zm9udFJhdywgRm9udENhc2NhZGVEZXNjcgogICAgIC8vIGl0LCBldmVuIHRob3VnaCB0aGVyZSBp
cyBsaW5lLWhlaWdodCBpbmZvcm1hdGlvbiBvbiBGb250UmF3LgogCiAgICAgYXV0byBmb250Q2Fz
Y2FkZSA9IEZvbnRDYXNjYWRlKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7Ci0gICAgZm9udENh
c2NhZGUudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisgICAgZm9udENhc2NhZGUu
dXBkYXRlKGNvbnRleHQuY3NzRm9udFNlbGVjdG9yKCkpOwogICAgIHJldHVybiBmb250Q2FzY2Fk
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
Rm9udFJhdy5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5o
CmluZGV4IDFhODZhOWYxNTg4ZGNlMTc4YTQzOTBkNzQ5MzU0MGZmODkyYWIzYjAuLjJiY2ZjYmZh
ZGQ0NTI3YzNhMWIyZWI2OGYyYzhlYjVmZTllOWZhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmgKQEAgLTMyLDkgKzMyLDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZvbnRDYXNjYWRlOwogY2xh
c3MgRm9udENhc2NhZGVEZXNjcmlwdGlvbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiAKIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgewogc3RydWN0IEZvbnRSYXc7
CkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBGb250UmF3OwogCiBuYW1lc3BhY2UgU3R5bGUgewog
Ci1PcHRpb25hbDxGb250Q2FzY2FkZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpGb250UmF3JiwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmLCBEb2N1
bWVudCYpOworT3B0aW9uYWw8Rm9udENhc2NhZGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IENT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJhdyYsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24m
JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOwogCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IGJlYjY3YmQ1NGFmM2I1OWE5ZDA5YTQy
MjMyMmVhY2M3NWRjZTBmMDMuLmYxZDdmMmZlNDFlY2I5NzRkY2M4YWViNDExODkyMzk5ZTA0Zjlh
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBA
IC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXb3JrZXJH
bG9iYWxTY29wZS5oIgogCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiQ29u
dGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ3J5cHRvLmgiCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblByb3h5LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCaXRtYXBPcHRpb25zLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgi
CkBAIC05MCw2ICs5Miw4IEBAIFdvcmtlckdsb2JhbFNjb3BlOjp+V29ya2VyR2xvYmFsU2NvcGUo
KQogICAgIC8vIFdlIG5lZWQgdG8gcmVtb3ZlIGZyb20gdGhlIGNvbnRleHRzIG1hcCB2ZXJ5IGVh
cmx5IGluIHRoZSBkZXN0cnVjdG9yIHNvIHRoYXQgY2FsbGluZyBwb3N0VGFzaygpIG9uIHRoaXMg
V29ya2VyR2xvYmFsU2NvcGUgZnJvbSBhbm90aGVyIHRocmVhZCBpcyBzYWZlLgogICAgIHJlbW92
ZUZyb21Db250ZXh0c01hcCgpOwogCisgICAgaWYgKG1fY3NzRm9udFNlbGVjdG9yKQorICAgICAg
ICBtX2Nzc0ZvbnRTZWxlY3Rvci0+c3RvcExvYWRpbmdBbmRDbGVhckZvbnRzKCk7CiAgICAgbV9w
ZXJmb3JtYW5jZSA9IG51bGxwdHI7CiAgICAgbV9jcnlwdG8gPSBudWxscHRyOwogCkBAIC00Nzgs
NiArNDgyLDIwIEBAIENTU1ZhbHVlUG9vbCYgV29ya2VyR2xvYmFsU2NvcGU6OmNzc1ZhbHVlUG9v
bCgpCiAgICAgcmV0dXJuICptX2Nzc1ZhbHVlUG9vbDsKIH0KIAorQ1NTRm9udFNlbGVjdG9yKiBX
b3JrZXJHbG9iYWxTY29wZTo6Y3NzRm9udFNlbGVjdG9yKCkKK3sKKyAgICBpZiAoIW1fY3NzRm9u
dFNlbGVjdG9yKQorICAgICAgICBtX2Nzc0ZvbnRTZWxlY3RvciA9IENTU0ZvbnRTZWxlY3Rvcjo6
Y3JlYXRlKCp0aGlzKTsKKyAgICByZXR1cm4gbV9jc3NGb250U2VsZWN0b3IuZ2V0KCk7Cit9CisK
K0ZvbnRDYWNoZSYgV29ya2VyR2xvYmFsU2NvcGU6OmZvbnRDYWNoZSgpCit7CisgICAgaWYgKCFt
X2ZvbnRDYWNoZSkKKyAgICAgICAgbV9mb250Q2FjaGUgPSBGb250Q2FjaGU6OmNyZWF0ZSgpOwor
ICAgIHJldHVybiAqbV9mb250Q2FjaGU7Cit9CisKIFJlZmVycmVyUG9saWN5IFdvcmtlckdsb2Jh
bFNjb3BlOjpyZWZlcnJlclBvbGljeSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVmZXJyZXJQ
b2xpY3k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNj
b3BlLmggYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKaW5kZXgg
MTEwMjU4ZGRmYzhlYjFkNDViMzBjMDJkZjJjOWFkN2M4YzRiYmQ0NC4uYmYzZjY4NTRhMThlNGY3
YjhlMGZhOGM1MDEzNmI5YTc2Y2EwNTE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29y
a2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyR2xvYmFsU2NvcGUuaApAQCAtNDIsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIENTU0ZvbnRTZWxlY3RvcjsKIGNsYXNzIENTU1ZhbHVlUG9vbDsKIGNsYXNzIENv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVyczsKIGNsYXNzIENyeXB0bzsKQEAgLTEx
Niw2ICsxMTcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJpdG1hcChJbWFnZUJp
dG1hcDo6U291cmNlJiYsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRt
YXBPcHRpb25zJiYsIEltYWdlQml0bWFwOjpQcm9taXNlJiYpOwogCiAgICAgQ1NTVmFsdWVQb29s
JiBjc3NWYWx1ZVBvb2woKTsKKyAgICBDU1NGb250U2VsZWN0b3IqIGNzc0ZvbnRTZWxlY3Rvcigp
IGZpbmFsOworICAgIEZvbnRDYWNoZSYgZm9udENhY2hlKCkgZmluYWw7CiAKICAgICBSZWZlcnJl
clBvbGljeSByZWZlcnJlclBvbGljeSgpIGNvbnN0IGZpbmFsOwogCkBAIC0xODAsNiArMTgzLDgg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V29ya2VyU1dDbGllbnRDb25uZWN0aW9uPiBtX3N3Q2xp
ZW50Q29ubmVjdGlvbjsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NWYWx1ZVBvb2w+
IG1fY3NzVmFsdWVQb29sOworICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fY3NzRm9udFNl
bGVjdG9yOworICAgIFJlZlB0cjxGb250Q2FjaGU+IG1fZm9udENhY2hlOwogICAgIFJlZmVycmVy
UG9saWN5IG1fcmVmZXJyZXJQb2xpY3k7CiAgICAgU2V0dGluZ3M6OlZhbHVlcyBtX3NldHRpbmdz
VmFsdWVzOwogICAgIFdvcmtlclR5cGUgbV93b3JrZXJUeXBlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI0NDYxZjkwMWI5
NjRiMjdlOWI0MzViYTMzOWUzZjdiYmEzZmYyODguLjBhMzVmZmMyOGZiMTVkYTg4MzIwYjkyMjBk
MTIwNzZhNTFmOWIzNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wMy0zMSAgQ2hyaXMg
TG9yZCAgPGNsb3JkQGlnYWxpYS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRleHQgcmVuZGVy
aW5nIG9uIE9mZnNjcmVlbkNhbnZhcyBpbiBhIFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRqdXN0IGV4cGVjdGF0aW9ucyBmb3IgbWFudWFsIE9m
ZnNjcmVlbkNhbnZhcyB3b3JrZXIgdGV4dCB0ZXN0LgorCisgICAgICAgICogcGxhdGZvcm0vZ2xp
Yi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTA0LTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggc29tZSBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MgaW4g
SFRNTE1lZGlhRWxlbWVudCBtZXRob2RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKaW5k
ZXggNjQzNzVhZjg2OGNjYWIyOWI0YmM1N2M5NjA0MjM3NDA1ZGM0NzkzYS4uNmI0M2I2ZjY4NTJj
MGZlNGRkNDlmODE5NWFmMjVmODAwN2QyOTEyZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjEtMDMtMzEgIENocmlzIExvcmQgIDxjbG9yZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0ZXh0IHJlbmRlcmluZyBvbiBPZmZzY3JlZW5D
YW52YXMgaW4gYSBXb3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwMjc5MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIEFkanVzdCB0ZXN0IGV4cGVjdGF0aW9ucy4KKworICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuYmFz
aWMud29ya2VyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmNvbXBsZXgud29ya2Vy
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMv
b2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQud29ya2VyLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVu
L3RleHQvMmQudGV4dC5mb250LnBhcnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dDoKKwogMjAy
MS0wMy0zMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLiBJbXBvcnQgV1BUIHRlc3QgbW9kaWZpZWQgaW4gaHR0cHM6Ly9naXRodWIuY29t
L3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvcHVsbC8yODMxNQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4v
dGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuYmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2Ny
ZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmJhc2ljLndvcmtlci1leHBlY3RlZC50eHQKaW5k
ZXggMDg0ZWZlNDZlZGY5YTZmZTllYTg4ODM0MmFhYWU2MzZhMzNmZDQzMi4uYTE3ZWVmNTA5MmI3
ZDAzODI3YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8y
ZC50ZXh0LmZvbnQucGFyc2UuYmFzaWMud29ya2VyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVl
bi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5iYXNpYy53b3JrZXItZXhwZWN0ZWQudHh0CkBAIC0x
LDMgKzEsMyBAQAogCi1GQUlMIDJkIGFzc2VydF9lcXVhbHM6IGN0eC5mb250ID09PSAnMjBweCBz
ZXJpZicgKGdvdCAxMHB4IHNhbnMtc2VyaWZbc3RyaW5nXSwgZXhwZWN0ZWQgMjBweCBzZXJpZltz
dHJpbmddKSBleHBlY3RlZCAiMjBweCBzZXJpZiIgYnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgor
UEFTUyAyZAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5j
b21wbGV4Lndvcmtlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5w
YXJzZS5jb21wbGV4Lndvcmtlci1leHBlY3RlZC50eHQKaW5kZXggMWY0ZjBlZjk4Yjk3MmRjMzZi
ZTA1YjczZTNmMzMzNjk4MTk0ZWNkYi4uYTE3ZWVmNTA5MmI3ZDAzODI3YWNkNjViNzk3OGVlNGI5
YmUyMGRjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuY29t
cGxleC53b3JrZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250
LnBhcnNlLmNvbXBsZXgud29ya2VyLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJ
TCAyZCBhc3NlcnRfZXF1YWxzOiBjdHguZm9udCA9PT0gJ2l0YWxpYyBzbWFsbC1jYXBzIDEycHgg
IlVua25vd24gRm9udCIsIHNhbnMtc2VyaWYnIChnb3QgMTBweCBzYW5zLXNlcmlmW3N0cmluZ10s
IGV4cGVjdGVkIGl0YWxpYyBzbWFsbC1jYXBzIDEycHggIlVua25vd24gRm9udCIsIHNhbnMtc2Vy
aWZbc3RyaW5nXSkgZXhwZWN0ZWQgIml0YWxpYyBzbWFsbC1jYXBzIDEycHggXCJVbmtub3duIEZv
bnRcIiwgc2Fucy1zZXJpZiIgYnV0IGdvdCAiMTBweCBzYW5zLXNlcmlmIgorUEFTUyAyZAogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLndvcmtl
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvY2FudmFzL29mZnNjcmVlbi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlk
Lndvcmtlci1leHBlY3RlZC50eHQKaW5kZXggMDg0ZWZlNDZlZGY5YTZmZTllYTg4ODM0MmFhYWU2
MzZhMzNmZDQzMi4uYTE3ZWVmNTA5MmI3ZDAzODI3YWNkNjViNzk3OGVlNGI5YmUyMGRjMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L2NhbnZhcy9vZmZzY3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC53b3JrZXIt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQvMmQudGV4dC5mb250LnBhcnNlLmludmFs
aWQud29ya2VyLWV4cGVjdGVkLnR4dApAQCAtMSwzICsxLDMgQEAKIAotRkFJTCAyZCBhc3NlcnRf
ZXF1YWxzOiBjdHguZm9udCA9PT0gJzIwcHggc2VyaWYnIChnb3QgMTBweCBzYW5zLXNlcmlmW3N0
cmluZ10sIGV4cGVjdGVkIDIwcHggc2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIjIwcHggc2VyaWYi
IGJ1dCBnb3QgIjEwcHggc2Fucy1zZXJpZiIKK1BBU1MgMmQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZzY3Jl
ZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UudGlueS53b3JrZXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2NhbnZhcy9vZmZz
Y3JlZW4vdGV4dC8yZC50ZXh0LmZvbnQucGFyc2UudGlueS53b3JrZXItZXhwZWN0ZWQudHh0Cmlu
ZGV4IDNmMmUzY2I4NWJmMjhiMWYyZTFjZGZlMzU5NjY0ZmJjNjE5YWNjNjEuLmExN2VlZjUwOTJi
N2QwMzgyN2FjZDY1Yjc5NzhlZTRiOWJlMjBkYzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL3RleHQv
MmQudGV4dC5mb250LnBhcnNlLnRpbnkud29ya2VyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29mZnNjcmVl
bi90ZXh0LzJkLnRleHQuZm9udC5wYXJzZS50aW55Lndvcmtlci1leHBlY3RlZC50eHQKQEAgLTEs
MyArMSwzIEBACiAKLUZBSUwgMmQgYXNzZXJ0X2VxdWFsczogY3R4LmZvbnQgPT09ICcxcHggc2Fu
cy1zZXJpZicgKGdvdCAxMHB4IHNhbnMtc2VyaWZbc3RyaW5nXSwgZXhwZWN0ZWQgMXB4IHNhbnMt
c2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIjFweCBzYW5zLXNlcmlmIiBidXQgZ290ICIxMHB4IHNh
bnMtc2VyaWYiCitQQVNTIDJkCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVj
dGF0aW9ucwppbmRleCA3YzExN2RiZjE1NWY2NjgxMmFjOTUzOTQyMDhlZDVkNjZjODgxMWIwLi41
OWFmYzM3Mzc0ODA4N2Y3NDVlMDYxMWMyMDE3Yzg4MTFhNmZmZjk2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCkBAIC02NTQsNyArNjU0LDYgQEAgd2Via2l0
Lm9yZy9iLzIwMzE0NiBodHRwL3dwdC9vZmZzY3JlZW4tY2FudmFzIFsgUGFzcyBdCiB3ZWJraXQu
b3JnL2IvMjAzMTQ2IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMv
b2Zmc2NyZWVuIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMjA2MDU1IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL2RyYXdpbmctaW1hZ2VzLXRvLXRo
ZS1jYW52YXMvMmQuZHJhd0ltYWdlLnN2Zy53b3JrZXIuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9y
Zy9iLzIwNjA1NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2FudmFzL29m
ZnNjcmVlbi9kcmF3aW5nLWltYWdlcy10by10aGUtY2FudmFzLzJkLmRyYXdJbWFnZS56ZXJvc291
cmNlLmltYWdlLndvcmtlci5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjIzNjcxIGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL21hbnVhbC9k
cmF3LWdlbmVyaWMtZmFtaWx5LzJkLnRleHQuZHJhdy5nZW5lcmljLmZhbWlseS53Lmh0bWwgWyBG
YWlsdXJlIF0KIAogIyBDb25zb2xlIGxvZyBsaW5lcyBtYXkgYXBwZWFyIGluIGEgZGlmZmVyZW50
IG9yZGVyIHNvIHdlIHNpbGVuY2UgdGhlbS4KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9jYW52YXMvb2Zmc2NyZWVuL2NvbnZlcnQtdG8tYmxvYi9vZmZzY3JlZW5jYW52YXMu
Y29udmVydC50by5ibG9iLncuaHRtbCBbIER1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>