<?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>203548</bug_id>
          
          <creation_ts>2019-10-28 20:03:06 -0700</creation_ts>
          <short_desc>[FTW] Adopt DirectWrite in place of Uniscribe</short_desc>
          <delta_ts>2019-10-31 17:53:58 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pvollan</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1584811</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-28 20:03:06 -0700</bug_when>
    <thetext>This patch is the first step in switching away from the GDI-based Uniscribe controller to DirectWrite.

This provides sufficient features to support web fonts handling and rendering text. Subsequent patches will build out full support for the font layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584812</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-28 20:04:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/56695130&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584815</commentid>
    <comment_count>2</comment_count>
      <attachid>382153</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-28 20:18:42 -0700</bug_when>
    <thetext>Created attachment 382153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584840</commentid>
    <comment_count>3</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 00:25:33 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt; Source/WebCore/platform/graphics/Font.cpp:130
&gt; +    m_zeroWidthSpaceGlyph = zeroWidthSpaceGlyph;

You don&apos;t need to restore m_zeroWidthSpaceGlyph because there is a hack to clear m_zeroWidthSpaceGlyph if m_zeroWidthSpaceGlyph == m_spaceGlyph.
https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/Font.cpp?rev=248846#L133

I think these logic should be reordered to be more comprehensible:

    if (glyphPageSpace)
        m_spaceGlyph = glyphPageSpace-&gt;glyphDataForCharacter(space).glyph;
    if (glyphPageZeroWidthSpace)
        m_zeroWidthSpaceGlyph = glyphPageZeroWidthSpace-&gt;glyphDataForCharacter(zeroWidthSpaceCharacter).glyph;
    if (m_zeroWidthSpaceGlyph == m_spaceGlyph)
        m_zeroWidthSpaceGlyph = 0;
    float width = widthForGlyph(m_spaceGlyph);
    m_spaceWidth = width;

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:80
&gt; +    COMPtr&lt;IDWriteTextFormat&gt; textFormat;

Where is &apos;textFormat&apos; used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584841</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 00:25:46 -0700</bug_when>
    <thetext>Can you implement Direct2D integration without using HFONT and LOGFONT at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584843</commentid>
    <comment_count>5</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 00:38:28 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:76
&gt; +    int localeLength = ::GetUserDefaultLocaleName(reinterpret_cast&lt;LPWSTR&gt;(&amp;localeName), LOCALE_NAME_MAX_LENGTH);

GetUserDefaultLocaleName. Should it be &quot;user default locale&quot; rather than the locale of the text?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:78
&gt; +    localeName[localeLength] = 0;

According to the spec, you don&apos;t need to zero-terminate explicitly.
https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-getuserdefaultlocalename

    wchar_t localeName[LOCALE_NAME_MAX_LENGTH];
    int localeLength = ::GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584844</commentid>
    <comment_count>6</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 00:40:12 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:53
&gt; +    int localeLength = ::GetUserDefaultLocaleName(reinterpret_cast&lt;LPWSTR&gt;(&amp;localeName), LOCALE_NAME_MAX_LENGTH);

I believe this unnecessary &apos;::&apos; prefix doesn&apos;t conform to WebKit Code Style Guidelines even though it doesn&apos;t disallow it explicitly because nobody prepend a unnecessary :: prefix to other global names, WTF, WebCore, WCHAR, UChar.
https://webkit.org/code-style-guideline/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584848</commentid>
    <comment_count>7</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 01:09:18 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:62
&gt; +#include &lt;wtf/text/StringImpl.h&gt;

Do you need to include StringImpl.h here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584849</commentid>
    <comment_count>8</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 01:11:47 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:80
&gt; +        hr = analyzer-&gt;GetGlyphs(text, run.length, fontPlatformData.dwFontFace(), fontPlatformData.orientation() == FontOrientation::Vertical, false,

Should the first argument be text + run.startPosition?

&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:87
&gt; +        text += returnedCount;

Is this right? I think returnedCount is the number of glyphs, not characters. Spec says &quot;Note that the mapping from characters to glyphs is, in general, many-to-many. &quot; https://docs.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextanalyzer-getglyphs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584853</commentid>
    <comment_count>9</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 01:22:23 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:46
&gt; +        auto platformFontPair = DirectWrite::createWithPlatformFont(logfont);

you want to use C++17 here? 
auto [font, collection] = DirectWrite::createWithPlatformFont(logfont);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584854</commentid>
    <comment_count>10</comment_count>
      <attachid>382153</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 01:25:37 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

win and wincairo EWS can&apos;t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584996</commentid>
    <comment_count>11</comment_count>
      <attachid>382153</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 11:24:07 -0700</bug_when>
    <thetext>Comment on attachment 382153
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:130
&gt;&gt; +    m_zeroWidthSpaceGlyph = zeroWidthSpaceGlyph;
&gt; 
&gt; You don&apos;t need to restore m_zeroWidthSpaceGlyph because there is a hack to clear m_zeroWidthSpaceGlyph if m_zeroWidthSpaceGlyph == m_spaceGlyph.
&gt; https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/Font.cpp?rev=248846#L133
&gt; 
&gt; I think these logic should be reordered to be more comprehensible:
&gt; 
&gt;     if (glyphPageSpace)
&gt;         m_spaceGlyph = glyphPageSpace-&gt;glyphDataForCharacter(space).glyph;
&gt;     if (glyphPageZeroWidthSpace)
&gt;         m_zeroWidthSpaceGlyph = glyphPageZeroWidthSpace-&gt;glyphDataForCharacter(zeroWidthSpaceCharacter).glyph;
&gt;     if (m_zeroWidthSpaceGlyph == m_spaceGlyph)
&gt;         m_zeroWidthSpaceGlyph = 0;
&gt;     float width = widthForGlyph(m_spaceGlyph);
&gt;     m_spaceWidth = width;

I was afraid of modifying the code too much, but this seems reasonable. I&apos;ll revise the patch.

&gt;&gt; Source/WebCore/platform/graphics/FontPlatformData.h:62
&gt;&gt; +#include &lt;wtf/text/StringImpl.h&gt;
&gt; 
&gt; Do you need to include StringImpl.h here?

No -- I&apos;ll remove it.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:76
&gt;&gt; +    int localeLength = ::GetUserDefaultLocaleName(reinterpret_cast&lt;LPWSTR&gt;(&amp;localeName), LOCALE_NAME_MAX_LENGTH);
&gt; 
&gt; GetUserDefaultLocaleName. Should it be &quot;user default locale&quot; rather than the locale of the text?

I&apos;m not sure. I don&apos;t see a text-specific locale in the call stack here, or on our other ports. Is there a way to get this information?

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:80
&gt;&gt; +    COMPtr&lt;IDWriteTextFormat&gt; textFormat;
&gt; 
&gt; Where is &apos;textFormat&apos; used?

In an older version of the patch. This is no longer needed -- I will remove it.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:46
&gt;&gt; +        auto platformFontPair = DirectWrite::createWithPlatformFont(logfont);
&gt; 
&gt; you want to use C++17 here? 
&gt; auto [font, collection] = DirectWrite::createWithPlatformFont(logfont);

Oh! Good idea.

&gt;&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:53
&gt;&gt; +    int localeLength = ::GetUserDefaultLocaleName(reinterpret_cast&lt;LPWSTR&gt;(&amp;localeName), LOCALE_NAME_MAX_LENGTH);
&gt; 
&gt; I believe this unnecessary &apos;::&apos; prefix doesn&apos;t conform to WebKit Code Style Guidelines even though it doesn&apos;t disallow it explicitly because nobody prepend a unnecessary :: prefix to other global names, WTF, WebCore, WCHAR, UChar.
&gt; https://webkit.org/code-style-guideline/

Okay. We used to do this for MS API calls, but I guess it&apos;s not really done anymore.

&gt;&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:80
&gt;&gt; +        hr = analyzer-&gt;GetGlyphs(text, run.length, fontPlatformData.dwFontFace(), fontPlatformData.orientation() == FontOrientation::Vertical, false,
&gt; 
&gt; Should the first argument be text + run.startPosition?

Yes!

&gt;&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:87
&gt;&gt; +        text += returnedCount;
&gt; 
&gt; Is this right? I think returnedCount is the number of glyphs, not characters. Spec says &quot;Note that the mapping from characters to glyphs is, in general, many-to-many. &quot; https://docs.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextanalyzer-getglyphs

I think you are right. The other glyph-related counts are correct (even &apos;textPropertiesData&apos;, which seems to be per-glyph) but the text position is not. Your suggestion above fixes that problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585009</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 11:36:52 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #4)
&gt; Can you implement Direct2D integration without using HFONT and LOGFONT at
&gt; all?

Yes, but not quite yet. There are still a number of code paths that expect HFONT/LOGFONT access.

I intend to remove them in a subsequent patch once the initial logic is in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585024</commentid>
    <comment_count>13</comment_count>
      <attachid>382204</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 12:16:39 -0700</bug_when>
    <thetext>Created attachment 382204
Patch v2

Update with Fujii&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585210</commentid>
    <comment_count>14</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 18:53:26 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt; Source/WebCore/platform/graphics/ComplexTextController.cpp:154
&gt; +#if PLATFORM(WIN) &amp;&amp; !USE(DIRECT2D)

This line can be removed because this is in #else of line #46 condition.

&gt; Source/WebCore/platform/graphics/FontPlatformData.h:242
&gt; +    COMPtr&lt;IDWriteFontCollection1&gt; m_dwFontCollection;

You added &apos;m_dwFontCollection&apos;, but not used in this patch. Remove it until it is really needed?

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:80
&gt; +    localeName[localeLength] = 0;

I think this line is not needed. See Comment 5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585219</commentid>
    <comment_count>15</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 19:22:22 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:115
&gt; +        const UChar* currentCP = cp + run.startPosition;

This variable &apos;currentCP&apos; hides outer &apos;currentCP&apos;. Either should be renamed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585220</commentid>
    <comment_count>16</comment_count>
      <attachid>382204</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 19:28:37 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt;&gt; Source/WebCore/platform/graphics/ComplexTextController.cpp:154
&gt;&gt; +#if PLATFORM(WIN) &amp;&amp; !USE(DIRECT2D)
&gt; 
&gt; This line can be removed because this is in #else of line #46 condition.

Done.

&gt;&gt; Source/WebCore/platform/graphics/FontPlatformData.h:242
&gt;&gt; +    COMPtr&lt;IDWriteFontCollection1&gt; m_dwFontCollection;
&gt; 
&gt; You added &apos;m_dwFontCollection&apos;, but not used in this patch. Remove it until it is really needed?

For that matter, I don&apos;t really use faceName either, so I should remove both.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:80
&gt;&gt; +    localeName[localeLength] = 0;
&gt; 
&gt; I think this line is not needed. See Comment 5.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585222</commentid>
    <comment_count>17</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 19:37:22 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:113
&gt; +        Vector&lt;DWRITE_SHAPING_GLYPH_PROPERTIES&gt; glyphProperties(suggestedCount);

These Vector is allocating and deallocating for every runs because you put them in this loop.
I think these Vector should put outside of the loop.
Or, if you want to put them in the loop, suggestedCount should be (3 * run.length / 2 + 16) instead of (3 * length / 2 + 16).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585225</commentid>
    <comment_count>18</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 19:40:07 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:113
&gt;&gt; +        Vector&lt;DWRITE_SHAPING_GLYPH_PROPERTIES&gt; glyphProperties(suggestedCount);
&gt; 
&gt; These Vector is allocating and deallocating for every runs because you put them in this loop.
&gt; I think these Vector should put outside of the loop.
&gt; Or, if you want to put them in the loop, suggestedCount should be (3 * run.length / 2 + 16) instead of (3 * length / 2 + 16).

Ah, you call shrink in shape. I think these vectors should not shrink for every runs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585230</commentid>
    <comment_count>19</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 19:45:05 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:148
&gt; +                glyphs[clusterMap[k]] = font-&gt;spaceGlyph();

clusterMap[k] looks wrong. clusterMap takes glyph index, but k is a char index.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585234</commentid>
    <comment_count>20</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 19:57:19 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:151
&gt; +                    spaceCharacters[clusterMap[k]] = m_currentCharacter + k + run.startPosition;

Is &apos;spaceCharacters&apos; used anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585235</commentid>
    <comment_count>21</comment_count>
      <attachid>382204</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 20:02:15 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:113
&gt;&gt;&gt; +        Vector&lt;DWRITE_SHAPING_GLYPH_PROPERTIES&gt; glyphProperties(suggestedCount);
&gt;&gt; 
&gt;&gt; These Vector is allocating and deallocating for every runs because you put them in this loop.
&gt;&gt; I think these Vector should put outside of the loop.
&gt;&gt; Or, if you want to put them in the loop, suggestedCount should be (3 * run.length / 2 + 16) instead of (3 * length / 2 + 16).
&gt; 
&gt; Ah, you call shrink in shape. I think these vectors should not shrink for every runs.

I&apos;m not sure. The length of each text run varies at each step of the loop, so these buffers need adjust size too match or else the call to &apos;ComplexTextRun::create&apos; will fail because it uses the &apos;size&apos; of the glyphs vector inside its constructor.

I suppose I could adjust ONLY the glyphs vector, but I was trying to be consistent.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:115
&gt;&gt; +        const UChar* currentCP = cp + run.startPosition;
&gt; 
&gt; This variable &apos;currentCP&apos; hides outer &apos;currentCP&apos;. Either should be renamed.

Only the inner one is needed. And the old &apos;textStart&apos; variable is unnecessary, too. Fixed.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:148
&gt;&gt; +                glyphs[clusterMap[k]] = font-&gt;spaceGlyph();
&gt; 
&gt; clusterMap[k] looks wrong. clusterMap takes glyph index, but k is a char index.

This comes form the existing Uniscribe logic, so I believe it is correct. The documentation in https://docs.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextanalyzer-getglyphs says that clusterMap is a mapping from character positions to glyphs, so I think that is correct.

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:166
&gt; +        currentCP += run.length;

And this isn&apos;t needed anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585238</commentid>
    <comment_count>22</comment_count>
      <attachid>382269</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 20:03:00 -0700</bug_when>
    <thetext>Created attachment 382269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585263</commentid>
    <comment_count>23</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 21:01:23 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:148
&gt;&gt;&gt; +                glyphs[clusterMap[k]] = font-&gt;spaceGlyph();
&gt;&gt; 
&gt;&gt; clusterMap[k] looks wrong. clusterMap takes glyph index, but k is a char index.
&gt; 
&gt; This comes form the existing Uniscribe logic, so I believe it is correct. The documentation in https://docs.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextanalyzer-getglyphs says that clusterMap is a mapping from character positions to glyphs, so I think that is correct.

Oh. the length of clusterMap should be the length of text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585264</commentid>
    <comment_count>24</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 21:01:45 -0700</bug_when>
    <thetext>Did you see comment 20?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585266</commentid>
    <comment_count>25</comment_count>
      <attachid>382204</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 21:03:52 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:148
&gt;&gt;&gt;&gt; +                glyphs[clusterMap[k]] = font-&gt;spaceGlyph();
&gt;&gt;&gt; 
&gt;&gt;&gt; clusterMap[k] looks wrong. clusterMap takes glyph index, but k is a char index.
&gt;&gt; 
&gt;&gt; This comes form the existing Uniscribe logic, so I believe it is correct. The documentation in https://docs.microsoft.com/en-us/windows/win32/api/dwrite/nf-dwrite-idwritetextanalyzer-getglyphs says that clusterMap is a mapping from character positions to glyphs, so I think that is correct.
&gt; 
&gt; Oh. the length of clusterMap should be the length of text.

Ah! Good point. I will fix.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:151
&gt;&gt; +                    spaceCharacters[clusterMap[k]] = m_currentCharacter + k + run.startPosition;
&gt; 
&gt; Is &apos;spaceCharacters&apos; used anywhere?

No. I have removed it in my local build and will upload a new patch.

This was from the UniscribeController, so I might need to bring it back if I learn that it is needed once I complete other work on DirectWrite support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585282</commentid>
    <comment_count>26</comment_count>
      <attachid>382282</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-29 22:35:58 -0700</bug_when>
    <thetext>Created attachment 382282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585288</commentid>
    <comment_count>27</comment_count>
      <attachid>382282</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 23:27:05 -0700</bug_when>
    <thetext>Comment on attachment 382282
Patch

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:71
&gt; +    wchar_t localeName[LOCALE_NAME_MAX_LENGTH + 1] = { };

Remove &apos;+ 1&apos;.

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:118
&gt; +    stringIndices.reserveCapacity(totalSuggestedCount);

You resize these Vectors for every runs. I think you don&apos;t need to put these outside of the loop. And, you don&apos;t need &apos;totalSuggestedCount&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585290</commentid>
    <comment_count>28</comment_count>
      <attachid>382204</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-29 23:37:31 -0700</bug_when>
    <thetext>Comment on attachment 382204
Patch v2

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:113
&gt;&gt;&gt;&gt; +        Vector&lt;DWRITE_SHAPING_GLYPH_PROPERTIES&gt; glyphProperties(suggestedCount);
&gt;&gt;&gt; 
&gt;&gt;&gt; These Vector is allocating and deallocating for every runs because you put them in this loop.
&gt;&gt;&gt; I think these Vector should put outside of the loop.
&gt;&gt;&gt; Or, if you want to put them in the loop, suggestedCount should be (3 * run.length / 2 + 16) instead of (3 * length / 2 + 16).
&gt;&gt; 
&gt;&gt; Ah, you call shrink in shape. I think these vectors should not shrink for every runs.
&gt; 
&gt; I&apos;m not sure. The length of each text run varies at each step of the loop, so these buffers need adjust size too match or else the call to &apos;ComplexTextRun::create&apos; will fail because it uses the &apos;size&apos; of the glyphs vector inside its constructor.
&gt; 
&gt; I suppose I could adjust ONLY the glyphs vector, but I was trying to be consistent.

Sorry. you are right. My comment 17 is wrong. Those Vectors can not be reused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585377</commentid>
    <comment_count>29</comment_count>
      <attachid>382282</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-30 09:35:47 -0700</bug_when>
    <thetext>Comment on attachment 382282
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:71
&gt;&gt; +    wchar_t localeName[LOCALE_NAME_MAX_LENGTH + 1] = { };
&gt; 
&gt; Remove &apos;+ 1&apos;.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:118
&gt;&gt; +    stringIndices.reserveCapacity(totalSuggestedCount);
&gt; 
&gt; You resize these Vectors for every runs. I think you don&apos;t need to put these outside of the loop. And, you don&apos;t need &apos;totalSuggestedCount&apos;.

This reserves sufficient storage for the largest possible run inside the loop. The &apos;resize&apos; and &apos;shrink&apos; operations just adjust the size of the vector, without changing the actual memory allocation. So I think this is correct as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585714</commentid>
    <comment_count>30</comment_count>
      <attachid>382282</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-30 18:53:57 -0700</bug_when>
    <thetext>Comment on attachment 382282
Patch

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

&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:175
&gt; +        m_complexTextRuns.append(ComplexTextRun::create(advances, origins, glyphs, stringIndices, FloatSize(), *font, currentCP, 0, run.length, 0, run.length, m_run.ltr()));

If you reuse Vectors, all ComplexTextRun shares same Vectors for advances, origins, glyphs, stringIndices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585726</commentid>
    <comment_count>31</comment_count>
      <attachid>382282</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-30 19:24:37 -0700</bug_when>
    <thetext>Comment on attachment 382282
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:175
&gt;&gt; +        m_complexTextRuns.append(ComplexTextRun::create(advances, origins, glyphs, stringIndices, FloatSize(), *font, currentCP, 0, run.length, 0, run.length, m_run.ltr()));
&gt; 
&gt; If you reuse Vectors, all ComplexTextRun shares same Vectors for advances, origins, glyphs, stringIndices.

I believe the constructor for ComplextTextRun makes a copy of the vectors it receives, so I think each will be distinct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585731</commentid>
    <comment_count>32</comment_count>
      <attachid>382282</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-30 19:43:12 -0700</bug_when>
    <thetext>Comment on attachment 382282
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ComplexTextControllerDirectWrite.cpp:175
&gt;&gt;&gt; +        m_complexTextRuns.append(ComplexTextRun::create(advances, origins, glyphs, stringIndices, FloatSize(), *font, currentCP, 0, run.length, 0, run.length, m_run.ltr()));
&gt;&gt; 
&gt;&gt; If you reuse Vectors, all ComplexTextRun shares same Vectors for advances, origins, glyphs, stringIndices.
&gt; 
&gt; I believe the constructor for ComplextTextRun makes a copy of the vectors it receives, so I think each will be distinct.

Ah. You are right. Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586163</commentid>
    <comment_count>33</comment_count>
      <attachid>382523</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-31 17:15:47 -0700</bug_when>
    <thetext>Created attachment 382523
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586182</commentid>
    <comment_count>34</comment_count>
      <attachid>382523</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-31 17:53:56 -0700</bug_when>
    <thetext>Comment on attachment 382523
Patch for landing

Clearing flags on attachment: 382523

Committed r251900: &lt;https://trac.webkit.org/changeset/251900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586183</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-31 17:53:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382153</attachid>
            <date>2019-10-28 20:18:42 -0700</date>
            <delta_ts>2019-10-29 12:16:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203548-20191028201842.patch</filename>
            <type>text/plain</type>
            <size>32654</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTEwLTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEFkb3B0IERpcmVj
dFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY5
NTEzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHN3aXRjaGVzIGZyb20gdGhlIFVuaXNjcmliZSB0ZXh0IGNvbnRyb2xsZXIgdG8g
YQorICAgICAgICBEaXJlY3RXcml0ZSBiYXNlZCBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBUcmVhdCBXaW5kb3dzCisgICAgICAg
IGxpa2UgYW55IG90aGVyIENvbXBsZXhUZXh0Q29udHJvbGxlciBwbGF0Zm9ybS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtR2x5cGhJbml0KTogQWRkIGhhY2sgZm9yIERpcmVjdFdyaXRlCisgICAgICAgIHplcm8t
d2lkdGggc3BhY2UgaGFuZGxpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFu
Z2UgY29uc3QpOiBEb24ndCB1c2UgVW5pc2NyaWJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udENvbGxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6ZmFjZU5hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFwZSk6IEFkZGVkLAorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udCk6
IE1vZGlmeSB0byByZXR1cm4gYQorICAgICAgICBwYWlyIG9mIGZvbnQgYW5kIGZvbnQgY29sbGVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250V2VpZ2h0KTogQWRkZWQg
c3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3RyZXRjaCk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEpOiBBZGQgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbiB0byBoZWxwIERpcmVjdFdyaXRlIGhh
bmRsZSBmb250IHN0eWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpjcmVhdGVGYWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOiBVcGRhdGUgdG8gaGFuZGxlIG11bHRpcGxlIHJ1bnMgaW4gYQorICAgICAgICBnaXZl
biBzdHJpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFs
eXplckhlbHBlcik6IFVwZGF0ZSB0byBoYW5kbGUKKyAgICAgICAgYW5hbHlzaXMgb2Ygc3RyaW5n
cyB3aXRoIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxw
ZXI6OlNldFNjcmlwdEFuYWx5c2lzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oOgorCiAyMDE5LTEwLTI4ICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIEpTUHJvbWlzZURl
ZmVycmVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjUxMjQzKQor
KysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw3ICsxMDEsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UcmFuc2Zvcm1hdGlvbk1hdHJpeFdpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvd2lu
L0N1cmxTU0xIYW5kbGVXaW4uY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxvYWRC
dW5kbGVXaW4uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI1MTI0MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJF
Q1QyRCkKIAogY2xhc3MgVGV4dExheW91dCB7CiB9OwpAQCAtMTQ2LDcgKzE0Niw3IEBAIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm8KICAgICAsIG1fbWF5VXNlTmF0dXJh
bFdyaXRpbmdEaXJlY3Rpb24obWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24pCiAgICAgLCBt
X2ZvclRleHRFbXBoYXNpcyhmb3JUZXh0RW1waGFzaXMpCiB7Ci0jaWYgUExBVEZPUk0oV0lOKQor
I2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAkocmV2aXNpb24gMjUxMjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksMTYgQEAgdm9pZCBG
b250OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAgICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0aGUg
c3BhY2UgYXJlIHRoZSBzYW1lIHdpZHRoLiBPdGhlcndpc2Ugd2Ugcm91bmQuCiAgICAgaWYgKGds
eXBoUGFnZVNwYWNlKQogICAgICAgICBtX3NwYWNlR2x5cGggPSBnbHlwaFBhZ2VTcGFjZS0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKHNwYWNlKS5nbHlwaDsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
Ly8gRGlyZWN0V3JpdGUgdXNlcyB0aGUgc2FtZSBnbHlwaCBmb3Igc3BhY2UgYW5kIHplcm8td2lk
dGggc3BhY2UgKGp1c3Qgd2l0aCBhIGZsYWcgaW5kaWNhdGluZyBubyBkaXNwbGF5KS4KKyAgICAv
LyBUaGlzIGJyZWFrcyB0aGUgd2lkdGhGb3JHbHlwaCBjYWxjdWxhdGlvbiwgc28gdGVtcG9yYXJp
bHkgc2V0IG1femVyb1dpZHRoU3BhY2VHbHlwaCB0byB6ZXJvLgorICAgIEdseXBoIHplcm9XaWR0
aFNwYWNlR2x5cGggPSBtX3plcm9XaWR0aFNwYWNlR2x5cGg7CisgICAgbV96ZXJvV2lkdGhTcGFj
ZUdseXBoID0gMDsKKyNlbmRpZgogICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JHbHlwaChtX3Nw
YWNlR2x5cGgpOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGgg
PSB6ZXJvV2lkdGhTcGFjZUdseXBoOworI2VuZGlmCiAgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7
CiAgICAgaWYgKGdseXBoUGFnZUNoYXJhY3Rlclplcm8pCiAgICAgICAgIG1femVyb0dseXBoID0g
Z2x5cGhQYWdlQ2hhcmFjdGVyWmVyby0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCcwJykuZ2x5cGg7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwCShyZXZpc2lvbiAyNTEyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShXSU4pICYm
ICFVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2VuZGlm
CiAKQEAgLTM1MCw3ICszNTAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRSYW5n
ZShjb25zCiAKICAgICBhdXRvIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIGlm
IChjb2RlUGF0aFRvVXNlID09IENvbXBsZXgpIHsKLSNpZiBQTEFURk9STShXSU4pCisjaWYgUExB
VEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQogICAgICAgICBVbmlzY3JpYmVDb250cm9sbGVy
IGl0KHRoaXMsIHJ1bik7CiAgICAgICAgIGl0LmFkdmFuY2UoZnJvbSk7CiAgICAgICAgIG9mZnNl
dEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0ZhcigpOwpAQCAtMTM5Nyw3ICsxMzk3LDcgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRgogICAgIHJldHVybiBpbml0
aWFsQWR2YW5jZTsKIH0KIAotI2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikg
fHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JU
ZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7CkBAIC0xNTQ1
LDcgKzE1NDUsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRlCiAg
ICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotI2lmICFQTEFURk9STShXSU4pCisj
aWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25z
dAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4sIHRy
dWUsIGZhbGxiYWNrRm9udHMpOwpAQCAtMTU3OCw3ICsxNTc4LDcgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvcgogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoTGF5
b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpKTsKIH0KIAot
I2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQog
dm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoKnRoaXMsIHJ1bik7CkBAIC0xNjM4LDcgKzE2MzgsNyBAQCBpbnQgRm9udENhc2NhZGU6Om9m
ZnNldEZvclBvc2l0aW9uRm9yU2ltCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQTEFU
Rk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogaW50IEZvbnRD
YXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBDb21w
bGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHJl
dmlzaW9uIDI1MTI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJ
TikKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1w
bC5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiB0eXBlZGVmIHN0cnVjdCBIRk9O
VF9fKiBIRk9OVDsKIGludGVyZmFjZSBJRFdyaXRlRm9udDsKQEAgLTEwMyw3ICsxMDUsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKERJUkVDVDJEKQotICAg
IEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmLCBJRFdyaXRlRm9udCosIGZsb2F0
IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVz
ZUdESSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYsIFZlY3RvcjxV
Q2hhcj4mJiBmYWNlTmFtZSwgQ09NUHRyPElEV3JpdGVGb250PiYmLCBDT01QdHI8SURXcml0ZUZv
bnRDb2xsZWN0aW9uMT4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5
bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lO
KSAmJiBVU0UoQ0FJUk8pCkBAIC0xNDMsOSArMTQ1LDggQEAgcHVibGljOgogI2lmIFVTRShESVJF
Q1QyRCkKICAgICBJRFdyaXRlRm9udCogZHdGb250KCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnQu
Z2V0KCk7IH0KICAgICBJRFdyaXRlRm9udEZhY2UqIGR3Rm9udEZhY2UoKSBjb25zdCB7IHJldHVy
biBtX2R3Rm9udEZhY2UuZ2V0KCk7IH0KLQotICAgIHN0YXRpYyBIUkVTVUxUIGNyZWF0ZUZhbGxi
YWNrRm9udChjb25zdCBMT0dGT05UJiwgSURXcml0ZUZvbnQqKik7Ci0gICAgc3RhdGljIEhSRVNV
TFQgY3JlYXRlRmFsbGJhY2tGb250KEhGT05ULCBJRFdyaXRlRm9udCoqKTsKKyAgICBJRFdyaXRl
Rm9udENvbGxlY3Rpb24xKiBkd0ZvbnRDb2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kd0Zv
bnRDb2xsZWN0aW9uLmdldCgpOyB9CisgICAgTFBDV1NUUiBmYWNlTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4obV9mYWNlTmFtZS5kYXRhKCkpOyB9CiAjZW5k
aWYKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CkBAIC0yMzgsNiArMjM5LDggQEAg
cHJpdmF0ZToKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgQ09NUHRyPElEV3JpdGVGb250PiBtX2R3
Rm9udDsKICAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNlPiBtX2R3Rm9udEZhY2U7CisgICAgQ09N
UHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+IG1fZHdGb250Q29sbGVjdGlvbjsKKyAgICBWZWN0
b3I8VUNoYXI+IG1fZmFjZU5hbWU7CiAjZW5kaWYKIAogI2lmIFVTRShDQUlSTykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJE
aXJlY3RXcml0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkocmV2aXNpb24g
MjUxMjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1
LDE0NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJv
bGxlci5oIgogCisjaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJG
b250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIlRleHRBbmFs
eXplckhlbHBlci5oIgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGb250
KikKK3N0YXRpYyBib29sIHNoYXBlKElEV3JpdGVUZXh0QW5hbHl6ZXIqIGFuYWx5emVyLCBjb25z
dCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTJiBhbmFseXNpcywgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgZm9udFBsYXRmb3JtRGF0YSwgY29uc3QgV0NIQVIqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgc3VnZ2VzdGVkQ291bnQsIFZlY3RvcjxHbHlwaD4mIGdseXBocywgVmVjdG9yPEds
eXBoPiYgY2x1c3Rlck1hcCwgVmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4m
IHRleHRQcm9wZXJ0aWVzLCBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4m
IGdseXBoUHJvcGVydGllcywgdW5zaWduZWQmIGdseXBoQ291bnQpCiB7Ci0gICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIEhSRVNVTFQg
c2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVzdWx0
ID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0LCBsZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdG
b250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCisgICAgICAgICAgICAmYW5hbHlzaXMsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIHN1Z2dlc3RlZENvdW50LCBjbHVzdGVyTWFwLmRh
dGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAorICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwg
Z2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJmdseXBoQ291bnQpOworCisgICAgICAgIGlmIChzaGFw
ZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlc2l6
ZSBvdXIgYnVmZmVycy4KKyAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhzLnNpemUoKSAq
IDIpOworICAgICAgICAgICAgY2x1c3Rlck1hcC5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAg
ICAgICAgICB0ZXh0UHJvcGVydGllcy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAgICAgICAg
ICBnbHlwaFByb3BlcnRpZXMucmVzaXplKGdseXBocy5zaXplKCkpOworICAgICAgICB9CisgICAg
fSB3aGlsZSAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisKKyAgICBpZiAoRkFJTEVE
KHNoYXBlUmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ2x5cGhzLnNocmlu
ayhnbHlwaENvdW50KTsKKyAgICBjbHVzdGVyTWFwLnNocmluayhnbHlwaENvdW50KTsKKyAgICB0
ZXh0UHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgZ2x5cGhQcm9wZXJ0aWVzLnNo
cmluayhnbHlwaENvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25z
dCBGb250KiBmb250KQoreworICAgIGlmICghZm9udCkgeworICAgICAgICAvLyBDcmVhdGUgYSBy
dW4gb2YgbWlzc2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgorICAgICAgICBtX2Nv
bXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFy
eUZvbnQoKSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0aCwgbV9ydW4ubHRy
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGZvbnRQbGF0Zm9ybURh
dGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKKworICAgIHdjaGFyX3QgbG9jYWxlTmFtZVtMT0NB
TEVfTkFNRV9NQVhfTEVOR1RIICsgMV0gPSB7IH07CisgICAgaW50IGxvY2FsZUxlbmd0aCA9IDo6
R2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxl
TmFtZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAgIFJFTEVBU0VfQVNTRVJUKGxvY2Fs
ZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKKyAgICBsb2NhbGVOYW1lW2xvY2Fs
ZUxlbmd0aF0gPSAwOworCisgICAgQ09NUHRyPElEV3JpdGVUZXh0Rm9ybWF0PiB0ZXh0Rm9ybWF0
OworICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6ZmFjdG9yeSgpLT5DcmVhdGVUZXh0Rm9y
bWF0KGZvbnRQbGF0Zm9ybURhdGEuZmFjZU5hbWUoKSwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRD
b2xsZWN0aW9uKCksIERpcmVjdFdyaXRlOjpmb250V2VpZ2h0KGZvbnRQbGF0Zm9ybURhdGEpLCBE
aXJlY3RXcml0ZTo6Zm9udFN0eWxlKGZvbnRQbGF0Zm9ybURhdGEpLCBEaXJlY3RXcml0ZTo6Zm9u
dFN0cmV0Y2goZm9udFBsYXRmb3JtRGF0YSksIGZvbnRQbGF0Zm9ybURhdGEuc2l6ZSgpLCBsb2Nh
bGVOYW1lLCAmdGV4dEZvcm1hdCk7CisKKyAgICBWZWN0b3I8RFdSSVRFX0ZPTlRfRkVBVFVSRT4g
Zm9udEZlYXR1cmVzKDEpOworICAgIGZvbnRGZWF0dXJlc1swXS5uYW1lVGFnID0gRFdSSVRFX0ZP
TlRfRkVBVFVSRV9UQUdfS0VSTklORzsKKyAgICBmb250RmVhdHVyZXNbMF0ucGFyYW1ldGVyID0g
bV9mb250LmVuYWJsZUtlcm5pbmcoKSA/IDEgOiAwOworCisgICAgaWYgKGZvbnRQbGF0Zm9ybURh
dGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQorICAgICAgICBm
b250RmVhdHVyZXMuYXBwZW5kKHtEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19WRVJUSUNBTF9XUklU
SU5HLCAxfSk7CisKKyAgICBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMgdXNlZEZlYXR1cmVz
OworICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJlcyA9IGZvbnRGZWF0dXJlcy5kYXRhKCk7CisgICAg
dXNlZEZlYXR1cmVzLmZlYXR1cmVDb3VudCA9IGZvbnRGZWF0dXJlcy5zaXplKCk7CisKKyAgICBW
ZWN0b3I8Y29uc3QgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTKj4gZmVhdHVyZXM7CisgICAg
ZmVhdHVyZXMuYXBwZW5kKCZ1c2VkRmVhdHVyZXMpOworCisgICAgQ09NUHRyPElEV3JpdGVUZXh0
QW5hbHl6ZXI+IGFuYWx5emVyOworICAgIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3Jl
YXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
TFBXU1RSPigmbG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3ApLCBsZW5n
dGgpOworCisgICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVscGVyLCAwLCBsZW5n
dGgsICZoZWxwZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAg
dW5zaWduZWQgc3VnZ2VzdGVkQ291bnQgPSAoMyAqIGxlbmd0aCAvIDIgKyAxNik7CisKKyAgICBj
b25zdCBVQ2hhciogY3VycmVudENQID0gY3A7CisgICAgY29uc3QgV0NIQVIqIHRleHRTdGFydCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3ApOworICAgIGNvbnN0IFdDSEFSKiB0ZXh0ID0g
dGV4dFN0YXJ0OworICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6ZWRS
dW5zKSB7CisgICAgICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzKHN1Z2dlc3RlZENvdW50KTsKKyAg
ICAgICAgVmVjdG9yPEdseXBoPiBjbHVzdGVyTWFwKHN1Z2dlc3RlZENvdW50KTsKKyAgICAgICAg
VmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoc3Vn
Z2VzdGVkQ291bnQpOworICAgICAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVS
VElFUz4gZ2x5cGhQcm9wZXJ0aWVzKHN1Z2dlc3RlZENvdW50KTsKKworICAgICAgICB1bnNpZ25l
ZCBnbHlwaENvdW50ID0gMDsKKyAgICAgICAgaWYgKCFzaGFwZShhbmFseXplci5nZXQoKSwgcnVu
LmFuYWx5c2lzLCBmb250UGxhdGZvcm1EYXRhLCB0ZXh0LCBydW4ubGVuZ3RoLCBzdWdnZXN0ZWRD
b3VudCwgZ2x5cGhzLCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcywgZ2x5cGhQcm9wZXJ0aWVz
LCBnbHlwaENvdW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWZWN0b3I8RkxP
QVQ+IGdseXBoQWR2YW5jZXMoZ2x5cGhDb3VudCk7CisgICAgICAgIFZlY3RvcjxEV1JJVEVfR0xZ
UEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMoZ2x5cGhDb3VudCk7CisKKyAgICAgICAgSFJFU1VMVCBw
bGFjZW1lbnRSZXN1bHQgPSBhbmFseXplci0+R2V0R2x5cGhQbGFjZW1lbnRzKHRleHRTdGFydCwg
Y2x1c3Rlck1hcC5kYXRhKCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwgcnVuLmxlbmd0aCwKKyAg
ICAgICAgICAgIGdseXBocy5kYXRhKCksIGdseXBoUHJvcGVydGllcy5kYXRhKCksIGdseXBoQ291
bnQsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLAorICAgICAgICAgICAgZm9udFBsYXRm
b3JtRGF0YS5zaXplKCksIGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsLCBtX3J1bi5sdHIoKSwKKyAgICAgICAgICAgICZydW4uYW5hbHlz
aXMsIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4obG9jYWxlTmFtZSksIAorICAgICAgICAgICAg
ZmVhdHVyZXMuZGF0YSgpLCAmcnVuLmxlbmd0aCwgMSwKKyAgICAgICAgICAgIGdseXBoQWR2YW5j
ZXMuZGF0YSgpLCBnbHlwaE9mZnNldHMuZGF0YSgpKTsKKyAgICAgICAgaWYgKEZBSUxFRChwbGFj
ZW1lbnRSZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENvbnZlcnQg
YWxsIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgc3BhY2VzIHRvIHVzZSB0aGUgc3Bh
Y2UgZ2x5cGguCisgICAgICAgIC8vIFdlIGFsc28gY3JlYXRlIGEgbWFwIHRoYXQgYWxsb3dzIHVz
IHRvIHF1aWNrbHkgZ28gZnJvbSBzcGFjZSBnbHlwaHMgYmFjayB0byB0aGVpciBjb3JyZXNwb25k
aW5nIGNoYXJhY3RlcnMuCisgICAgICAgIFZlY3RvcjxpbnQ+IHNwYWNlQ2hhcmFjdGVycyhnbHlw
aHMuc2l6ZSgpKTsKKyAgICAgICAgc3BhY2VDaGFyYWN0ZXJzLmZpbGwoLTEpOworCisgICAgICAg
IGZsb2F0IHNwYWNlV2lkdGggPSBmb250LT5zcGFjZVdpZHRoKCkgLSBmb250LT5zeW50aGV0aWNC
b2xkT2Zmc2V0KCk7CisKKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBydW4ubGVuZ3RoOyAr
K2spIHsKKyAgICAgICAgICAgIFVDaGFyIGNoID0gKihjdXJyZW50Q1AgKyBrKTsKKyAgICAgICAg
ICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7Cisg
ICAgICAgICAgICBib29sIHRyZWF0QXNaZXJvV2lkdGhTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVh
dEFzWmVyb1dpZHRoU3BhY2UoY2gpOworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCB0
cmVhdEFzWmVyb1dpZHRoU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBTdWJzdGl0dXRlIGlu
IHRoZSBzcGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGdseXBocwor
ICAgICAgICAgICAgICAgIC8vIGFycmF5LgorICAgICAgICAgICAgICAgIGdseXBoc1tjbHVzdGVy
TWFwW2tdXSA9IGZvbnQtPnNwYWNlR2x5cGgoKTsKKyAgICAgICAgICAgICAgICBnbHlwaEFkdmFu
Y2VzW2NsdXN0ZXJNYXBba11dID0gdHJlYXRBc1NwYWNlID8gc3BhY2VXaWR0aCA6IDA7CisgICAg
ICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSkKKyAgICAgICAgICAgICAgICAgICAgc3BhY2VD
aGFyYWN0ZXJzW2NsdXN0ZXJNYXBba11dID0gbV9jdXJyZW50Q2hhcmFjdGVyICsgayArIHJ1bi5z
dGFydFBvc2l0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVmVjdG9y
PEZsb2F0UG9pbnQ+IG9yaWdpbnMoZ2x5cGhDb3VudCk7CisgICAgICAgIFZlY3RvcjxGbG9hdFNp
emU+IGFkdmFuY2VzKGdseXBoQ291bnQpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHN0cmlu
Z0luZGljZXMoZ2x5cGhDb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5
cGhDb3VudDsgKytpKSB7CisgICAgICAgICAgICBzdHJpbmdJbmRpY2VzW2ldID0gaTsKKyAgICAg
ICAgICAgIG9yaWdpbnNbaV0gPSBGbG9hdFBvaW50KGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zm
c2V0LCBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQpOworICAgICAgICAgICAgYWR2YW5j
ZXNbaV0gPSBGbG9hdFNpemUoZ2x5cGhBZHZhbmNlc1tpXSwgMCk7CisgICAgICAgIH0KKworICAg
ICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShhZHZh
bmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBGbG9hdFNpemUoKSwgKmZvbnQs
IGN1cnJlbnRDUCwgMCwgcnVuLmxlbmd0aCwgMCwgcnVuLmxlbmd0aCwgbV9ydW4ubHRyKCkpKTsK
KworICAgICAgICBjdXJyZW50Q1AgKz0gZ2x5cGhDb3VudDsKKyAgICAgICAgdGV4dCArPSBnbHlw
aENvdW50OworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0ZXh0IDw9IHRleHRTdGFydCArIGxlbmd0
aCk7CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDI1MTI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3RXcml0ZVV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwyNSArMTgxLDMwIEBA
IENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseUZvckMKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNv
bnN0IExPR0ZPTlQmIGxvZ0ZvbnQpCitzdGQ6OnBhaXI8Q09NUHRyPElEV3JpdGVGb250PiwgQ09N
UHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNvbnN0
IExPR0ZPTlQmIGxvZ0ZvbnQpCiB7CiAgICAgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbj4g
c3lzdGVtRm9udENvbGxlY3Rpb247CiAgICAgSFJFU1VMVCBociA9IGZhY3RvcnkoKS0+R2V0U3lz
dGVtRm9udENvbGxlY3Rpb24oJnN5c3RlbUZvbnRDb2xsZWN0aW9uKTsKICAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBWZWN0b3I8d2NoYXJfdD4gbG9jYWxlTmFtZShMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKICAg
ICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUu
ZGF0YSgpLCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKIAotICAgIENPTVB0cjxJRFdyaXRlRm9u
dEZhbWlseT4gZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKHN5c3RlbUZvbnRD
b2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKLSAgICBpZiAoIWZvbnRGYW1p
bHkpCi0gICAgICAgIGZvbnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbih3ZWJQcm9j
ZXNzRm9udENvbGxlY3Rpb24oKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7CisgICAgQ09NUHRyPElE
V3JpdGVGb250Q29sbGVjdGlvbjE+IGNvbGxlY3Rpb24oUXVlcnksIHN5c3RlbUZvbnRDb2xsZWN0
aW9uKTsKKworICAgIENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9udEZhbWlseSA9IGZvbnRG
YW1pbHlGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQp
OworICAgIGlmICghZm9udEZhbWlseSkgeworICAgICAgICBjb2xsZWN0aW9uID0gd2ViUHJvY2Vz
c0ZvbnRDb2xsZWN0aW9uKCk7CisgICAgICAgIGZvbnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29s
bGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKKyAgICB9CiAK
ICAgICBpZiAoIWZvbnRGYW1pbHkpIHsKICAgICAgICAgLy8gSnVzdCByZXR1cm4gdGhlIGZpcnN0
IHN5c3RlbSBmb250LgotICAgICAgICBociA9IHN5c3RlbUZvbnRDb2xsZWN0aW9uLT5HZXRGb250
RmFtaWx5KDAsICZmb250RmFtaWx5KTsKKyAgICAgICAgY29sbGVjdGlvbiA9IENPTVB0cjxJRFdy
aXRlRm9udENvbGxlY3Rpb24xPihRdWVyeSwgc3lzdGVtRm9udENvbGxlY3Rpb24pOworICAgICAg
ICBociA9IGNvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOwogICAgICAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYXV0byBmYW1pbHlOYW1l
ID0gZmFtaWx5TmFtZUZvckxvY2FsZShmb250RmFtaWx5LmdldCgpLCBsb2NhbGVOYW1lKTsKQEAg
LTIxNSw3ICsyMjAsMjIgQEAgQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1G
bwogICAgIGhyID0gZm9udEZhbWlseS0+R2V0Rmlyc3RNYXRjaGluZ0ZvbnQod2VpZ2h0LCBzdHJl
dGNoLCBzdHlsZSwgJmR3Rm9udCk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0gICAg
cmV0dXJuIGR3Rm9udDsKKyAgICByZXR1cm4geyBkd0ZvbnQsIGNvbGxlY3Rpb24gfTsKK30KKwor
RFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWlnaHQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpCit7
CisgICAgcmV0dXJuIERXUklURV9GT05UX1dFSUdIVF9SRUdVTEFSOworfQorCitEV1JJVEVfRk9O
VF9TVFlMRSBmb250U3R5bGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpCit7CisgICAgcmV0dXJu
IERXUklURV9GT05UX1NUWUxFX05PUk1BTDsKK30KKworRFdSSVRFX0ZPTlRfU1RSRVRDSCBmb250
U3RyZXRjaChjb25zdCBGb250UGxhdGZvcm1EYXRhJikKK3sKKyAgICByZXR1cm4gRFdSSVRFX0ZP
TlRfU1RSRVRDSF9OT1JNQUw7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkocmV2aXNpb24gMjUxMjQzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDggKzM2LDEzIEBAIGludGVyZmFjZSBJRFdyaXRlRm9udENvbGxlY3Rpb24x
OwogaW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5OwogaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRl
cm9wOwogCitlbnVtIERXUklURV9GT05UX1dFSUdIVDsKK2VudW0gRFdSSVRFX0ZPTlRfU1RZTEU7
CitlbnVtIERXUklURV9GT05UX1NUUkVUQ0g7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogbmFtZXNwYWNlIERp
cmVjdFdyaXRlIHsKQEAgLTQ5LDkgKzU0LDEzIEBAIElEV3JpdGVGb250Q29sbGVjdGlvbjEqIHdl
YlByb2Nlc3NGb250Q28KIAogSFJFU1VMVCBhZGRGb250RnJvbURhdGFUb1Byb2Nlc3NDb2xsZWN0
aW9uKGNvbnN0IFZlY3RvcjxjaGFyPiYgZm9udERhdGEpOwogQ09NUHRyPElEV3JpdGVGb250RmFt
aWx5PiBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihJRFdyaXRlRm9udENvbGxlY3Rpb24qLCBjb25z
dCBWZWN0b3I8d2NoYXJfdD4mIGxvY2FsZU5hbWUsIGNvbnN0IExPR0ZPTlQmKTsKLUNPTVB0cjxJ
RFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChjb25zdCBMT0dGT05UJik7CitzdGQ6
OnBhaXI8Q09NUHRyPElEV3JpdGVGb250PiwgQ09NUHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+
PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNvbnN0IExPR0ZPTlQmKTsKIFZlY3Rvcjx3Y2hhcl90
PiBmYW1pbHlOYW1lRm9yTG9jYWxlKElEV3JpdGVGb250RmFtaWx5KiwgY29uc3QgVmVjdG9yPHdj
aGFyX3Q+JiBsb2NhbGVOYW1lKTsKIAorRFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWlnaHQoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOworRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmKTsKK0RXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2goY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYpOworCiB9IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0ZQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
CShyZXZpc2lvbiAyNTEyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUz
LDE0IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YToKIAogICAgIEFT
U0VSVChtX2ZvbnRSZWZlcmVuY2UpOwogCisgICAgYXV0byBmYWNlTmFtZSA9IG1fbmFtZS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpOworICAgIGlmIChmYWNlTmFtZS5zaXplKCkgPiBM
Rl9GQUNFU0laRSkgeworICAgICAgICBmYWNlTmFtZS5yZXNpemUoTEZfRkFDRVNJWkUpOworICAg
ICAgICBmYWNlTmFtZS5sYXN0KCkgPSAwOworICAgIH0KKwogICAgIExPR0ZPTlQgbG9nRm9udCB7
IH07Ci0gICAgbWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBzaXplb2YobG9nRm9udC5sZkZhY2VOYW1lWzBdKSAq
IHN0ZDo6bWluPHNpemVfdD4oc3RhdGljX2Nhc3Q8c2l6ZV90PihMRl9GQUNFU0laRSksIDEgKyBt
X25hbWUubGVuZ3RoKCkpKTsKKyAgICBtZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBmYWNlTmFt
ZS5kYXRhKCksIHNpemVvZihsb2dGb250LmxmRmFjZU5hbWVbMF0pICogc3RkOjptaW48c2l6ZV90
PihzdGF0aWNfY2FzdDxzaXplX3Q+KExGX0ZBQ0VTSVpFKSwgMSArIG1fbmFtZS5sZW5ndGgoKSkp
OwogCiAgICAgbG9nRm9udC5sZkhlaWdodCA9IC1zaXplOwogICAgIGlmIChyZW5kZXJpbmdNb2Rl
ID09IEZvbnRSZW5kZXJpbmdNb2RlOjpOb3JtYWwpCkBAIC04MCw4ICs4Niw4IEBAIEZvbnRQbGF0
Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YToKICAgICBSZXRhaW5QdHI8Q0dGb250UmVm
PiBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQp
KTsKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgY2dGb250Lmdl
dCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01v
ZGU6OkFsdGVybmF0ZSk7CiAjZWxzZQotICAgIENPTVB0cjxJRFdyaXRlRm9udD4gZHdGb250ID0g
RGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9nRm9udCk7Ci0gICAgcmV0dXJu
IEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGR3Rm9udC5nZXQoKSwgc2l6ZSwgYm9s
ZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUp
OworICAgIGF1dG8gY3JlYXRlZEZvbnRQYWlyID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0
Zm9ybUZvbnQobG9nRm9udCk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZSho
Zm9udCksIFdURk1vdmUoZmFjZU5hbWUpLCBXVEZNb3ZlKGNyZWF0ZWRGb250UGFpci5maXJzdCks
IFdURk1vdmUoY3JlYXRlZEZvbnRQYWlyLnNlY29uZCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVu
ZGVyaW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKICNlbmRpZgogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3Jt
RGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjUxMjQz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURh
dGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwyMyArNDIsMzUgQEAgdm9pZCBGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAogewogICAgIExPR0ZPTlQgbG9nZm9udDsK
ICAgICBIUkVTVUxUIGhyID0gOjpHZXRPYmplY3QoZm9udCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9n
Zm9udCk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgIG1fZHdGb250ID0gRGlyZWN0
V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9nZm9udCk7CisgICAgaWYgKFNVQ0NFRURF
RChocikpIHsKKyAgICAgICAgYXV0byBwbGF0Zm9ybUZvbnRQYWlyID0gRGlyZWN0V3JpdGU6OmNy
ZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9nZm9udCk7CisgICAgICAgIG1fZHdGb250ID0gV1RGTW92
ZShwbGF0Zm9ybUZvbnRQYWlyLmZpcnN0KTsKKyAgICAgICAgbV9kd0ZvbnRDb2xsZWN0aW9uID0g
V1RGTW92ZShwbGF0Zm9ybUZvbnRQYWlyLnNlY29uZCk7CisgICAgfQogICAgIFJFTEVBU0VfQVNT
RVJUKG1fZHdGb250KTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2R3Rm9udENvbGxlY3Rpb24pOwog
CiAgICAgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKKyAgICBpbnQgbmFtZUxlbmd0aCA9IHdj
c25sZW4oZmFjZU5hbWUsIExGX0ZBQ0VTSVpFKTsKKyAgICBSRUxFQVNFX0FTU0VSVChuYW1lTGVu
Z3RoID4gMCk7CisgICAgbV9mYWNlTmFtZS5ncm93KG5hbWVMZW5ndGggKyAxKTsKKyAgICB3Y3Nu
Y3B5X3MocmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4obV9mYWNlTmFtZS5kYXRhKCkpLCBuYW1l
TGVuZ3RoICsgMSwgZmFjZU5hbWUsIG5hbWVMZW5ndGgpOworICAgIG1fZmFjZU5hbWUubGFzdCgp
ID0gMDsKKwogICAgIGlmICghbV91c2VHREkpCiAgICAgICAgIG1faXNTeXN0ZW1Gb250ID0gIXdj
c2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3JhbmRlIik7CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmIGhmb250LCBJRFdyaXRlRm9udCog
Zm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYgaGZv
bnQsIFZlY3RvcjxVQ2hhcj4mJiBmYWNlTmFtZSwgQ09NUHRyPElEV3JpdGVGb250PiYmIGZvbnQs
IENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24xPiYmIGNvbGxlY3Rpb24sIGZsb2F0IHNpemUs
IGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKICAgICA6IG1fc3ludGhldGlj
Qm9sZChib2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3Np
emUoc2l6ZSkKICAgICAsIG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RG
TW92ZShoZm9udCkpKQotICAgICwgbV9kd0ZvbnQoZm9udCkKKyAgICAsIG1fZHdGb250KFdURk1v
dmUoZm9udCkpCisgICAgLCBtX2R3Rm9udENvbGxlY3Rpb24oV1RGTW92ZShjb2xsZWN0aW9uKSkK
KyAgICAsIG1fZmFjZU5hbWUoV1RGTW92ZShmYWNlTmFtZSkpCiAgICAgLCBtX3VzZUdESSh1c2VH
REkpCiB7CiAgICAgSFJFU1VMVCBociA9IG1fZHdGb250LT5DcmVhdGVGb250RmFjZSgmbV9kd0Zv
bnRGYWNlKTsKQEAgLTExNiw1NSArMTI4LDYgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybUlzRXF1YWwoYwogICAgICAgICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBv
dGhlci5tX2R3Rm9udC5nZXQoKSk7CiB9CiAKLUhSRVNVTFQgRm9udFBsYXRmb3JtRGF0YTo6Y3Jl
YXRlRmFsbGJhY2tGb250KGNvbnN0IExPR0ZPTlQmIGxvZ0ZvbnQsIElEV3JpdGVGb250KiogZHdG
b250KQotewotICAgIGlmICghZHdGb250KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0g
ICAgKmR3Rm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGxvZ0ZvbnQp
LmdldCgpOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgRm9udFBsYXRmb3JtRGF0
YTo6Y3JlYXRlRmFsbGJhY2tGb250KEhGT05UIGhmb250LCBJRFdyaXRlRm9udCoqIGR3Rm9udCkK
LXsKLSAgICBpZiAoIWR3Rm9udCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgIENP
TVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IGZvbnRDb2xsZWN0aW9uOwotICAgIEhSRVNVTFQg
aHIgPSBEaXJlY3RXcml0ZTo6ZmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250Q29sbGVjdGlvbigmZm9u
dENvbGxlY3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0K
LSAgICBIV25kREMgaGRjKDApOwotICAgIEhHRElPQkogb2xkRm9udCA9IDo6U2VsZWN0T2JqZWN0
KGhkYywgaGZvbnQpOwotCi0gICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gZm9udEZhY2U7Ci0g
ICAgaHIgPSBEaXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgpLT5DcmVhdGVGb250RmFjZUZyb21IZGMo
aGRjLCAmZm9udEZhY2UpOwotICAgIGlmIChGQUlMRUQoaHIpKSB7Ci0gICAgICAgIDo6U2VsZWN0
T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgICAgIHJldHVybiBocjsKLSAgICB9Ci0KLSAgICBM
T0dGT05UIGdkaUJhc2VkRm9udCA9IHsgfTsKLSAgICBociA9IERpcmVjdFdyaXRlOjpnZGlJbnRl
cm9wKCktPkNvbnZlcnRGb250RmFjZVRvTE9HRk9OVChmb250RmFjZS5nZXQoKSwgJmdkaUJhc2Vk
Rm9udCk7Ci0gICAgaWYgKEZBSUxFRChocikpIHsKLSAgICAgICAgOjpTZWxlY3RPYmplY3QoaGRj
LCBvbGRGb250KTsKLSAgICAgICAgcmV0dXJuIGhyOwotICAgIH0KLQotICAgIGhyID0gZm9udENv
bGxlY3Rpb24tPkdldEZvbnRGcm9tRm9udEZhY2UoZm9udEZhY2UuZ2V0KCksIGR3Rm9udCk7Ci0K
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIGhyID0gRGlyZWN0V3JpdGU6OndlYlBy
b2Nlc3NGb250Q29sbGVjdGlvbigpLT5HZXRGb250RnJvbUZvbnRGYWNlKGZvbnRGYWNlLmdldCgp
LCBkd0ZvbnQpOwotCi0gICAgOjpTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICBpZiAo
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgcmV0dXJuIGNyZWF0ZUZh
bGxiYWNrRm9udChnZGlCYXNlZEZvbnQsIGR3Rm9udCk7Ci19Ci0KIH0KIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3Bw
CShyZXZpc2lvbiAyNTEyNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDExIEBACiAjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJUZXh0UnVu
LmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKKyNpZiAhVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRy
b2xsZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDYgKzUxLDgg
QEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorI2lmICFVU0UoRElSRUNUMkQpCisKIHZvaWQgRm9udENhc2NhZGU6OmFkanVz
dFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJl
Y3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewog
ICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKQEAgLTExMyw0ICsxMTcsNiBA
QCBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tCiAgICAgcmV0dXJuIGNv
bnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQog
CisjZW5kaWYKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAko
cmV2aXNpb24gMjUxMjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBhdXRv
JiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKIAogICAgIFVDaGFyIGxv
Y2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9OwotICAgIGludCBsb2Nh
bGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdT
VFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgaW50IGxvY2Fs
ZUxlbmd0aCA9IDo6R2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBX
U1RSPigmbG9jYWxlTmFtZSksIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKGxvY2FsZUxlbmd0aCA8PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKICAgICBsb2Nh
bGVOYW1lW2xvY2FsZUxlbmd0aF0gPSAnXDAnOwogCkBAIC01OSwyMCArNTksNDEgQEAgYm9vbCBH
bHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaQogICAgIGhyID0gYW5hbHl6ZXItPkFu
YWx5emVTY3JpcHQoJmhlbHBlciwgMCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQg
PSAwOwotICAgIEdseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICBH
bHlwaCBjbHVzdGVyTWFwW0dseXBoUGFnZTo6c2l6ZV07CisgICAgVmVjdG9yPEdseXBoPiBnbHlw
aHMoR2x5cGhQYWdlOjpzaXplLCAwKTsKKyAgICBWZWN0b3I8R2x5cGg+IGNsdXN0ZXJNYXAoR2x5
cGhQYWdlOjpzaXplLCAwKTsKICAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJU
SUVTPiB0ZXh0UHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUpOwogICAgIFZlY3RvcjxEV1JJVEVf
U0hBUElOR19HTFlQSF9QUk9QRVJUSUVTPiBnbHlwaFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXpl
KTsKIAotICAgIGhyID0gYW5hbHl6ZXItPkdldEdseXBocyhyZWludGVycHJldF9jYXN0PExQQ1dT
VFI+KGJ1ZmZlciksIGJ1ZmZlckxlbmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCks
IGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsLCBmYWxzZSwKLSAgICAgICAgJmhlbHBlci5tX2FuYWx5c2lzLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGNsdXN0ZXJNYXAsIHRleHRQ
cm9wZXJ0aWVzLmRhdGEoKSwKLSAgICAgICAgbG9jYWxHbHlwaEJ1ZmZlciwgZ2x5cGhQcm9wZXJ0
aWVzLmRhdGEoKSwgJnJldHVybmVkQ291bnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IFdDSEFSKiB0ZXh0U3RhcnQgPSByZWludGVy
cHJldF9jYXN0PExQQ1dTVFI+KGJ1ZmZlcik7CisgICAgY29uc3QgV0NIQVIqIHRleHQgPSB0ZXh0
U3RhcnQ7CisgICAgR2x5cGgqIGdseXBoRGF0YSA9IGdseXBocy5kYXRhKCk7CisgICAgR2x5cGgq
IGNsdXN0ZXJNYXBEYXRhID0gY2x1c3Rlck1hcC5kYXRhKCk7CisgICAgRFdSSVRFX1NIQVBJTkdf
VEVYVF9QUk9QRVJUSUVTKiB0ZXh0UHJvcGVydGllc0RhdGEgPSB0ZXh0UHJvcGVydGllcy5kYXRh
KCk7CisgICAgRFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUyogZ2x5cGhQcm9wZXJ0aWVz
RGF0YSA9IGdseXBoUHJvcGVydGllcy5kYXRhKCk7CisKKyAgICB1bnNpZ25lZCB0b3RhbCA9IDA7
CisgICAgdW5zaWduZWQgbWF4R2x5cGhDb3VudCA9IEdseXBoUGFnZTo6c2l6ZTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCh0b3RhbCArIHJ1bi5sZW5ndGggPD0gYnVmZmVyTGVuZ3RoKTsKKworICAgICAg
ICB1bnNpZ25lZCByZXR1cm5lZENvdW50ID0gMDsKKyAgICAgICAgaHIgPSBhbmFseXplci0+R2V0
R2x5cGhzKHRleHQsIHJ1bi5sZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBm
b250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCwgZmFsc2UsCisgICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCAwLCBtYXhHbHlwaENvdW50LCBjbHVzdGVyTWFwRGF0YSwgdGV4dFBy
b3BlcnRpZXNEYXRhLAorICAgICAgICAgICAgZ2x5cGhEYXRhLCBnbHlwaFByb3BlcnRpZXNEYXRh
LCAmcmV0dXJuZWRDb3VudCk7CisKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHRleHQgKz0gcmV0dXJuZWRDb3VudDsKKyAg
ICAgICAgZ2x5cGhEYXRhICs9IHJldHVybmVkQ291bnQ7CisgICAgICAgIGNsdXN0ZXJNYXBEYXRh
ICs9IHJldHVybmVkQ291bnQ7CisgICAgICAgIHRleHRQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5l
ZENvdW50OworICAgICAgICBnbHlwaFByb3BlcnRpZXNEYXRhICs9IHJldHVybmVkQ291bnQ7Cisg
ICAgICAgIG1heEdseXBoQ291bnQgLT0gcmV0dXJuZWRDb3VudDsKKyAgICB9CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgR2x5
cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgeworICAgICAgICBHbHlwaCBnbHlwaCA9IGdseXBo
c1tpXTsKICAgICAgICAgaWYgKCFnbHlwaCkKICAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgo
aSwgMCk7CiAgICAgICAgIGVsc2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAJKHJldmlz
aW9uIDI1MTI0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0
QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dEFuYWx5emVySGVscGVyOjpUZXh0QW5hbHl6ZXJIZWxw
ZXIoV0NIQVIqIGxvY2FsZU5hbWUsIFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCkKK1RleHRBbmFseXplckhlbHBlcjo6VGV4dEFuYWx5emVySGVscGVyKGNvbnN0IFdDSEFSKiBs
b2NhbGVOYW1lLCBjb25zdCBXQ0hBUiogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCiAg
ICAgOiBtX2xvY2FsZU5hbWUobG9jYWxlTmFtZSkKICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKICAg
ICAsIG1fYnVmZmVyTGVuZ3RoKGJ1ZmZlckxlbmd0aCkKQEAgLTEyMiw3ICsxMjIsOCBAQCBIUkVT
VUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TGluZUJyZWFrCiAKIEhSRVNVTFQgVGV4dEFuYWx5
emVySGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIg
dGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyogYW5hbHlzaXMpCiB7Ci0g
ICAgbV9hbmFseXNpcyA9ICphbmFseXNpczsKKyAgICBBbmFseXplZFJ1biBjdXJyZW50ID0geyB0
ZXh0UG9zaXRpb24sIHRleHRMZW5ndGgsICphbmFseXNpcyB9OworICAgIG1fYW5hbHl6ZWRSdW5z
LmFwcGVuZChXVEZNb3ZlKGN1cnJlbnQpKTsKIAogICAgIHJldHVybiBTX09LOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0
QW5hbHl6ZXJIZWxwZXIuaAkocmV2aXNpb24gMjUxMjQzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMSArMjYsMTggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8ZHdyaXRlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBB
bmFseXplZFJ1biB7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiB7IDAgfTsKKyAgICB1bnNp
Z25lZCBsZW5ndGggeyAwIH07CisgICAgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBhbmFseXNpczsK
K307CisKIHN0cnVjdCBUZXh0QW5hbHl6ZXJIZWxwZXIgOiBwdWJsaWMgSURXcml0ZVRleHRBbmFs
eXNpc1NpbmssIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgewotICAgIFRleHRBbmFseXplckhl
bHBlcihXQ0hBUiogbG9jYWxlTmFtZSwgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoKTsKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIoY29uc3QgV0NIQVIqIGxvY2FsZU5hbWUsIGNv
bnN0IFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCk7CiAKICAgICAvLyBJVW5r
bm93bgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFj
ZShfSW5fIFJFRklJRCwgX0NPTV9PdXRwdHJfIHZvaWQqKik7CkBAIC01MCwxMCArNTcsMTAgQEAg
c3RydWN0IFRleHRBbmFseXplckhlbHBlciA6IHB1YmxpYyBJRFdyaQogICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRCaWRpTGV2ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwg
VUlOVDMyIHRleHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2
ZWwpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXROdW1iZXJTdWJz
dGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3JpdGVO
dW1iZXJTdWJzdGl0dXRpb24qKTsKIAotICAgIFdDSEFSKiBtX2xvY2FsZU5hbWUgeyBudWxscHRy
IH07Ci0gICAgV0NIQVIqIG1fYnVmZmVyIHsgbnVsbHB0ciB9OworICAgIGNvbnN0IFdDSEFSKiBt
X2xvY2FsZU5hbWUgeyBudWxscHRyIH07CisgICAgY29uc3QgV0NIQVIqIG1fYnVmZmVyIHsgbnVs
bHB0ciB9OwogICAgIHVuc2lnbmVkIG1fYnVmZmVyTGVuZ3RoIHsgMCB9OwotICAgIERXUklURV9T
Q1JJUFRfQU5BTFlTSVMgbV9hbmFseXNpcyB7IH07CisgICAgVmVjdG9yPEFuYWx5emVkUnVuPiBt
X2FuYWx5emVkUnVuczsKICAgICBVTE9ORyBtX3JlZkNvdW50IHsgMCB9OwogfTsKIAo=
</data>
<flag name="review"
          id="397887"
          type_id="1"
          status="-"
          setter="fujii"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382204</attachid>
            <date>2019-10-29 12:16:39 -0700</date>
            <delta_ts>2019-10-29 20:02:58 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>brent.patch</filename>
            <type>text/plain</type>
            <size>32393</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTEwLTI5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEFkb3B0IERpcmVj
dFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY5
NTEzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHN3aXRjaGVzIGZyb20gdGhlIFVuaXNjcmliZSB0ZXh0IGNvbnRyb2xsZXIgdG8g
YQorICAgICAgICBEaXJlY3RXcml0ZSBiYXNlZCBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBUcmVhdCBXaW5kb3dzCisgICAgICAg
IGxpa2UgYW55IG90aGVyIENvbXBsZXhUZXh0Q29udHJvbGxlciBwbGF0Zm9ybS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtR2x5cGhJbml0KTogQWRkIGhhY2sgZm9yIERpcmVjdFdyaXRlCisgICAgICAgIHplcm8t
d2lkdGggc3BhY2UgaGFuZGxpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFu
Z2UgY29uc3QpOiBEb24ndCB1c2UgVW5pc2NyaWJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udENvbGxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6ZmFjZU5hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFwZSk6IEFkZGVkLAorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udCk6
IE1vZGlmeSB0byByZXR1cm4gYQorICAgICAgICBwYWlyIG9mIGZvbnQgYW5kIGZvbnQgY29sbGVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250V2VpZ2h0KTogQWRkZWQg
c3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3RyZXRjaCk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEpOiBBZGQgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbiB0byBoZWxwIERpcmVjdFdyaXRlIGhh
bmRsZSBmb250IHN0eWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpjcmVhdGVGYWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOiBVcGRhdGUgdG8gaGFuZGxlIG11bHRpcGxlIHJ1bnMgaW4gYQorICAgICAgICBnaXZl
biBzdHJpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFs
eXplckhlbHBlcik6IFVwZGF0ZSB0byBoYW5kbGUKKyAgICAgICAgYW5hbHlzaXMgb2Ygc3RyaW5n
cyB3aXRoIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxw
ZXI6OlNldFNjcmlwdEFuYWx5c2lzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oOgorCiAyMDE5LTEwLTI5ICBUcnVpdHQgU2F2ZWxs
ICA8dHNhdmVsbEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjI1MTYzOS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyNTE3MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93
aW4vQ3VybFNTTEhhbmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9h
ZEJ1bmRsZVdpbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjUxNzE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSNpZiBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJ
UkVDVDJEKQogCiBjbGFzcyBUZXh0TGF5b3V0IHsKIH07CkBAIC02Myw2ICs2MywxMSBAQCBmbG9h
dCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuCiAgICAgcmV0dXJuIDA7CiB9CiAK
K3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hh
cmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRm9udCopCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKICNlbHNlCiAKIGNsYXNzIFRleHRMYXlv
dXQgewpAQCAtMTQ2LDcgKzE1MSw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRl
eHRDb250cm8KICAgICAsIG1fbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24obWF5VXNlTmF0
dXJhbFdyaXRpbmdEaXJlY3Rpb24pCiAgICAgLCBtX2ZvclRleHRFbXBoYXNpcyhmb3JUZXh0RW1w
aGFzaXMpCiB7Ci0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShE
SVJFQ1QyRCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMjUxNzE3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOSwxOSArMTE5LDIwIEBAIHZvaWQgRm9udDo6cGxhdGZvcm1HbHlwaEluaXQoKQog
ICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQgdGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3aWR0aC4g
T3RoZXJ3aXNlIHdlIHJvdW5kLgogICAgIGlmIChnbHlwaFBhZ2VTcGFjZSkKICAgICAgICAgbV9z
cGFjZUdseXBoID0gZ2x5cGhQYWdlU3BhY2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihzcGFjZSku
Z2x5cGg7Ci0gICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7Ci0g
ICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7CiAgICAgaWYgKGdseXBoUGFnZUNoYXJhY3Rlclplcm8p
CiAgICAgICAgIG1femVyb0dseXBoID0gZ2x5cGhQYWdlQ2hhcmFjdGVyWmVyby0+Z2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKCcwJykuZ2x5cGg7Ci0gICAgbV9mb250TWV0cmljcy5zZXRaZXJvV2lkdGgo
d2lkdGhGb3JHbHlwaChtX3plcm9HbHlwaCkpOwotICAgIGRldGVybWluZVBpdGNoKCk7Ci0gICAg
bV9hZGp1c3RlZFNwYWNlV2lkdGggPSBtX3RyZWF0QXNGaXhlZFBpdGNoID8gY2VpbGYod2lkdGgp
IDogcm91bmRmKHdpZHRoKTsKIAogICAgIC8vIEZvcmNlIHRoZSBnbHlwaCBmb3IgWkVSTyBXSURU
SCBTUEFDRSB0byBoYXZlIHplcm8gd2lkdGgsIHVubGVzcyBpdCBpcyBzaGFyZWQgd2l0aCBTUEFD
RS4KICAgICAvLyBIZWx2ZXRpY2EgaXMgYW4gZXhhbXBsZSBvZiBhIG5vbi16ZXJvIHdpZHRoIFpF
Uk8gV0lEVEggU1BBQ0UgZ2x5cGguCiAgICAgLy8gU2VlIDxodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzE3OD4gYW5kIEZvbnQ6OmlzWmVyb1dpZHRoU3BhY2VHbHlwaCgp
CiAgICAgaWYgKG1femVyb1dpZHRoU3BhY2VHbHlwaCA9PSBtX3NwYWNlR2x5cGgpCiAgICAgICAg
IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7CisKKyAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9y
R2x5cGgobV9zcGFjZUdseXBoKTsKKyAgICBtX3NwYWNlV2lkdGggPSB3aWR0aDsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7CisgICAg
ZGV0ZXJtaW5lUGl0Y2goKTsKKyAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwogfQogCiBGb250Ojp+Rm9u
dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCShyZXZpc2lvbiAyNTE3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShXSU4p
ICYmICFVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgogI2Vu
ZGlmCiAKQEAgLTM1MCw3ICszNTAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRS
YW5nZShjb25zCiAKICAgICBhdXRvIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAg
IGlmIChjb2RlUGF0aFRvVXNlID09IENvbXBsZXgpIHsKLSNpZiBQTEFURk9STShXSU4pCisjaWYg
UExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQogICAgICAgICBVbmlzY3JpYmVDb250cm9s
bGVyIGl0KHRoaXMsIHJ1bik7CiAgICAgICAgIGl0LmFkdmFuY2UoZnJvbSk7CiAgICAgICAgIG9m
ZnNldEJlZm9yZVJhbmdlID0gaXQucnVuV2lkdGhTb0ZhcigpOwpAQCAtMTM5Nyw3ICsxMzk3LDcg
QEAgZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRgogICAgIHJldHVybiBp
bml0aWFsQWR2YW5jZTsKIH0KIAotI2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJ
TikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBm
b3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7CkBAIC0x
NTQ1LDcgKzE1NDUsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRl
CiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0KIAotI2lmICFQTEFURk9STShXSU4p
CisjaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogZmxvYXQgRm9udENhc2NhZGU6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBj
b25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4s
IHRydWUsIGZhbGxiYWNrRm9udHMpOwpAQCAtMTU3OCw3ICsxNTc4LDcgQEAgdm9pZCBGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvcgogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgo
TGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpKTsKIH0K
IAotI2lmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJE
KQogdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIoKnRoaXMsIHJ1bik7CkBAIC0xNjM4LDcgKzE2MzgsNyBAQCBpbnQgRm9udENhc2NhZGU6
Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotI2lmICFQ
TEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKFdJTikgfHwgVVNFKERJUkVDVDJEKQogaW50IEZv
bnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJ
KHJldmlzaW9uIDI1MTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KFdJTikKKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogdHlwZWRlZiBzdHJ1Y3QgSEZPTlRf
XyogSEZPTlQ7CiBpbnRlcmZhY2UgSURXcml0ZUZvbnQ7CkBAIC0xMDMsNyArMTA1LDcgQEAgcHVi
bGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pICYmIFVTRShESVJFQ1QyRCkKLSAgICBG
b250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiwgSURXcml0ZUZvbnQqLCBmbG9hdCBz
aXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VH
REkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmLCBWZWN0b3I8VUNo
YXI+JiYgZmFjZU5hbWUsIENPTVB0cjxJRFdyaXRlRm9udD4mJiwgQ09NUHRyPElEV3JpdGVGb250
Q29sbGVjdGlvbjE+JiYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikg
JiYgVVNFKENBSVJPKQpAQCAtMTQzLDkgKzE0NSw4IEBAIHB1YmxpYzoKICNpZiBVU0UoRElSRUNU
MkQpCiAgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250Lmdl
dCgpOyB9CiAgICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9kd0ZvbnRGYWNlLmdldCgpOyB9Ci0KLSAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVGYWxsYmFj
a0ZvbnQoY29uc3QgTE9HRk9OVCYsIElEV3JpdGVGb250KiopOwotICAgIHN0YXRpYyBIUkVTVUxU
IGNyZWF0ZUZhbGxiYWNrRm9udChIRk9OVCwgSURXcml0ZUZvbnQqKik7CisgICAgSURXcml0ZUZv
bnRDb2xsZWN0aW9uMSogZHdGb250Q29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250
Q29sbGVjdGlvbi5nZXQoKTsgfQorICAgIExQQ1dTVFIgZmFjZU5hbWUoKSBjb25zdCB7IHJldHVy
biByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KG1fZmFjZU5hbWUuZGF0YSgpKTsgfQogI2VuZGlm
CiAKICAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNvbnN0OwpAQCAtMjM4LDYgKzIzOSw4IEBAIHBy
aXZhdGU6CiAjaWYgVVNFKERJUkVDVDJEKQogICAgIENPTVB0cjxJRFdyaXRlRm9udD4gbV9kd0Zv
bnQ7CiAgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gbV9kd0ZvbnRGYWNlOworICAgIENPTVB0
cjxJRFdyaXRlRm9udENvbGxlY3Rpb24xPiBtX2R3Rm9udENvbGxlY3Rpb247CisgICAgVmVjdG9y
PFVDaGFyPiBtX2ZhY2VOYW1lOwogI2VuZGlmCiAKICNpZiBVU0UoQ0FJUk8pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGly
ZWN0V3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJKHJldmlzaW9uIDI1
MTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4
dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwx
NDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xs
ZXIuaCIKIAorI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
KyNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xs
ZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCB1
bnNpZ25lZCwgY29uc3QgRm9udCopCitzdGF0aWMgYm9vbCBzaGFwZShJRFdyaXRlVGV4dEFuYWx5
emVyKiBhbmFseXplciwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyYgYW5hbHlzaXMsIGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEsIGNvbnN0IFdDSEFSKiB0ZXh0
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50LCBWZWN0b3I8R2x5cGg+
JiBnbHlwaHMsIFZlY3RvcjxHbHlwaD4mIGNsdXN0ZXJNYXAsIFZlY3RvcjxEV1JJVEVfU0hBUElO
R19URVhUX1BST1BFUlRJRVM+JiB0ZXh0UHJvcGVydGllcywgVmVjdG9yPERXUklURV9TSEFQSU5H
X0dMWVBIX1BST1BFUlRJRVM+JiBnbHlwaFByb3BlcnRpZXMsIHVuc2lnbmVkJiBnbHlwaENvdW50
KQoreworICAgIEhSRVNVTFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7CisKKyAgICBkbyB7Cisg
ICAgICAgIHNoYXBlUmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0LCBsZW5ndGgsIGZv
bnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9u
KCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCisgICAgICAgICAgICAmYW5h
bHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIHN1Z2dlc3RlZENv
dW50LCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAorICAgICAgICAg
ICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJmdseXBoQ291bnQpOwor
CisgICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAg
ICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KKyAgICAgICAgICAgIGdseXBocy5yZXNp
emUoZ2x5cGhzLnNpemUoKSAqIDIpOworICAgICAgICAgICAgY2x1c3Rlck1hcC5yZXNpemUoZ2x5
cGhzLnNpemUoKSk7CisgICAgICAgICAgICB0ZXh0UHJvcGVydGllcy5yZXNpemUoZ2x5cGhzLnNp
emUoKSk7CisgICAgICAgICAgICBnbHlwaFByb3BlcnRpZXMucmVzaXplKGdseXBocy5zaXplKCkp
OworICAgICAgICB9CisgICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisKKyAgICBpZiAoRkFJTEVEKHNoYXBlUmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZ2x5cGhzLnNocmluayhnbHlwaENvdW50KTsKKyAgICBjbHVzdGVyTWFwLnNocmluayhn
bHlwaENvdW50KTsKKyAgICB0ZXh0UHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAg
Z2x5cGhQcm9wZXJ0aWVzLnNocmluayhnbHlwaENvdW50KTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0Zv
ckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0
cmluZ0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpZiAoIWZvbnQpIHsKKyAg
ICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHByaW1hcnkg
Zm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpj
cmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCAw
LCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CisKKyAgICB3Y2hh
cl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9OworICAgIGlu
dCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2Fz
dDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgUkVM
RUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAg
IGxvY2FsZU5hbWVbbG9jYWxlTGVuZ3RoXSA9IDA7CisKKyAgICBWZWN0b3I8RFdSSVRFX0ZPTlRf
RkVBVFVSRT4gZm9udEZlYXR1cmVzKDEpOworICAgIGZvbnRGZWF0dXJlc1swXS5uYW1lVGFnID0g
RFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfS0VSTklORzsKKyAgICBmb250RmVhdHVyZXNbMF0ucGFy
YW1ldGVyID0gbV9mb250LmVuYWJsZUtlcm5pbmcoKSA/IDEgOiAwOworCisgICAgaWYgKGZvbnRQ
bGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKQor
ICAgICAgICBmb250RmVhdHVyZXMuYXBwZW5kKHtEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19WRVJU
SUNBTF9XUklUSU5HLCAxfSk7CisKKyAgICBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMgdXNl
ZEZlYXR1cmVzOworICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJlcyA9IGZvbnRGZWF0dXJlcy5kYXRh
KCk7CisgICAgdXNlZEZlYXR1cmVzLmZlYXR1cmVDb3VudCA9IGZvbnRGZWF0dXJlcy5zaXplKCk7
CisKKyAgICBWZWN0b3I8Y29uc3QgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTKj4gZmVhdHVy
ZXM7CisgICAgZmVhdHVyZXMuYXBwZW5kKCZ1c2VkRmVhdHVyZXMpOworCisgICAgQ09NUHRyPElE
V3JpdGVUZXh0QW5hbHl6ZXI+IGFuYWx5emVyOworICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0
ZTo6ZmFjdG9yeSgpLT5DcmVhdGVUZXh0QW5hbHl6ZXIoJmFuYWx5emVyKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIFRleHRBbmFseXplckhlbHBlciBoZWxwZXIo
cmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgcmVpbnRlcnByZXRfY2FzdDxM
UENXU1RSPihjcCksIGxlbmd0aCk7CisKKyAgICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0
KCZoZWxwZXIsIDAsIGxlbmd0aCwgJmhlbHBlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisKKyAgICB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCA9ICgzICogbGVuZ3RoIC8g
MiArIDE2KTsKKworICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBjcDsKKyAgICBjb25zdCBX
Q0hBUiogdGV4dFN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihjcCk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBydW4gOiBoZWxwZXIubV9hbmFseXplZFJ1bnMpIHsKKyAgICAgICAgVmVj
dG9yPEdseXBoPiBnbHlwaHMoc3VnZ2VzdGVkQ291bnQpOworICAgICAgICBWZWN0b3I8R2x5cGg+
IGNsdXN0ZXJNYXAoc3VnZ2VzdGVkQ291bnQpOworICAgICAgICBWZWN0b3I8RFdSSVRFX1NIQVBJ
TkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0UHJvcGVydGllcyhzdWdnZXN0ZWRDb3VudCk7CisgICAg
ICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTPiBnbHlwaFByb3BlcnRp
ZXMoc3VnZ2VzdGVkQ291bnQpOworCisgICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBj
cCArIHJ1bi5zdGFydFBvc2l0aW9uOworICAgICAgICBMUENXU1RSIHRleHRQb3NpdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3VycmVudENQKTsKKworICAgICAgICB1bnNpZ25lZCBn
bHlwaENvdW50ID0gMDsKKyAgICAgICAgaWYgKCFzaGFwZShhbmFseXplci5nZXQoKSwgcnVuLmFu
YWx5c2lzLCBmb250UGxhdGZvcm1EYXRhLCB0ZXh0UG9zaXRpb24sIHJ1bi5sZW5ndGgsIHN1Z2dl
c3RlZENvdW50LCBnbHlwaHMsIGNsdXN0ZXJNYXAsIHRleHRQcm9wZXJ0aWVzLCBnbHlwaFByb3Bl
cnRpZXMsIGdseXBoQ291bnQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3Rv
cjxGTE9BVD4gZ2x5cGhBZHZhbmNlcyhnbHlwaENvdW50KTsKKyAgICAgICAgVmVjdG9yPERXUklU
RV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhnbHlwaENvdW50KTsKKworICAgICAgICBIUkVT
VUxUIHBsYWNlbWVudFJlc3VsdCA9IGFuYWx5emVyLT5HZXRHbHlwaFBsYWNlbWVudHModGV4dFBv
c2l0aW9uLCBjbHVzdGVyTWFwLmRhdGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLCBydW4ubGVu
Z3RoLAorICAgICAgICAgICAgZ2x5cGhzLmRhdGEoKSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwg
Z2x5cGhDb3VudCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCksCisgICAgICAgICAgICBm
b250UGxhdGZvcm1EYXRhLnNpemUoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIG1fcnVuLmx0cigpLAorICAgICAgICAgICAgJnJ1
bi5hbmFseXNpcywgcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihsb2NhbGVOYW1lKSwgCisgICAg
ICAgICAgICBmZWF0dXJlcy5kYXRhKCksICZydW4ubGVuZ3RoLCAxLAorICAgICAgICAgICAgZ2x5
cGhBZHZhbmNlcy5kYXRhKCksIGdseXBoT2Zmc2V0cy5kYXRhKCkpOworICAgICAgICBpZiAoRkFJ
TEVEKHBsYWNlbWVudFJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8g
Q29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzcGFjZXMgdG8gdXNl
IHRoZSBzcGFjZSBnbHlwaC4KKyAgICAgICAgLy8gV2UgYWxzbyBjcmVhdGUgYSBtYXAgdGhhdCBh
bGxvd3MgdXMgdG8gcXVpY2tseSBnbyBmcm9tIHNwYWNlIGdseXBocyBiYWNrIHRvIHRoZWlyIGNv
cnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KKyAgICAgICAgVmVjdG9yPGludD4gc3BhY2VDaGFyYWN0
ZXJzKGdseXBocy5zaXplKCkpOworICAgICAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgtMSk7CisK
KyAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQtPnNwYWNlV2lkdGgoKSAtIGZvbnQtPnN5
bnRoZXRpY0JvbGRPZmZzZXQoKTsKKworICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHJ1bi5s
ZW5ndGg7ICsraykgeworICAgICAgICAgICAgVUNoYXIgY2ggPSAqKGN1cnJlbnRDUCArIGspOwor
ICAgICAgICAgICAgYm9vbCB0cmVhdEFzU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNl
KGNoKTsKKyAgICAgICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNlID0gRm9udENhc2Nh
ZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7CisgICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlIHx8IHRyZWF0QXNaZXJvV2lkdGhTcGFjZSkgeworICAgICAgICAgICAgICAgIC8vIFN1YnN0
aXR1dGUgaW4gdGhlIHNwYWNlIGdseXBoIGF0IHRoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUg
Z2x5cGhzCisgICAgICAgICAgICAgICAgLy8gYXJyYXkuCisgICAgICAgICAgICAgICAgZ2x5cGhz
W2NsdXN0ZXJNYXBba11dID0gZm9udC0+c3BhY2VHbHlwaCgpOworICAgICAgICAgICAgICAgIGds
eXBoQWR2YW5jZXNbY2x1c3Rlck1hcFtrXV0gPSB0cmVhdEFzU3BhY2UgPyBzcGFjZVdpZHRoIDog
MDsKKyAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlKQorICAgICAgICAgICAgICAgICAg
ICBzcGFjZUNoYXJhY3RlcnNbY2x1c3Rlck1hcFtrXV0gPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBr
ICsgcnVuLnN0YXJ0UG9zaXRpb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2lucyhnbHlwaENvdW50KTsKKyAgICAgICAgVmVjdG9y
PEZsb2F0U2l6ZT4gYWR2YW5jZXMoZ2x5cGhDb3VudCk7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gc3RyaW5nSW5kaWNlcyhnbHlwaENvdW50KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBnbHlwaENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ0luZGljZXNbaV0gPSBp
OworICAgICAgICAgICAgb3JpZ2luc1tpXSA9IEZsb2F0UG9pbnQoZ2x5cGhPZmZzZXRzW2ldLmFk
dmFuY2VPZmZzZXQsIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCk7CisgICAgICAgICAg
ICBhZHZhbmNlc1tpXSA9IEZsb2F0U2l6ZShnbHlwaEFkdmFuY2VzW2ldLCAwKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3Jl
YXRlKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIEZsb2F0U2l6ZSgp
LCAqZm9udCwgY3VycmVudENQLCAwLCBydW4ubGVuZ3RoLCAwLCBydW4ubGVuZ3RoLCBtX3J1bi5s
dHIoKSkpOworCisgICAgICAgIGN1cnJlbnRDUCArPSBydW4ubGVuZ3RoOworICAgIH0KIH0KIAog
fQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9E
aXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjUx
NzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRl
VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDI1ICsxODEsMzAgQEAgQ09NUHRy
PElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5Rm9yQwogICAgIHJldHVybiBudWxscHRyOwog
fQogCi1DT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9H
Rk9OVCYgbG9nRm9udCkKK3N0ZDo6cGFpcjxDT01QdHI8SURXcml0ZUZvbnQ+LCBDT01QdHI8SURX
cml0ZUZvbnRDb2xsZWN0aW9uMT4+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9O
VCYgbG9nRm9udCkKIHsKICAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBzeXN0ZW1G
b250Q29sbGVjdGlvbjsKICAgICBIUkVTVUxUIGhyID0gZmFjdG9yeSgpLT5HZXRTeXN0ZW1Gb250
Q29sbGVjdGlvbigmc3lzdGVtRm9udENvbGxlY3Rpb24pOwogICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3Rv
cjx3Y2hhcl90PiBsb2NhbGVOYW1lKExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwogICAgIGludCBs
b2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFtZS5kYXRhKCks
IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwogCi0gICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5
PiBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oc3lzdGVtRm9udENvbGxlY3Rp
b24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOwotICAgIGlmICghZm9udEZhbWlseSkKLSAg
ICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKHdlYlByb2Nlc3NGb250
Q29sbGVjdGlvbigpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKKyAgICBDT01QdHI8SURXcml0ZUZv
bnRDb2xsZWN0aW9uMT4gY29sbGVjdGlvbihRdWVyeSwgc3lzdGVtRm9udENvbGxlY3Rpb24pOwor
CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5ID0gZm9udEZhbWlseUZv
ckNvbGxlY3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7CisgICAg
aWYgKCFmb250RmFtaWx5KSB7CisgICAgICAgIGNvbGxlY3Rpb24gPSB3ZWJQcm9jZXNzRm9udENv
bGxlY3Rpb24oKTsKKyAgICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9u
KGNvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOworICAgIH0KIAogICAgIGlm
ICghZm9udEZhbWlseSkgewogICAgICAgICAvLyBKdXN0IHJldHVybiB0aGUgZmlyc3Qgc3lzdGVt
IGZvbnQuCi0gICAgICAgIGhyID0gc3lzdGVtRm9udENvbGxlY3Rpb24tPkdldEZvbnRGYW1pbHko
MCwgJmZvbnRGYW1pbHkpOworICAgICAgICBjb2xsZWN0aW9uID0gQ09NUHRyPElEV3JpdGVGb250
Q29sbGVjdGlvbjE+KFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlvbik7CisgICAgICAgIGhyID0g
Y29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAmZm9udEZhbWlseSk7CiAgICAgICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1
cm4geyB9OwogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBhdXRvIGZhbWlseU5hbWUgPSBmYW1p
bHlOYW1lRm9yTG9jYWxlKGZvbnRGYW1pbHkuZ2V0KCksIGxvY2FsZU5hbWUpOwpAQCAtMjE1LDcg
KzIyMCwyMiBAQCBDT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvCiAgICAg
aHIgPSBmb250RmFtaWx5LT5HZXRGaXJzdE1hdGNoaW5nRm9udCh3ZWlnaHQsIHN0cmV0Y2gsIHN0
eWxlLCAmZHdGb250KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICByZXR1cm4g
ZHdGb250OworICAgIHJldHVybiB7IGR3Rm9udCwgY29sbGVjdGlvbiB9OworfQorCitEV1JJVEVf
Rk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250UGxhdGZvcm1EYXRhJikKK3sKKyAgICBy
ZXR1cm4gRFdSSVRFX0ZPTlRfV0VJR0hUX1JFR1VMQVI7Cit9CisKK0RXUklURV9GT05UX1NUWUxF
IGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJikKK3sKKyAgICByZXR1cm4gRFdSSVRF
X0ZPTlRfU1RZTEVfTk9STUFMOworfQorCitEV1JJVEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNo
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQoreworICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFJF
VENIX05PUk1BTDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RX
cml0ZVV0aWxpdGllcy5oCShyZXZpc2lvbiAyNTE3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsOCArMzYsMTMgQEAgaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjE7CiBpbnRl
cmZhY2UgSURXcml0ZUZvbnRGYW1pbHk7CiBpbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7CiAK
K2VudW0gRFdSSVRFX0ZPTlRfV0VJR0hUOworZW51bSBEV1JJVEVfRk9OVF9TVFlMRTsKK2VudW0g
RFdSSVRFX0ZPTlRfU1RSRVRDSDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250
UGxhdGZvcm1EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBuYW1lc3BhY2UgRGlyZWN0V3Jp
dGUgewpAQCAtNDksOSArNTQsMTMgQEAgSURXcml0ZUZvbnRDb2xsZWN0aW9uMSogd2ViUHJvY2Vz
c0ZvbnRDbwogCiBIUkVTVUxUIGFkZEZvbnRGcm9tRGF0YVRvUHJvY2Vzc0NvbGxlY3Rpb24oY29u
c3QgVmVjdG9yPGNoYXI+JiBmb250RGF0YSk7CiBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZv
bnRGYW1pbHlGb3JDb2xsZWN0aW9uKElEV3JpdGVGb250Q29sbGVjdGlvbiosIGNvbnN0IFZlY3Rv
cjx3Y2hhcl90PiYgbG9jYWxlTmFtZSwgY29uc3QgTE9HRk9OVCYpOwotQ09NUHRyPElEV3JpdGVG
b250PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNvbnN0IExPR0ZPTlQmKTsKK3N0ZDo6cGFpcjxD
T01QdHI8SURXcml0ZUZvbnQ+LCBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uMT4+IGNyZWF0
ZVdpdGhQbGF0Zm9ybUZvbnQoY29uc3QgTE9HRk9OVCYpOwogVmVjdG9yPHdjaGFyX3Q+IGZhbWls
eU5hbWVGb3JMb2NhbGUoSURXcml0ZUZvbnRGYW1pbHkqLCBjb25zdCBWZWN0b3I8d2NoYXJfdD4m
IGxvY2FsZU5hbWUpOwogCitEV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodChjb25zdCBGb250
UGxhdGZvcm1EYXRhJik7CitEV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYpOworRFdSSVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRjaChjb25zdCBGb250
UGxhdGZvcm1EYXRhJik7CisKIH0gLy8gbmFtZXNwYWNlIERpcmVjdFdyaXRlCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlz
aW9uIDI1MTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsMTQgQEAg
Rm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogCiAgICAgQVNTRVJUKG1f
Zm9udFJlZmVyZW5jZSk7CiAKKyAgICBhdXRvIGZhY2VOYW1lID0gbV9uYW1lLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCk7CisgICAgaWYgKGZhY2VOYW1lLnNpemUoKSA+IExGX0ZBQ0VT
SVpFKSB7CisgICAgICAgIGZhY2VOYW1lLnJlc2l6ZShMRl9GQUNFU0laRSk7CisgICAgICAgIGZh
Y2VOYW1lLmxhc3QoKSA9IDA7CisgICAgfQorCiAgICAgTE9HRk9OVCBsb2dGb250IHsgfTsKLSAg
ICBtZW1jcHkobG9nRm9udC5sZkZhY2VOYW1lLCBtX25hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIHNpemVvZihsb2dGb250LmxmRmFjZU5hbWVbMF0pICogc3RkOjpt
aW48c2l6ZV90PihzdGF0aWNfY2FzdDxzaXplX3Q+KExGX0ZBQ0VTSVpFKSwgMSArIG1fbmFtZS5s
ZW5ndGgoKSkpOworICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIGZhY2VOYW1lLmRhdGEo
KSwgc2l6ZW9mKGxvZ0ZvbnQubGZGYWNlTmFtZVswXSkgKiBzdGQ6Om1pbjxzaXplX3Q+KHN0YXRp
Y19jYXN0PHNpemVfdD4oTEZfRkFDRVNJWkUpLCAxICsgbV9uYW1lLmxlbmd0aCgpKSk7CiAKICAg
ICBsb2dGb250LmxmSGVpZ2h0ID0gLXNpemU7CiAgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gRm9u
dFJlbmRlcmluZ01vZGU6Ok5vcm1hbCkKQEAgLTgwLDggKzg2LDggQEAgRm9udFBsYXRmb3JtRGF0
YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IGNnRm9u
dCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgmbG9nRm9udCkpOwogICAg
IHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZvbnQpLCBjZ0ZvbnQuZ2V0KCksIHNp
emUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0
ZXJuYXRlKTsKICNlbHNlCi0gICAgQ09NUHRyPElEV3JpdGVGb250PiBkd0ZvbnQgPSBEaXJlY3RX
cml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KTsKLSAgICByZXR1cm4gRm9udFBs
YXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgZHdGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFs
aWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CisgICAg
YXV0byBbZm9udCwgY29sbGVjdGlvbl0gPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3Jt
Rm9udChsb2dGb250KTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250
KSwgV1RGTW92ZShmYWNlTmFtZSksIFdURk1vdmUoZm9udCksIFdURk1vdmUoY29sbGVjdGlvbiks
IHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6
QWx0ZXJuYXRlKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVj
dDJELmNwcAkocmV2aXNpb24gMjUxNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MiwyMyArNDIsMzUgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAog
ewogICAgIExPR0ZPTlQgbG9nZm9udDsKICAgICBIUkVTVUxUIGhyID0gOjpHZXRPYmplY3QoZm9u
dCwgc2l6ZW9mKExPR0ZPTlQpLCAmbG9nZm9udCk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikpCi0g
ICAgICAgIG1fZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQobG9n
Zm9udCk7CisgICAgaWYgKFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgYXV0byBbZm9udCwgY29s
bGVjdGlvbl0gPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dmb250KTsK
KyAgICAgICAgbV9kd0ZvbnQgPSBXVEZNb3ZlKGZvbnQpOworICAgICAgICBtX2R3Rm9udENvbGxl
Y3Rpb24gPSBXVEZNb3ZlKGNvbGxlY3Rpb24pOworICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVCht
X2R3Rm9udCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9kd0ZvbnRDb2xsZWN0aW9uKTsKIAogICAg
IGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2UpOwogICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCisgICAgaW50IG5hbWVMZW5ndGggPSB3Y3NubGVu
KGZhY2VOYW1lLCBMRl9GQUNFU0laRSk7CisgICAgUkVMRUFTRV9BU1NFUlQobmFtZUxlbmd0aCA+
IDApOworICAgIG1fZmFjZU5hbWUuZ3JvdyhuYW1lTGVuZ3RoICsgMSk7CisgICAgd2NzbmNweV9z
KHJlaW50ZXJwcmV0X2Nhc3Q8d2NoYXJfdCo+KG1fZmFjZU5hbWUuZGF0YSgpKSwgbmFtZUxlbmd0
aCArIDEsIGZhY2VOYW1lLCBuYW1lTGVuZ3RoKTsKKyAgICBtX2ZhY2VOYW1lLmxhc3QoKSA9IDA7
CisKICAgICBpZiAoIW1fdXNlR0RJKQogICAgICAgICBtX2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAo
ZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiBoZm9udCwgSURXcml0ZUZvbnQqIGZvbnQs
IGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKK0ZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmIGhmb250LCBW
ZWN0b3I8VUNoYXI+JiYgZmFjZU5hbWUsIENPTVB0cjxJRFdyaXRlRm9udD4mJiBmb250LCBDT01Q
dHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uMT4mJiBjb2xsZWN0aW9uLCBmbG9hdCBzaXplLCBib29s
IGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCiAgICAgOiBtX3N5bnRoZXRpY0JvbGQo
Ym9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQogICAgICwgbV9zaXplKHNp
emUpCiAgICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUo
aGZvbnQpKSkKLSAgICAsIG1fZHdGb250KGZvbnQpCisgICAgLCBtX2R3Rm9udChXVEZNb3ZlKGZv
bnQpKQorICAgICwgbV9kd0ZvbnRDb2xsZWN0aW9uKFdURk1vdmUoY29sbGVjdGlvbikpCisgICAg
LCBtX2ZhY2VOYW1lKFdURk1vdmUoZmFjZU5hbWUpKQogICAgICwgbV91c2VHREkodXNlR0RJKQog
ewogICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFj
ZSk7CkBAIC0xMTYsNTUgKzEyOCw2IEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1J
c0VxdWFsKGMKICAgICAgICAgJiYgZm9udHNBcmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIu
bV9kd0ZvbnQuZ2V0KCkpOwogfQogCi1IUkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZh
bGxiYWNrRm9udChjb25zdCBMT0dGT05UJiBsb2dGb250LCBJRFdyaXRlRm9udCoqIGR3Rm9udCkK
LXsKLSAgICBpZiAoIWR3Rm9udCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgICpk
d0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KS5nZXQo
KTsKLQotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNy
ZWF0ZUZhbGxiYWNrRm9udChIRk9OVCBoZm9udCwgSURXcml0ZUZvbnQqKiBkd0ZvbnQpCi17Ci0g
ICAgaWYgKCFkd0ZvbnQpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBDT01QdHI8
SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBmb250Q29sbGVjdGlvbjsKLSAgICBIUkVTVUxUIGhyID0g
RGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+R2V0U3lzdGVtRm9udENvbGxlY3Rpb24oJmZvbnRDb2xs
ZWN0aW9uKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAg
SFduZERDIGhkYygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChoZGMs
IGhmb250KTsKLQotICAgIENPTVB0cjxJRFdyaXRlRm9udEZhY2U+IGZvbnRGYWNlOwotICAgIGhy
ID0gRGlyZWN0V3JpdGU6OmdkaUludGVyb3AoKS0+Q3JlYXRlRm9udEZhY2VGcm9tSGRjKGhkYywg
JmZvbnRGYWNlKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkgewotICAgICAgICA6OlNlbGVjdE9iamVj
dChoZGMsIG9sZEZvbnQpOwotICAgICAgICByZXR1cm4gaHI7Ci0gICAgfQotCi0gICAgTE9HRk9O
VCBnZGlCYXNlZEZvbnQgPSB7IH07Ci0gICAgaHIgPSBEaXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgp
LT5Db252ZXJ0Rm9udEZhY2VUb0xPR0ZPTlQoZm9udEZhY2UuZ2V0KCksICZnZGlCYXNlZEZvbnQp
OwotICAgIGlmIChGQUlMRUQoaHIpKSB7Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xk
Rm9udCk7Ci0gICAgICAgIHJldHVybiBocjsKLSAgICB9Ci0KLSAgICBociA9IGZvbnRDb2xsZWN0
aW9uLT5HZXRGb250RnJvbUZvbnRGYWNlKGZvbnRGYWNlLmdldCgpLCBkd0ZvbnQpOwotCi0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBociA9IERpcmVjdFdyaXRlOjp3ZWJQcm9jZXNz
Rm9udENvbGxlY3Rpb24oKS0+R2V0Rm9udEZyb21Gb250RmFjZShmb250RmFjZS5nZXQoKSwgZHdG
b250KTsKLQotICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgaWYgKFNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIHJldHVybiBjcmVhdGVGYWxsYmFj
a0ZvbnQoZ2RpQmFzZWRGb250LCBkd0ZvbnQpOwotfQotCiB9CiAKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkocmV2
aXNpb24gMjUxNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMywxMSBAQAogI2luY2x1ZGUgIkxh
eW91dFJlY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgot
I2luY2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogCisjaWYgIVVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVy
LmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw2ICs1MSw4IEBAIGJv
b2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKKyNpZiAhVVNFKERJUkVDVDJEKQorCiB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBV
bmlzY3JpYmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7CkBAIC0xMTMsNCArMTE3LDYgQEAgaW50
IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9s
bGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAorI2Vu
ZGlmCisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI1MTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlw
aFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMjAgKzU5LDM5
IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBociA9IGFu
YWx5emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxlbmd0aCwgJmhlbHBlcik7
CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICB1bnNpZ25lZCByZXR1
cm5lZENvdW50ID0gMDsKLSAgICBHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6
ZV07Ci0gICAgR2x5cGggY2x1c3Rlck1hcFtHbHlwaFBhZ2U6OnNpemVdOworICAgIFZlY3RvcjxH
bHlwaD4gZ2x5cGhzKEdseXBoUGFnZTo6c2l6ZSwgMCk7CisgICAgVmVjdG9yPEdseXBoPiBjbHVz
dGVyTWFwKEdseXBoUGFnZTo6c2l6ZSwgMCk7CiAgICAgVmVjdG9yPERXUklURV9TSEFQSU5HX1RF
WFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXplKTsKICAgICBWZWN0
b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5cGhQcm9wZXJ0aWVzKEdseXBo
UGFnZTo6c2l6ZSk7CiAKLSAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHMocmVpbnRlcnByZXRf
Y2FzdDxMUENXU1RSPihidWZmZXIpLCBidWZmZXJMZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdG
b250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCi0gICAgICAgICZoZWxwZXIubV9hbmFseXNpcywgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgR2x5cGhQYWdlOjpzaXplLCBjbHVzdGVy
TWFwLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksCi0gICAgICAgIGxvY2FsR2x5cGhCdWZmZXIsIGds
eXBoUHJvcGVydGllcy5kYXRhKCksICZyZXR1cm5lZENvdW50KTsKLSAgICBpZiAoIVNVQ0NFRURF
RChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBXQ0hBUiogdGV4dFN0YXJ0
ID0gcmVpbnRlcnByZXRfY2FzdDxMUENXU1RSPihidWZmZXIpOworICAgIEdseXBoKiBnbHlwaERh
dGEgPSBnbHlwaHMuZGF0YSgpOworICAgIEdseXBoKiBjbHVzdGVyTWFwRGF0YSA9IGNsdXN0ZXJN
YXAuZGF0YSgpOworICAgIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4dFByb3Bl
cnRpZXNEYXRhID0gdGV4dFByb3BlcnRpZXMuZGF0YSgpOworICAgIERXUklURV9TSEFQSU5HX0dM
WVBIX1BST1BFUlRJRVMqIGdseXBoUHJvcGVydGllc0RhdGEgPSBnbHlwaFByb3BlcnRpZXMuZGF0
YSgpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsr
KSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICB1bnNp
Z25lZCB0b3RhbCA9IDA7CisgICAgdW5zaWduZWQgbWF4R2x5cGhDb3VudCA9IEdseXBoUGFnZTo6
c2l6ZTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b3RhbCArIHJ1bi5sZW5ndGggPD0gYnVmZmVyTGVu
Z3RoKTsKKworICAgICAgICB1bnNpZ25lZCByZXR1cm5lZENvdW50ID0gMDsKKyAgICAgICAgaHIg
PSBhbmFseXplci0+R2V0R2x5cGhzKHRleHRTdGFydCArIHJ1bi5zdGFydFBvc2l0aW9uLCBydW4u
bGVuZ3RoLCBmb250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5v
cmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIGZhbHNlLAorICAgICAg
ICAgICAgJnJ1bi5hbmFseXNpcywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwg
MCwgbWF4R2x5cGhDb3VudCwgY2x1c3Rlck1hcERhdGEsIHRleHRQcm9wZXJ0aWVzRGF0YSwKKyAg
ICAgICAgICAgIGdseXBoRGF0YSwgZ2x5cGhQcm9wZXJ0aWVzRGF0YSwgJnJldHVybmVkQ291bnQp
OworCisgICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBnbHlwaERhdGEgKz0gcmV0dXJuZWRDb3VudDsKKyAgICAgICAgY2x1c3Rl
ck1hcERhdGEgKz0gcmV0dXJuZWRDb3VudDsKKyAgICAgICAgdGV4dFByb3BlcnRpZXNEYXRhICs9
IHJldHVybmVkQ291bnQ7CisgICAgICAgIGdseXBoUHJvcGVydGllc0RhdGEgKz0gcmV0dXJuZWRD
b3VudDsKKyAgICAgICAgbWF4R2x5cGhDb3VudCAtPSByZXR1cm5lZENvdW50OworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgeworICAg
ICAgICBHbHlwaCBnbHlwaCA9IGdseXBoc1tpXTsKICAgICAgICAgaWYgKCFnbHlwaCkKICAgICAg
ICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7CiAgICAgICAgIGVsc2UgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRB
bmFseXplckhlbHBlci5jcHAJKHJldmlzaW9uIDI1MTcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVGV4dEFuYWx5emVy
SGVscGVyOjpUZXh0QW5hbHl6ZXJIZWxwZXIoV0NIQVIqIGxvY2FsZU5hbWUsIFdDSEFSKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKK1RleHRBbmFseXplckhlbHBlcjo6VGV4dEFuYWx5
emVySGVscGVyKGNvbnN0IFdDSEFSKiBsb2NhbGVOYW1lLCBjb25zdCBXQ0hBUiogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgpCiAgICAgOiBtX2xvY2FsZU5hbWUobG9jYWxlTmFtZSkKICAg
ICAsIG1fYnVmZmVyKGJ1ZmZlcikKICAgICAsIG1fYnVmZmVyTGVuZ3RoKGJ1ZmZlckxlbmd0aCkK
QEAgLTEyMiw3ICsxMjIsOCBAQCBIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TGluZUJy
ZWFrCiAKIEhSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhVSU5U
MzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQVF9B
TkFMWVNJUyogYW5hbHlzaXMpCiB7Ci0gICAgbV9hbmFseXNpcyA9ICphbmFseXNpczsKKyAgICBB
bmFseXplZFJ1biBjdXJyZW50ID0geyB0ZXh0UG9zaXRpb24sIHRleHRMZW5ndGgsICphbmFseXNp
cyB9OworICAgIG1fYW5hbHl6ZWRSdW5zLmFwcGVuZChXVEZNb3ZlKGN1cnJlbnQpKTsKIAogICAg
IHJldHVybiBTX09LOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1RleHRBbmFseXplckhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAkocmV2aXNpb24gMjUxNzE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTggQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBBbmFseXplZFJ1biB7CisgICAgdW5zaWduZWQgc3RhcnRQ
b3NpdGlvbiB7IDAgfTsKKyAgICB1bnNpZ25lZCBsZW5ndGggeyAwIH07CisgICAgRFdSSVRFX1ND
UklQVF9BTkFMWVNJUyBhbmFseXNpczsKK307CisKIHN0cnVjdCBUZXh0QW5hbHl6ZXJIZWxwZXIg
OiBwdWJsaWMgSURXcml0ZVRleHRBbmFseXNpc1NpbmssIElEV3JpdGVUZXh0QW5hbHlzaXNTb3Vy
Y2UgewotICAgIFRleHRBbmFseXplckhlbHBlcihXQ0hBUiogbG9jYWxlTmFtZSwgV0NIQVIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIoY29u
c3QgV0NIQVIqIGxvY2FsZU5hbWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCk7CiAKICAgICAvLyBJVW5rbm93bgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCwgX0NPTV9PdXRwdHJfIHZvaWQq
Kik7CkBAIC01MCwxMCArNTcsMTAgQEAgc3RydWN0IFRleHRBbmFseXplckhlbHBlciA6IHB1Ymxp
YyBJRFdyaQogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRCaWRpTGV2
ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIFVJTlQ4IGV4cGxpY2l0
TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2ZWwpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBTZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlO
VDMyIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKTsKIAotICAgIFdDSEFS
KiBtX2xvY2FsZU5hbWUgeyBudWxscHRyIH07Ci0gICAgV0NIQVIqIG1fYnVmZmVyIHsgbnVsbHB0
ciB9OworICAgIGNvbnN0IFdDSEFSKiBtX2xvY2FsZU5hbWUgeyBudWxscHRyIH07CisgICAgY29u
c3QgV0NIQVIqIG1fYnVmZmVyIHsgbnVsbHB0ciB9OwogICAgIHVuc2lnbmVkIG1fYnVmZmVyTGVu
Z3RoIHsgMCB9OwotICAgIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgbV9hbmFseXNpcyB7IH07Cisg
ICAgVmVjdG9yPEFuYWx5emVkUnVuPiBtX2FuYWx5emVkUnVuczsKICAgICBVTE9ORyBtX3JlZkNv
dW50IHsgMCB9OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382269</attachid>
            <date>2019-10-29 20:03:00 -0700</date>
            <delta_ts>2019-10-29 22:35:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203548-20191029200258.patch</filename>
            <type>text/plain</type>
            <size>30360</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTEwLTI5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEFkb3B0IERpcmVj
dFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY5
NTEzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHN3aXRjaGVzIGZyb20gdGhlIFVuaXNjcmliZSB0ZXh0IGNvbnRyb2xsZXIgdG8g
YQorICAgICAgICBEaXJlY3RXcml0ZSBiYXNlZCBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBUcmVhdCBXaW5kb3dzCisgICAgICAg
IGxpa2UgYW55IG90aGVyIENvbXBsZXhUZXh0Q29udHJvbGxlciBwbGF0Zm9ybS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtR2x5cGhJbml0KTogQWRkIGhhY2sgZm9yIERpcmVjdFdyaXRlCisgICAgICAgIHplcm8t
d2lkdGggc3BhY2UgaGFuZGxpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFu
Z2UgY29uc3QpOiBEb24ndCB1c2UgVW5pc2NyaWJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udENvbGxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6ZmFjZU5hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFwZSk6IEFkZGVkLAorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udCk6
IE1vZGlmeSB0byByZXR1cm4gYQorICAgICAgICBwYWlyIG9mIGZvbnQgYW5kIGZvbnQgY29sbGVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250V2VpZ2h0KTogQWRkZWQg
c3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3RyZXRjaCk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEpOiBBZGQgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbiB0byBoZWxwIERpcmVjdFdyaXRlIGhh
bmRsZSBmb250IHN0eWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpjcmVhdGVGYWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOiBVcGRhdGUgdG8gaGFuZGxlIG11bHRpcGxlIHJ1bnMgaW4gYQorICAgICAgICBnaXZl
biBzdHJpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFs
eXplckhlbHBlcik6IFVwZGF0ZSB0byBoYW5kbGUKKyAgICAgICAgYW5hbHlzaXMgb2Ygc3RyaW5n
cyB3aXRoIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxw
ZXI6OlNldFNjcmlwdEFuYWx5c2lzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oOgorCiAyMDE5LTEwLTI5ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgPGlucHV0IHR5cGU9InJhbmdlIj4uc2V0QXR0
cmlidXRlKCJ2YWx1ZSIpIGRvZXMgbm90IHVwZGF0ZSB0aGUgdmFsdWUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyNTE3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6
ZXJIZWxwZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0
cml4RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9u
TWF0cml4V2luLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9s
bGVyLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay93aW4vQ3VybFNTTEhhbmRsZVdpbi5jcHAK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9hZEJ1bmRsZVdpbi5jcHAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjUxNzE5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNU
MkQpCiAKIGNsYXNzIFRleHRMYXlvdXQgewogfTsKQEAgLTYzLDYgKzYzLDExIEBAIGZsb2F0IEZv
bnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiwgdW4KICAgICByZXR1cm4gMDsKIH0KIAordm9p
ZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGb250KikKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogI2Vsc2UKIAogY2xhc3MgVGV4dExheW91dCB7
CkBAIC0xNDYsMTAgKzE1MSw2IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRD
b250cm8KICAgICAsIG1fbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24obWF5VXNlTmF0dXJh
bFdyaXRpbmdEaXJlY3Rpb24pCiAgICAgLCBtX2ZvclRleHRFbXBoYXNpcyhmb3JUZXh0RW1waGFz
aXMpCiB7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vu
ZGlmCi0KICAgICBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKIAogICAgIGNvbGxlY3RD
b21wbGV4VGV4dFJ1bnMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuY3BwCShyZXZpc2lvbiAyNTE3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDE5ICsxMTksMjAgQEAgdm9p
ZCBGb250OjpwbGF0Zm9ybUdseXBoSW5pdCgpCiAgICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0
aGUgc3BhY2UgYXJlIHRoZSBzYW1lIHdpZHRoLiBPdGhlcndpc2Ugd2Ugcm91bmQuCiAgICAgaWYg
KGdseXBoUGFnZVNwYWNlKQogICAgICAgICBtX3NwYWNlR2x5cGggPSBnbHlwaFBhZ2VTcGFjZS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHNwYWNlKS5nbHlwaDsKLSAgICBmbG9hdCB3aWR0aCA9IHdp
ZHRoRm9yR2x5cGgobV9zcGFjZUdseXBoKTsKLSAgICBtX3NwYWNlV2lkdGggPSB3aWR0aDsKICAg
ICBpZiAoZ2x5cGhQYWdlQ2hhcmFjdGVyWmVybykKICAgICAgICAgbV96ZXJvR2x5cGggPSBnbHlw
aFBhZ2VDaGFyYWN0ZXJaZXJvLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAg
ICBtX2ZvbnRNZXRyaWNzLnNldFplcm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7
Ci0gICAgZGV0ZXJtaW5lUGl0Y2goKTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJl
YXRBc0ZpeGVkUGl0Y2ggPyBjZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwogCiAgICAgLy8g
Rm9yY2UgdGhlIGdseXBoIGZvciBaRVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwg
dW5sZXNzIGl0IGlzIHNoYXJlZCB3aXRoIFNQQUNFLgogICAgIC8vIEhlbHZldGljYSBpcyBhbiBl
eGFtcGxlIG9mIGEgbm9uLXplcm8gd2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KICAgICAv
LyBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQg
Rm9udDo6aXNaZXJvV2lkdGhTcGFjZUdseXBoKCkKICAgICBpZiAobV96ZXJvV2lkdGhTcGFjZUds
eXBoID09IG1fc3BhY2VHbHlwaCkKICAgICAgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gMDsK
KworICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5cGgpOworICAgIG1f
c3BhY2VXaWR0aCA9IHdpZHRoOworICAgIG1fZm9udE1ldHJpY3Muc2V0WmVyb1dpZHRoKHdpZHRo
Rm9yR2x5cGgobV96ZXJvR2x5cGgpKTsKKyAgICBkZXRlcm1pbmVQaXRjaCgpOworICAgIG1fYWRq
dXN0ZWRTcGFjZVdpZHRoID0gbV90cmVhdEFzRml4ZWRQaXRjaCA/IGNlaWxmKHdpZHRoKSA6IHJv
dW5kZih3aWR0aCk7CiB9CiAKIEZvbnQ6On5Gb250KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDI1MTcxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJp
bmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgUExB
VEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKICNpbmNsdWRl
ICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAjZW5kaWYKIApAQCAtMzUwLDcgKzM1MCw3IEBAIGZs
b2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9mVGV4dFJhbmdlKGNvbnMKIAogICAgIGF1dG8gY29kZVBh
dGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgPT0gQ29tcGxl
eCkgewotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNU
MkQpCiAgICAgICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICAgICAg
aXQuYWR2YW5jZShmcm9tKTsKICAgICAgICAgb2Zmc2V0QmVmb3JlUmFuZ2UgPSBpdC5ydW5XaWR0
aFNvRmFyKCk7CkBAIC0xMzk3LDcgKzEzOTcsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi0jaWYgIVBM
QVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAg
ICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKQEAgLTE1NDUsNyArMTU0NSw3IEBAIGZsb2F0IEZvbnRD
YXNjYWRlOjpmbG9hdFdpZHRoRm9yU2ltcGxlVGUKICAgICByZXR1cm4gaXQubV9ydW5XaWR0aFNv
RmFyOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0Uo
RElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250
cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0x
NTc4LDcgKzE1NzgsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFm
dGVyV2lkdGggLSBiZWZvcmVXaWR0aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikKKyNpZiAh
UExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0
JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAg
ICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKQEAgLTE2Mzgs
NyArMTYzOCw3IEBAIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW0KICAg
ICByZXR1cm4gb2Zmc2V0OwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0o
V0lOKSB8fCBVU0UoRElSRUNUMkQpCiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9s
bGVyKCp0aGlzLCBydW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMjUxNzE5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShX
SU4pICYmIFVTRShESVJFQ1QyRCkKLSAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9O
VD4mJiwgSURXcml0ZUZvbnQqLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wg
c3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJ
T2JqZWN0PEhGT05UPiYmLCBDT01QdHI8SURXcml0ZUZvbnQ+JiYsIGZsb2F0IHNpemUsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBSVJPKQpAQCAtMTQzLDkgKzE0Myw2IEBA
IHB1YmxpYzoKICNpZiBVU0UoRElSRUNUMkQpCiAgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fZHdGb250LmdldCgpOyB9CiAgICAgSURXcml0ZUZvbnRGYWNlKiBkd0Zv
bnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnRGYWNlLmdldCgpOyB9Ci0KLSAgICBzdGF0
aWMgSFJFU1VMVCBjcmVhdGVGYWxsYmFja0ZvbnQoY29uc3QgTE9HRk9OVCYsIElEV3JpdGVGb250
KiopOwotICAgIHN0YXRpYyBIUkVTVUxUIGNyZWF0ZUZhbGxiYWNrRm9udChIRk9OVCwgSURXcml0
ZUZvbnQqKik7CiAjZW5kaWYKIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9s
bGVyRGlyZWN0V3JpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJKHJldmlz
aW9uIDI1MTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21w
bGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEy
ICsyNSwxNDMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENv
bnRyb2xsZXIuaCIKIAorI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkRpcmVjdFdyaXRl
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKKyNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKKyNpbmNsdWRlIDxkd3JpdGVf
My5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2ln
bmVkLCB1bnNpZ25lZCwgY29uc3QgRm9udCopCitzdGF0aWMgYm9vbCBzaGFwZShJRFdyaXRlVGV4
dEFuYWx5emVyKiBhbmFseXplciwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyYgYW5hbHlz
aXMsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnRQbGF0Zm9ybURhdGEsIGNvbnN0IFdDSEFS
KiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50LCBWZWN0b3I8
R2x5cGg+JiBnbHlwaHMsIFZlY3RvcjxHbHlwaD4mIGNsdXN0ZXJNYXAsIFZlY3RvcjxEV1JJVEVf
U0hBUElOR19URVhUX1BST1BFUlRJRVM+JiB0ZXh0UHJvcGVydGllcywgVmVjdG9yPERXUklURV9T
SEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+JiBnbHlwaFByb3BlcnRpZXMsIHVuc2lnbmVkJiBnbHlw
aENvdW50KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBIUkVTVUxUIHNoYXBlUmVzdWx0ID0gRV9QRU5ESU5HOworCisgICAg
ZG8geworICAgICAgICBzaGFwZVJlc3VsdCA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dCwgbGVu
Z3RoLCBmb250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmll
bnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIGZhbHNlLAorICAgICAgICAg
ICAgJmFuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBzdWdn
ZXN0ZWRDb3VudCwgY2x1c3Rlck1hcC5kYXRhKCksIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwKKyAg
ICAgICAgICAgIGdseXBocy5kYXRhKCksIGdseXBoUHJvcGVydGllcy5kYXRhKCksICZnbHlwaENv
dW50KTsKKworICAgICAgICBpZiAoc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkgeworICAg
ICAgICAgICAgLy8gTmVlZCB0byByZXNpemUgb3VyIGJ1ZmZlcnMuCisgICAgICAgICAgICBnbHlw
aHMucmVzaXplKGdseXBocy5zaXplKCkgKiAyKTsKKyAgICAgICAgICAgIGNsdXN0ZXJNYXAucmVz
aXplKGdseXBocy5zaXplKCkpOworICAgICAgICAgICAgdGV4dFByb3BlcnRpZXMucmVzaXplKGds
eXBocy5zaXplKCkpOworICAgICAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2l6ZShnbHlwaHMu
c2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpOworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGdseXBocy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgY2x1c3Rlck1hcC5z
aHJpbmsoZ2x5cGhDb3VudCk7CisgICAgdGV4dFByb3BlcnRpZXMuc2hyaW5rKGdseXBoQ291bnQp
OworICAgIGdseXBoUHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjcCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCBzdHJpbmdMb2NhdGlvbiwgY29uc3QgRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQp
IHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhzIGZyb20gdGhlIHBy
aW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVu
Z3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CisKKyAg
ICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9Owor
ICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnBy
ZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgp
OworCisgICAgVmVjdG9yPERXUklURV9GT05UX0ZFQVRVUkU+IGZvbnRGZWF0dXJlcygxKTsKKyAg
ICBmb250RmVhdHVyZXNbMF0ubmFtZVRhZyA9IERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0tFUk5J
Tkc7CisgICAgZm9udEZlYXR1cmVzWzBdLnBhcmFtZXRlciA9IG1fZm9udC5lbmFibGVLZXJuaW5n
KCkgPyAxIDogMDsKKworICAgIGlmIChmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKKyAgICAgICAgZm9udEZlYXR1cmVzLmFwcGVuZCh7
RFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfVkVSVElDQUxfV1JJVElORywgMX0pOworCisgICAgRFdS
SVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTIHVzZWRGZWF0dXJlczsKKyAgICB1c2VkRmVhdHVyZXMu
ZmVhdHVyZXMgPSBmb250RmVhdHVyZXMuZGF0YSgpOworICAgIHVzZWRGZWF0dXJlcy5mZWF0dXJl
Q291bnQgPSBmb250RmVhdHVyZXMuc2l6ZSgpOworCisgICAgVmVjdG9yPGNvbnN0IERXUklURV9U
WVBPR1JBUEhJQ19GRUFUVVJFUyo+IGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmFwcGVuZCgmdXNl
ZEZlYXR1cmVzKTsKKworICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBhbmFseXplcjsK
KyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5
emVyKCZhbmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAg
ICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9j
YWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3ApLCBsZW5ndGgpOworCisgICAg
aHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVscGVyLCAwLCBsZW5ndGgsICZoZWxwZXIp
OworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgdW5zaWduZWQgc3Vn
Z2VzdGVkQ291bnQgPSAoMyAqIGxlbmd0aCAvIDIgKyAxNik7CisKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHJ1biA6IGhlbHBlci5tX2FuYWx5emVkUnVucykgeworICAgICAgICBWZWN0b3I8R2x5cGg+
IGdseXBocyhzdWdnZXN0ZWRDb3VudCk7CisgICAgICAgIFZlY3RvcjxHbHlwaD4gY2x1c3Rlck1h
cChzdWdnZXN0ZWRDb3VudCk7CisgICAgICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BS
T1BFUlRJRVM+IHRleHRQcm9wZXJ0aWVzKHN1Z2dlc3RlZENvdW50KTsKKyAgICAgICAgVmVjdG9y
PERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGdseXBoUHJvcGVydGllcyhzdWdnZXN0
ZWRDb3VudCk7CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDUCA9IGNwICsgcnVuLnN0
YXJ0UG9zaXRpb247CisgICAgICAgIExQQ1dTVFIgdGV4dFBvc2l0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDxMUENXU1RSPihjdXJyZW50Q1ApOworCisgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQg
PSAwOworICAgICAgICBpZiAoIXNoYXBlKGFuYWx5emVyLmdldCgpLCBydW4uYW5hbHlzaXMsIGZv
bnRQbGF0Zm9ybURhdGEsIHRleHRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgc3VnZ2VzdGVkQ291bnQs
IGdseXBocywgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMsIGdseXBoUHJvcGVydGllcywgZ2x5
cGhDb3VudCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmVjdG9yPEZMT0FUPiBn
bHlwaEFkdmFuY2VzKGdseXBoQ291bnQpOworICAgICAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09G
RlNFVD4gZ2x5cGhPZmZzZXRzKGdseXBoQ291bnQpOworCisgICAgICAgIEhSRVNVTFQgcGxhY2Vt
ZW50UmVzdWx0ID0gYW5hbHl6ZXItPkdldEdseXBoUGxhY2VtZW50cyh0ZXh0UG9zaXRpb24sIGNs
dXN0ZXJNYXAuZGF0YSgpLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksIHJ1bi5sZW5ndGgsCisgICAg
ICAgICAgICBnbHlwaHMuZGF0YSgpLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCBnbHlwaENvdW50
LCBmb250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwKKyAgICAgICAgICAgIGZvbnRQbGF0Zm9y
bURhdGEuc2l6ZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVu
dGF0aW9uOjpWZXJ0aWNhbCwgbV9ydW4ubHRyKCksCisgICAgICAgICAgICAmcnVuLmFuYWx5c2lz
LCByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGxvY2FsZU5hbWUpLCAKKyAgICAgICAgICAgIGZl
YXR1cmVzLmRhdGEoKSwgJnJ1bi5sZW5ndGgsIDEsCisgICAgICAgICAgICBnbHlwaEFkdmFuY2Vz
LmRhdGEoKSwgZ2x5cGhPZmZzZXRzLmRhdGEoKSk7CisgICAgICAgIGlmIChGQUlMRUQocGxhY2Vt
ZW50UmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb252ZXJ0IGFs
bCBjaGFycyB0aGF0IHNob3VsZCBiZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNl
IGdseXBoLgorICAgICAgICAvLyBXZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0
byBxdWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGlu
ZyBjaGFyYWN0ZXJzLgorICAgICAgICBWZWN0b3I8aW50PiBzcGFjZUNoYXJhY3RlcnMoZ2x5cGhz
LnNpemUoKSk7CisgICAgICAgIHNwYWNlQ2hhcmFjdGVycy5maWxsKC0xKTsKKworICAgICAgICBm
bG9hdCBzcGFjZVdpZHRoID0gZm9udC0+c3BhY2VXaWR0aCgpIC0gZm9udC0+c3ludGhldGljQm9s
ZE9mZnNldCgpOworCisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcnVuLmxlbmd0aDsgKytr
KSB7CisgICAgICAgICAgICBVQ2hhciBjaCA9ICooY3VycmVudENQICsgayk7CisgICAgICAgICAg
ICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOworICAg
ICAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRB
c1plcm9XaWR0aFNwYWNlKGNoKTsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJl
YXRBc1plcm9XaWR0aFNwYWNlKSB7CisgICAgICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBpbiB0
aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMKKyAg
ICAgICAgICAgICAgICAvLyBhcnJheS4KKyAgICAgICAgICAgICAgICBnbHlwaHNbY2x1c3Rlck1h
cFtrXV0gPSBmb250LT5zcGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGhBZHZhbmNl
c1tjbHVzdGVyTWFwW2tdXSA9IHRyZWF0QXNTcGFjZSA/IHNwYWNlV2lkdGggOiAwOworICAgICAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UpCisgICAgICAgICAgICAgICAgICAgIHNwYWNlQ2hh
cmFjdGVyc1tjbHVzdGVyTWFwW2tdXSA9IG1fY3VycmVudENoYXJhY3RlciArIGsgKyBydW4uc3Rh
cnRQb3NpdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxG
bG9hdFBvaW50PiBvcmlnaW5zKGdseXBoQ291bnQpOworICAgICAgICBWZWN0b3I8RmxvYXRTaXpl
PiBhZHZhbmNlcyhnbHlwaENvdW50KTsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBzdHJpbmdJ
bmRpY2VzKGdseXBoQ291bnQpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdseXBo
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgc3RyaW5nSW5kaWNlc1tpXSA9IGk7CisgICAgICAg
ICAgICBvcmlnaW5zW2ldID0gRmxvYXRQb2ludChnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNl
dCwgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0KTsKKyAgICAgICAgICAgIGFkdmFuY2Vz
W2ldID0gRmxvYXRTaXplKGdseXBoQWR2YW5jZXNbaV0sIDApOworICAgICAgICB9CisKKyAgICAg
ICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUoYWR2YW5j
ZXMsIG9yaWdpbnMsIGdseXBocywgc3RyaW5nSW5kaWNlcywgRmxvYXRTaXplKCksICpmb250LCBj
dXJyZW50Q1AsIDAsIHJ1bi5sZW5ndGgsIDAsIHJ1bi5sZW5ndGgsIG1fcnVuLmx0cigpKSk7Cisg
ICAgfQogfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyNTE3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0V3JpdGVVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMTQgKzE5MCwy
MCBAQCBDT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvCiAKICAgICBWZWN0
b3I8d2NoYXJfdD4gbG9jYWxlTmFtZShMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKICAgICBpbnQg
bG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUuZGF0YSgp
LCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5n
dGggPD0gTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CiAKLSAgICBDT01QdHI8SURXcml0ZUZvbnRG
YW1pbHk+IGZvbnRGYW1pbHkgPSBmb250RmFtaWx5Rm9yQ29sbGVjdGlvbihzeXN0ZW1Gb250Q29s
bGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7Ci0gICAgaWYgKCFmb250RmFtaWx5
KQotICAgICAgICBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24od2ViUHJvY2Vz
c0ZvbnRDb2xsZWN0aW9uKCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOworICAgIENPTVB0cjxJRFdy
aXRlRm9udENvbGxlY3Rpb24xPiBjb2xsZWN0aW9uKFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlv
bik7CisKKyAgICBDT01QdHI8SURXcml0ZUZvbnRGYW1pbHk+IGZvbnRGYW1pbHkgPSBmb250RmFt
aWx5Rm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uLmdldCgpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsK
KyAgICBpZiAoIWZvbnRGYW1pbHkpIHsKKyAgICAgICAgY29sbGVjdGlvbiA9IHdlYlByb2Nlc3NG
b250Q29sbGVjdGlvbigpOworICAgICAgICBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxl
Y3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9nRm9udCk7CisgICAgfQogCiAg
ICAgaWYgKCFmb250RmFtaWx5KSB7CiAgICAgICAgIC8vIEp1c3QgcmV0dXJuIHRoZSBmaXJzdCBz
eXN0ZW0gZm9udC4KLSAgICAgICAgaHIgPSBzeXN0ZW1Gb250Q29sbGVjdGlvbi0+R2V0Rm9udEZh
bWlseSgwLCAmZm9udEZhbWlseSk7CisgICAgICAgIGNvbGxlY3Rpb24gPSBDT01QdHI8SURXcml0
ZUZvbnRDb2xsZWN0aW9uMT4oUXVlcnksIHN5c3RlbUZvbnRDb2xsZWN0aW9uKTsKKyAgICAgICAg
aHIgPSBjb2xsZWN0aW9uLT5HZXRGb250RmFtaWx5KDAsICZmb250RmFtaWx5KTsKICAgICAgICAg
aWYgKEZBSUxFRChocikpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjE4LDYg
KzIyNCwyMSBAQCBDT01QdHI8SURXcml0ZUZvbnQ+IGNyZWF0ZVdpdGhQbGF0Zm9ybUZvCiAgICAg
cmV0dXJuIGR3Rm9udDsKIH0KIAorRFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWlnaHQoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpCit7CisgICAgcmV0dXJuIERXUklURV9GT05UX1dFSUdIVF9SRUdV
TEFSOworfQorCitEV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpCit7CisgICAgcmV0dXJuIERXUklURV9GT05UX1NUWUxFX05PUk1BTDsKK30KKworRFdS
SVRFX0ZPTlRfU1RSRVRDSCBmb250U3RyZXRjaChjb25zdCBGb250UGxhdGZvcm1EYXRhJikKK3sK
KyAgICByZXR1cm4gRFdSSVRFX0ZPTlRfU1RSRVRDSF9OT1JNQUw7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIERpcmVjdFdyaXRlCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0
ZVV0aWxpdGllcy5oCShyZXZpc2lvbiAyNTE3MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsOCArMzYsMTMgQEAgaW50ZXJmYWNlIElEV3JpdGVGb250Q29sbGVjdGlvbjE7CiBpbnRlcmZh
Y2UgSURXcml0ZUZvbnRGYW1pbHk7CiBpbnRlcmZhY2UgSURXcml0ZUdkaUludGVyb3A7CiAKK2Vu
dW0gRFdSSVRFX0ZPTlRfV0VJR0hUOworZW51bSBEV1JJVEVfRk9OVF9TVFlMRTsKK2VudW0gRFdS
SVRFX0ZPTlRfU1RSRVRDSDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGb250UGxh
dGZvcm1EYXRhOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBuYW1lc3BhY2UgRGlyZWN0V3JpdGUg
ewpAQCAtNTIsNiArNTcsMTAgQEAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5
Rm9yQwogQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGNvbnN0IExP
R0ZPTlQmKTsKIFZlY3Rvcjx3Y2hhcl90PiBmYW1pbHlOYW1lRm9yTG9jYWxlKElEV3JpdGVGb250
RmFtaWx5KiwgY29uc3QgVmVjdG9yPHdjaGFyX3Q+JiBsb2NhbGVOYW1lKTsKIAorRFdSSVRFX0ZP
TlRfV0VJR0hUIGZvbnRXZWlnaHQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworRFdSSVRFX0ZP
TlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKK0RXUklURV9GT05U
X1NUUkVUQ0ggZm9udFN0cmV0Y2goY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOworCiB9IC8vIG5h
bWVzcGFjZSBEaXJlY3RXcml0ZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiAyNTE3MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDE0IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YToKIAogICAgIEFTU0VSVChtX2ZvbnRSZWZlcmVuY2UpOwogCisgICAgYXV0
byBmYWNlTmFtZSA9IG1fbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpOworICAg
IGlmIChmYWNlTmFtZS5zaXplKCkgPiBMRl9GQUNFU0laRSkgeworICAgICAgICBmYWNlTmFtZS5y
ZXNpemUoTEZfRkFDRVNJWkUpOworICAgICAgICBmYWNlTmFtZS5sYXN0KCkgPSAwOworICAgIH0K
KwogICAgIExPR0ZPTlQgbG9nRm9udCB7IH07Ci0gICAgbWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFt
ZSwgbV9uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBzaXplb2Yo
bG9nRm9udC5sZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVfdD4oc3RhdGljX2Nhc3Q8c2l6
ZV90PihMRl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKKyAgICBtZW1jcHkobG9n
Rm9udC5sZkZhY2VOYW1lLCBmYWNlTmFtZS5kYXRhKCksIHNpemVvZihsb2dGb250LmxmRmFjZU5h
bWVbMF0pICogc3RkOjptaW48c2l6ZV90PihzdGF0aWNfY2FzdDxzaXplX3Q+KExGX0ZBQ0VTSVpF
KSwgMSArIG1fbmFtZS5sZW5ndGgoKSkpOwogCiAgICAgbG9nRm9udC5sZkhlaWdodCA9IC1zaXpl
OwogICAgIGlmIChyZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpOb3JtYWwpCkBA
IC04MCw4ICs4Niw4IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YToK
ICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdp
dGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShX
VEZNb3ZlKGhmb250KSwgY2dGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmlu
Z01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CiAjZWxzZQotICAgIENPTVB0
cjxJRFdyaXRlRm9udD4gZHdGb250ID0gRGlyZWN0V3JpdGU6OmNyZWF0ZVdpdGhQbGF0Zm9ybUZv
bnQobG9nRm9udCk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCks
IGR3Rm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRS
ZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOworICAgIGF1dG8gZm9udCA9IERpcmVjdFdyaXRlOjpj
cmVhdGVXaXRoUGxhdGZvcm1Gb250KGxvZ0ZvbnQpOworICAgIHJldHVybiBGb250UGxhdGZvcm1E
YXRhKFdURk1vdmUoaGZvbnQpLCBXVEZNb3ZlKGZvbnQpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJl
bmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CiAjZW5kaWYKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI1MTcx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsMTIgKzUzLDEyIEBAIHZvaWQgRm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCgKICAgICAgICAgbV9pc1N5c3RlbUZvbnQg
PSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKIH0KIAotRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+JiYgaGZvbnQsIElEV3JpdGVG
b250KiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VH
REkpCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4m
JiBoZm9udCwgQ09NUHRyPElEV3JpdGVGb250PiYmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKICAgICA6IG1fc3ludGhldGljQm9sZChib2xk
KQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3NpemUoc2l6ZSkK
ICAgICAsIG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9u
dCkpKQotICAgICwgbV9kd0ZvbnQoZm9udCkKKyAgICAsIG1fZHdGb250KFdURk1vdmUoZm9udCkp
CiAgICAgLCBtX3VzZUdESSh1c2VHREkpCiB7CiAgICAgSFJFU1VMVCBociA9IG1fZHdGb250LT5D
cmVhdGVGb250RmFjZSgmbV9kd0ZvbnRGYWNlKTsKQEAgLTExNiw1NSArMTE2LDYgQEAgYm9vbCBG
b250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoYwogICAgICAgICAmJiBmb250c0FyZUVx
dWFsKG1fZHdGb250LmdldCgpLCBvdGhlci5tX2R3Rm9udC5nZXQoKSk7CiB9CiAKLUhSRVNVTFQg
Rm9udFBsYXRmb3JtRGF0YTo6Y3JlYXRlRmFsbGJhY2tGb250KGNvbnN0IExPR0ZPTlQmIGxvZ0Zv
bnQsIElEV3JpdGVGb250KiogZHdGb250KQotewotICAgIGlmICghZHdGb250KQotICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgKmR3Rm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRo
UGxhdGZvcm1Gb250KGxvZ0ZvbnQpLmdldCgpOwotCi0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhS
RVNVTFQgRm9udFBsYXRmb3JtRGF0YTo6Y3JlYXRlRmFsbGJhY2tGb250KEhGT05UIGhmb250LCBJ
RFdyaXRlRm9udCoqIGR3Rm9udCkKLXsKLSAgICBpZiAoIWR3Rm9udCkKLSAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKLQotICAgIENPTVB0cjxJRFdyaXRlRm9udENvbGxlY3Rpb24+IGZvbnRDb2xs
ZWN0aW9uOwotICAgIEhSRVNVTFQgaHIgPSBEaXJlY3RXcml0ZTo6ZmFjdG9yeSgpLT5HZXRTeXN0
ZW1Gb250Q29sbGVjdGlvbigmZm9udENvbGxlY3Rpb24pOwotICAgIGlmIChGQUlMRUQoaHIpKQot
ICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBIV25kREMgaGRjKDApOwotICAgIEhHRElPQkogb2xk
Rm9udCA9IDo6U2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOwotCi0gICAgQ09NUHRyPElEV3JpdGVG
b250RmFjZT4gZm9udEZhY2U7Ci0gICAgaHIgPSBEaXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgpLT5D
cmVhdGVGb250RmFjZUZyb21IZGMoaGRjLCAmZm9udEZhY2UpOwotICAgIGlmIChGQUlMRUQoaHIp
KSB7Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgICAgIHJldHVy
biBocjsKLSAgICB9Ci0KLSAgICBMT0dGT05UIGdkaUJhc2VkRm9udCA9IHsgfTsKLSAgICBociA9
IERpcmVjdFdyaXRlOjpnZGlJbnRlcm9wKCktPkNvbnZlcnRGb250RmFjZVRvTE9HRk9OVChmb250
RmFjZS5nZXQoKSwgJmdkaUJhc2VkRm9udCk7Ci0gICAgaWYgKEZBSUxFRChocikpIHsKLSAgICAg
ICAgOjpTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICAgICAgcmV0dXJuIGhyOwotICAg
IH0KLQotICAgIGhyID0gZm9udENvbGxlY3Rpb24tPkdldEZvbnRGcm9tRm9udEZhY2UoZm9udEZh
Y2UuZ2V0KCksIGR3Rm9udCk7Ci0KLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIGhy
ID0gRGlyZWN0V3JpdGU6OndlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpLT5HZXRGb250RnJvbUZv
bnRGYWNlKGZvbnRGYWNlLmdldCgpLCBkd0ZvbnQpOwotCi0gICAgOjpTZWxlY3RPYmplY3QoaGRj
LCBvbGRGb250KTsKLSAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwot
Ci0gICAgcmV0dXJuIGNyZWF0ZUZhbGxiYWNrRm9udChnZGlCYXNlZEZvbnQsIGR3Rm9udCk7Ci19
Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRXaW4uY3BwCShyZXZpc2lvbiAyNTE3MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDkgKzMzLDExIEBACiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZiAhVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgIlVuaXNjcmliZUNvbnRyb2xsZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ5LDYgKzUxLDggQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5k
SWRlb2dyYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmICFVU0UoRElSRUNUMkQpCisKIHZv
aWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIHRvKSBjb25zdAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVu
KTsKQEAgLTExMyw0ICsxMTcsNiBAQCBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tCiAgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpOwogfQogCisjZW5kaWYKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VU
cmVlTm9kZURpcmVjdDJELmNwcAkocmV2aXNpb24gMjUxNzE5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwyNyArNTIsNDUgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIq
IGJ1ZmZlciwgdW5zaQogICAgIFVDaGFyIGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdU
SCArIDFdID0geyB9OwogICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2Fs
ZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVf
TUFYX0xFTkdUSCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9O
QU1FX01BWF9MRU5HVEgpOwotICAgIGxvY2FsZU5hbWVbbG9jYWxlTGVuZ3RoXSA9ICdcMCc7CiAK
ICAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigm
bG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPihidWZmZXIpLCBidWZmZXJMZW5n
dGgpOwogCiAgICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVscGVyLCAwLCBidWZm
ZXJMZW5ndGgsICZoZWxwZXIpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwog
Ci0gICAgdW5zaWduZWQgcmV0dXJuZWRDb3VudCA9IDA7Ci0gICAgR2x5cGggbG9jYWxHbHlwaEJ1
ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIEdseXBoIGNsdXN0ZXJNYXBbR2x5cGhQYWdlOjpz
aXplXTsKKyAgICBWZWN0b3I8R2x5cGg+IGdseXBocyhHbHlwaFBhZ2U6OnNpemUsIDApOworICAg
IFZlY3RvcjxHbHlwaD4gY2x1c3Rlck1hcChHbHlwaFBhZ2U6OnNpemUsIDApOwogICAgIFZlY3Rv
cjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVM+IHRleHRQcm9wZXJ0aWVzKEdseXBoUGFn
ZTo6c2l6ZSk7CiAgICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVM+IGds
eXBoUHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUpOwogCi0gICAgaHIgPSBhbmFseXplci0+R2V0
R2x5cGhzKHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oYnVmZmVyKSwgYnVmZmVyTGVuZ3RoLCBm
b250UGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwsIGZhbHNlLAotICAgICAgICAmaGVscGVy
Lm1fYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIEdseXBo
UGFnZTo6c2l6ZSwgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAotICAgICAgICBs
b2NhbEdseXBoQnVmZmVyLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCAmcmV0dXJuZWRDb3VudCk7
Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29u
c3QgV0NIQVIqIHRleHRTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oYnVmZmVyKTsK
KyAgICBHbHlwaCogZ2x5cGhEYXRhID0gZ2x5cGhzLmRhdGEoKTsKKyAgICBHbHlwaCogY2x1c3Rl
ck1hcERhdGEgPSBjbHVzdGVyTWFwLmRhdGEoKTsKKyAgICBEV1JJVEVfU0hBUElOR19URVhUX1BS
T1BFUlRJRVMqIHRleHRQcm9wZXJ0aWVzRGF0YSA9IHRleHRQcm9wZXJ0aWVzLmRhdGEoKTsKKyAg
ICBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTKiBnbHlwaFByb3BlcnRpZXNEYXRhID0g
Z2x5cGhQcm9wZXJ0aWVzLmRhdGEoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
bHlwaFBhZ2U6OnNpemU7IGkrKykgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhC
dWZmZXJbaV07CisgICAgdW5zaWduZWQgdG90YWwgPSAwOworICAgIHVuc2lnbmVkIG1heEdseXBo
Q291bnQgPSBHbHlwaFBhZ2U6OnNpemU7CisgICAgZm9yIChjb25zdCBhdXRvJiBydW4gOiBoZWxw
ZXIubV9hbmFseXplZFJ1bnMpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodG90YWwgKyBydW4u
bGVuZ3RoIDw9IGJ1ZmZlckxlbmd0aCk7CisKKyAgICAgICAgdW5zaWduZWQgcmV0dXJuZWRDb3Vu
dCA9IDA7CisgICAgICAgIGhyID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0U3RhcnQgKyBydW4u
c3RhcnRQb3NpdGlvbiwgcnVuLmxlbmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCks
IGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsLCBmYWxzZSwKKyAgICAgICAgICAgICZydW4uYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsIDAsIG1heEdseXBoQ291bnQsIGNsdXN0ZXJNYXBEYXRhLCB0ZXh0
UHJvcGVydGllc0RhdGEsCisgICAgICAgICAgICBnbHlwaERhdGEsIGdseXBoUHJvcGVydGllc0Rh
dGEsICZyZXR1cm5lZENvdW50KTsKKworICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZ2x5cGhEYXRhICs9IHJldHVybmVkQ291
bnQ7CisgICAgICAgIGNsdXN0ZXJNYXBEYXRhICs9IHJldHVybmVkQ291bnQ7CisgICAgICAgIHRl
eHRQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50OworICAgICAgICBnbHlwaFByb3BlcnRp
ZXNEYXRhICs9IHJldHVybmVkQ291bnQ7CisgICAgICAgIG1heEdseXBoQ291bnQgLT0gcmV0dXJu
ZWRDb3VudDsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdl
OjpzaXplOyArK2kpIHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaHNbaV07CiAgICAgICAg
IGlmICghZ2x5cGgpCiAgICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIDApOwogICAgICAg
ICBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0
QW5hbHl6ZXJIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCShyZXZpc2lvbiAyNTE3MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVRleHRBbmFseXplckhlbHBlcjo6VGV4dEFuYWx5emVySGVscGVyKFdDSEFSKiBsb2Nh
bGVOYW1lLCBXQ0hBUiogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCitUZXh0QW5hbHl6
ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9jYWxlTmFtZSwgY29u
c3QgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQogICAgIDogbV9sb2NhbGVO
YW1lKGxvY2FsZU5hbWUpCiAgICAgLCBtX2J1ZmZlcihidWZmZXIpCiAgICAgLCBtX2J1ZmZlckxl
bmd0aChidWZmZXJMZW5ndGgpCkBAIC0xMjIsNyArMTIyLDggQEAgSFJFU1VMVCBUZXh0QW5hbHl6
ZXJIZWxwZXI6OlNldExpbmVCcmVhawogCiBIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0
U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNv
bnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMqIGFuYWx5c2lzKQogewotICAgIG1fYW5hbHlzaXMg
PSAqYW5hbHlzaXM7CisgICAgQW5hbHl6ZWRSdW4gY3VycmVudCA9IHsgdGV4dFBvc2l0aW9uLCB0
ZXh0TGVuZ3RoLCAqYW5hbHlzaXMgfTsKKyAgICBtX2FuYWx5emVkUnVucy5hcHBlbmQoV1RGTW92
ZShjdXJyZW50KSk7CiAKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmgJKHJldmlzaW9uIDI1MTcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDE4
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQW5hbHl6ZWRSdW4gewor
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24geyAwIH07CisgICAgdW5zaWduZWQgbGVuZ3RoIHsg
MCB9OworICAgIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgYW5hbHlzaXM7Cit9OworCiBzdHJ1Y3Qg
VGV4dEFuYWx5emVySGVscGVyIDogcHVibGljIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rLCBJRFdy
aXRlVGV4dEFuYWx5c2lzU291cmNlIHsKLSAgICBUZXh0QW5hbHl6ZXJIZWxwZXIoV0NIQVIqIGxv
Y2FsZU5hbWUsIFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCk7CisgICAgVGV4
dEFuYWx5emVySGVscGVyKGNvbnN0IFdDSEFSKiBsb2NhbGVOYW1lLCBjb25zdCBXQ0hBUiogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpOwogCiAgICAgLy8gSVVua25vd24KICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQs
IF9DT01fT3V0cHRyXyB2b2lkKiopOwpAQCAtNTAsMTAgKzU3LDEwIEBAIHN0cnVjdCBUZXh0QW5h
bHl6ZXJIZWxwZXIgOiBwdWJsaWMgSURXcmkKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgU2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVu
Z3RoLCBVSU5UOCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKTsKICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQz
MiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0
aW9uKik7CiAKLSAgICBXQ0hBUiogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OwotICAgIFdDSEFS
KiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBXQ0hBUiogbV9sb2NhbGVOYW1lIHsg
bnVsbHB0ciB9OworICAgIGNvbnN0IFdDSEFSKiBtX2J1ZmZlciB7IG51bGxwdHIgfTsKICAgICB1
bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKLSAgICBEV1JJVEVfU0NSSVBUX0FOQUxZU0lT
IG1fYW5hbHlzaXMgeyB9OworICAgIFZlY3RvcjxBbmFseXplZFJ1bj4gbV9hbmFseXplZFJ1bnM7
CiAgICAgVUxPTkcgbV9yZWZDb3VudCB7IDAgfTsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382282</attachid>
            <date>2019-10-29 22:35:58 -0700</date>
            <delta_ts>2019-10-31 17:15:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203548-20191029223556.patch</filename>
            <type>text/plain</type>
            <size>30880</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTEwLTI5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEFkb3B0IERpcmVj
dFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY5
NTEzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIHN3aXRjaGVzIGZyb20gdGhlIFVuaXNjcmliZSB0ZXh0IGNvbnRyb2xsZXIgdG8g
YQorICAgICAgICBEaXJlY3RXcml0ZSBiYXNlZCBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBUcmVhdCBXaW5kb3dzCisgICAgICAg
IGxpa2UgYW55IG90aGVyIENvbXBsZXhUZXh0Q29udHJvbGxlciBwbGF0Zm9ybS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtR2x5cGhJbml0KTogQWRkIGhhY2sgZm9yIERpcmVjdFdyaXRlCisgICAgICAgIHplcm8t
d2lkdGggc3BhY2UgaGFuZGxpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFu
Z2UgY29uc3QpOiBEb24ndCB1c2UgVW5pc2NyaWJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udENvbGxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6ZmFjZU5hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFwZSk6IEFkZGVkLAorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udCk6
IE1vZGlmeSB0byByZXR1cm4gYQorICAgICAgICBwYWlyIG9mIGZvbnQgYW5kIGZvbnQgY29sbGVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250V2VpZ2h0KTogQWRkZWQg
c3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3RyZXRjaCk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEpOiBBZGQgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbiB0byBoZWxwIERpcmVjdFdyaXRlIGhh
bmRsZSBmb250IHN0eWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpjcmVhdGVGYWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOiBVcGRhdGUgdG8gaGFuZGxlIG11bHRpcGxlIHJ1bnMgaW4gYQorICAgICAgICBnaXZl
biBzdHJpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFs
eXplckhlbHBlcik6IFVwZGF0ZSB0byBoYW5kbGUKKyAgICAgICAgYW5hbHlzaXMgb2Ygc3RyaW5n
cyB3aXRoIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxw
ZXI6OlNldFNjcmlwdEFuYWx5c2lzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oOgorCiAyMDE5LTEwLTI5ICBBbmR5IEVzdGVzICA8
YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbUXVpY2sgTG9va10gQ2xlYW4gdXAgTGVnYWN5
UHJldmlld0xvYWRlckNsaWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCShyZXZp
c2lvbiAyNTE3NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4RGlyZWN0MkQuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RyYW5zZm9ybWF0aW9uTWF0cml4V2luLmNwcAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAogCiAgICAgcGxhdGZv
cm0vbmV0d29yay93aW4vQ3VybFNTTEhhbmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3dpbi9Eb3dubG9hZEJ1bmRsZVdpbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjUxNzY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIFBMQVRGT1JNKFdJ
TikKKyNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCiAKIGNsYXNzIFRleHRMYXlv
dXQgewogfTsKQEAgLTYzLDYgKzYzLDExIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0
TGF5b3V0JiwgdW4KICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBjb25zdCBGb250KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwogI2Vsc2UKIAogY2xhc3MgVGV4dExheW91dCB7CkBAIC0xNDYsMTAgKzE1MSw2IEBA
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm8KICAgICAsIG1fbWF5VXNl
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24obWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24pCiAg
ICAgLCBtX2ZvclRleHRFbXBoYXNpcyhmb3JUZXh0RW1waGFzaXMpCiB7Ci0jaWYgUExBVEZPUk0o
V0lOKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0KICAgICBjb21wdXRlRXhw
YW5zaW9uT3Bwb3J0dW5pdHkoKTsKIAogICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAy
NTE3NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE5LDE5ICsxMTksMjAgQEAgdm9pZCBGb250OjpwbGF0Zm9ybUdseXBo
SW5pdCgpCiAgICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0aGUgc3BhY2UgYXJlIHRoZSBzYW1l
IHdpZHRoLiBPdGhlcndpc2Ugd2Ugcm91bmQuCiAgICAgaWYgKGdseXBoUGFnZVNwYWNlKQogICAg
ICAgICBtX3NwYWNlR2x5cGggPSBnbHlwaFBhZ2VTcGFjZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHNwYWNlKS5nbHlwaDsKLSAgICBmbG9hdCB3aWR0aCA9IHdpZHRoRm9yR2x5cGgobV9zcGFjZUds
eXBoKTsKLSAgICBtX3NwYWNlV2lkdGggPSB3aWR0aDsKICAgICBpZiAoZ2x5cGhQYWdlQ2hhcmFj
dGVyWmVybykKICAgICAgICAgbV96ZXJvR2x5cGggPSBnbHlwaFBhZ2VDaGFyYWN0ZXJaZXJvLT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoJzAnKS5nbHlwaDsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFpl
cm9XaWR0aCh3aWR0aEZvckdseXBoKG1femVyb0dseXBoKSk7Ci0gICAgZGV0ZXJtaW5lUGl0Y2go
KTsKLSAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBjZWls
Zih3aWR0aCkgOiByb3VuZGYod2lkdGgpOwogCiAgICAgLy8gRm9yY2UgdGhlIGdseXBoIGZvciBa
RVJPIFdJRFRIIFNQQUNFIHRvIGhhdmUgemVybyB3aWR0aCwgdW5sZXNzIGl0IGlzIHNoYXJlZCB3
aXRoIFNQQUNFLgogICAgIC8vIEhlbHZldGljYSBpcyBhbiBleGFtcGxlIG9mIGEgbm9uLXplcm8g
d2lkdGggWkVSTyBXSURUSCBTUEFDRSBnbHlwaC4KICAgICAvLyBTZWUgPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTc4PiBhbmQgRm9udDo6aXNaZXJvV2lkdGhTcGFj
ZUdseXBoKCkKICAgICBpZiAobV96ZXJvV2lkdGhTcGFjZUdseXBoID09IG1fc3BhY2VHbHlwaCkK
ICAgICAgICAgbV96ZXJvV2lkdGhTcGFjZUdseXBoID0gMDsKKworICAgIGZsb2F0IHdpZHRoID0g
d2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5cGgpOworICAgIG1fc3BhY2VXaWR0aCA9IHdpZHRoOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0WmVyb1dpZHRoKHdpZHRoRm9yR2x5cGgobV96ZXJvR2x5cGgp
KTsKKyAgICBkZXRlcm1pbmVQaXRjaCgpOworICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gbV90
cmVhdEFzRml4ZWRQaXRjaCA/IGNlaWxmKHdpZHRoKSA6IHJvdW5kZih3aWR0aCk7CiB9CiAKIEZv
bnQ6On5Gb250KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDI1MTc2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRG
T1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKICNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVy
LmgiCiAjZW5kaWYKIApAQCAtMzUwLDcgKzM1MCw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0
aE9mVGV4dFJhbmdlKGNvbnMKIAogICAgIGF1dG8gY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1
bik7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgPT0gQ29tcGxleCkgewotI2lmIFBMQVRGT1JNKFdJ
TikKKyNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCiAgICAgICAgIFVuaXNjcmli
ZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICAgICAgaXQuYWR2YW5jZShmcm9tKTsKICAg
ICAgICAgb2Zmc2V0QmVmb3JlUmFuZ2UgPSBpdC5ydW5XaWR0aFNvRmFyKCk7CkBAIC0xMzk3LDcg
KzEzOTcsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGCiAgICAg
cmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExB
VEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKQEAgLTE1NDUsNyArMTU0NSw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9y
U2ltcGxlVGUKICAgICByZXR1cm4gaXQubV9ydW5XaWR0aFNvRmFyOwogfQogCi0jaWYgIVBMQVRG
T1JNKFdJTikKKyNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQpCiBmbG9hdCBGb250
Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoKnRo
aXMsIHJ1biwgdHJ1ZSwgZmFsbGJhY2tGb250cyk7CkBAIC0xNTc4LDcgKzE1NzgsNyBAQCB2b2lk
IEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yCiAgICAgc2VsZWN0aW9uUmVjdC5z
ZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0
aCkpOwogfQogCi0jaWYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0Uo
RElSRUNUMkQpCiB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKQEAgLTE2MzgsNyArMTYzOCw3IEBAIGludCBGb250
Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW0KICAgICByZXR1cm4gb2Zmc2V0OwogfQog
Ci0jaWYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oV0lOKSB8fCBVU0UoRElSRUNUMkQp
CiBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAog
ewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4pOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9y
bURhdGEuaAkocmV2aXNpb24gMjUxNzY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcg
QEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pICYmIFVTRShESVJFQ1QyRCkK
LSAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4mJiwgSURXcml0ZUZvbnQqLCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9v
bCB1c2VHREkpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmLCBDT01Q
dHI8SURXcml0ZUZvbnQ+JiYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBz
eW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJ
TikgJiYgVVNFKENBSVJPKQpAQCAtMTQzLDkgKzE0Myw2IEBAIHB1YmxpYzoKICNpZiBVU0UoRElS
RUNUMkQpCiAgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250
LmdldCgpOyB9CiAgICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9kd0ZvbnRGYWNlLmdldCgpOyB9Ci0KLSAgICBzdGF0aWMgSFJFU1VMVCBjcmVhdGVGYWxs
YmFja0ZvbnQoY29uc3QgTE9HRk9OVCYsIElEV3JpdGVGb250KiopOwotICAgIHN0YXRpYyBIUkVT
VUxUIGNyZWF0ZUZhbGxiYWNrRm9udChIRk9OVCwgSURXcml0ZUZvbnQqKik7CiAjZW5kaWYKIAog
ICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vQ29tcGxleFRleHRDb250cm9sbGVyRGlyZWN0V3JpdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4
VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHAJKHJldmlzaW9uIDI1MTc2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJl
Y3RXcml0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxNTcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKIAorI2lmIFVT
RShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkRpcmVjdFdyaXRlVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJUZXh0
QW5hbHl6ZXJIZWxwZXIuaCIKKyNpbmNsdWRlIDxkd3JpdGVfMy5oPgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRS
dW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3Qg
Rm9udCopCitzdGF0aWMgYm9vbCBzaGFwZShJRFdyaXRlVGV4dEFuYWx5emVyKiBhbmFseXplciwg
Y29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyYgYW5hbHlzaXMsIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIGZvbnRQbGF0Zm9ybURhdGEsIGNvbnN0IFdDSEFSKiB0ZXh0LCB1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHN1Z2dlc3RlZENvdW50LCBWZWN0b3I8R2x5cGg+JiBnbHlwaHMsIFZlY3Rv
cjxHbHlwaD4mIGNsdXN0ZXJNYXAsIFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJ
RVM+JiB0ZXh0UHJvcGVydGllcywgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJ
RVM+JiBnbHlwaFByb3BlcnRpZXMsIHVuc2lnbmVkJiBnbHlwaENvdW50KQoreworICAgIEhSRVNV
TFQgc2hhcGVSZXN1bHQgPSBFX1BFTkRJTkc7CisKKyAgICBkbyB7CisgICAgICAgIHNoYXBlUmVz
dWx0ID0gYW5hbHl6ZXItPkdldEdseXBocyh0ZXh0LCBsZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEu
ZHdGb250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVu
dGF0aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCisgICAgICAgICAgICAmYW5hbHlzaXMsIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAsIHN1Z2dlc3RlZENvdW50LCBjbHVzdGVyTWFw
LmRhdGEoKSwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAorICAgICAgICAgICAgZ2x5cGhzLmRhdGEo
KSwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJmdseXBoQ291bnQpOworCisgICAgICAgIGlmIChz
aGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJl
c2l6ZSBvdXIgYnVmZmVycyAoZXhjZXB0IGZvciBjbHVzdGVyTWFwLiBJdCBpcyBhbHdheXMgdGhl
IGxlbmd0aCBvZiB0aGUgc3RyaW5nKS4KKyAgICAgICAgICAgIGdseXBocy5yZXNpemUoZ2x5cGhz
LnNpemUoKSAqIDIpOworICAgICAgICAgICAgdGV4dFByb3BlcnRpZXMucmVzaXplKGdseXBocy5z
aXplKCkpOworICAgICAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgp
KTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
OworCisgICAgaWYgKEZBSUxFRChzaGFwZVJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29s
bGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250KQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBpZiAoIWZvbnQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5
cGhzIGZyb20gdGhlIHByaW1hcnkgZm9udC4KKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBw
ZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJp
bmdMb2NhdGlvbiwgbGVuZ3RoLCAwLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZv
cm1EYXRhKCk7CisKKyAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdU
SCArIDFdID0geyB9OworICAgIGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2Fs
ZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVf
TUFYX0xFTkdUSCk7CisgICAgUkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9O
QU1FX01BWF9MRU5HVEgpOworCisgICAgVmVjdG9yPERXUklURV9GT05UX0ZFQVRVUkU+IGZvbnRG
ZWF0dXJlcygxKTsKKyAgICBmb250RmVhdHVyZXNbMF0ubmFtZVRhZyA9IERXUklURV9GT05UX0ZF
QVRVUkVfVEFHX0tFUk5JTkc7CisgICAgZm9udEZlYXR1cmVzWzBdLnBhcmFtZXRlciA9IG1fZm9u
dC5lbmFibGVLZXJuaW5nKCkgPyAxIDogMDsKKworICAgIGlmIChmb250UGxhdGZvcm1EYXRhLm9y
aWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKKyAgICAgICAgZm9udEZl
YXR1cmVzLmFwcGVuZCh7RFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfVkVSVElDQUxfV1JJVElORywg
MX0pOworCisgICAgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTIHVzZWRGZWF0dXJlczsKKyAg
ICB1c2VkRmVhdHVyZXMuZmVhdHVyZXMgPSBmb250RmVhdHVyZXMuZGF0YSgpOworICAgIHVzZWRG
ZWF0dXJlcy5mZWF0dXJlQ291bnQgPSBmb250RmVhdHVyZXMuc2l6ZSgpOworCisgICAgVmVjdG9y
PGNvbnN0IERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyo+IGZlYXR1cmVzOworICAgIGZlYXR1
cmVzLmFwcGVuZCgmdXNlZEZlYXR1cmVzKTsKKworICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5
emVyPiBhbmFseXplcjsKKyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+
Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3ApLCBs
ZW5ndGgpOworCisgICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVscGVyLCAwLCBs
ZW5ndGgsICZoZWxwZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisg
ICAgdW5zaWduZWQgdG90YWxTdWdnZXN0ZWRDb3VudCA9ICgzICogbGVuZ3RoIC8gMiArIDE2KTsK
KworICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzOworICAgIFZlY3RvcjxHbHlwaD4gY2x1c3Rlck1h
cDsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0UHJvcGVy
dGllczsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5cGhQ
cm9wZXJ0aWVzOworICAgIFZlY3RvcjxGTE9BVD4gZ2x5cGhBZHZhbmNlczsKKyAgICBWZWN0b3I8
RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzOworICAgIFZlY3RvcjxGbG9hdFBvaW50
PiBvcmlnaW5zOworICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFuY2VzOworICAgIFZlY3Rvcjx1
bnNpZ25lZD4gc3RyaW5nSW5kaWNlczsKKworICAgIGdseXBocy5yZXNlcnZlQ2FwYWNpdHkodG90
YWxTdWdnZXN0ZWRDb3VudCk7CisgICAgY2x1c3Rlck1hcC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KTsKKyAgICB0ZXh0UHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRDb3Vu
dCk7CisgICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENv
dW50KTsKKyAgICBnbHlwaEFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENv
dW50KTsKKyAgICBnbHlwaE9mZnNldHMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291
bnQpOworICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQpOwor
ICAgIGFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKKyAgICBz
dHJpbmdJbmRpY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKKworICAg
IGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBjcCArIHJ1bi5zdGFydFBvc2l0aW9uOworICAgICAg
ICBMUENXU1RSIHRleHRQb3NpdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3VycmVu
dENQKTsKKworICAgICAgICB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCA9ICgzICogcnVuLmxlbmd0
aCAvIDIgKyAxNik7CisgICAgICAgIGdseXBocy5yZXNpemUoc3VnZ2VzdGVkQ291bnQpOworICAg
ICAgICBjbHVzdGVyTWFwLnJlc2l6ZShydW4ubGVuZ3RoKTsKKyAgICAgICAgdGV4dFByb3BlcnRp
ZXMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKKyAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2l6
ZShzdWdnZXN0ZWRDb3VudCk7CisKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IDA7Cisg
ICAgICAgIGlmICghc2hhcGUoYW5hbHl6ZXIuZ2V0KCksIHJ1bi5hbmFseXNpcywgZm9udFBsYXRm
b3JtRGF0YSwgdGV4dFBvc2l0aW9uLCBydW4ubGVuZ3RoLCBzdWdnZXN0ZWRDb3VudCwgZ2x5cGhz
LCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcywgZ2x5cGhQcm9wZXJ0aWVzLCBnbHlwaENvdW50
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnbHlwaHMuc2hyaW5rKGdseXBoQ291
bnQpOworICAgICAgICB0ZXh0UHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgICAg
IGdseXBoUHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQWR2YW5j
ZXMucmVzaXplKGdseXBoQ291bnQpOworICAgICAgICBnbHlwaE9mZnNldHMucmVzaXplKGdseXBo
Q291bnQpOworCisgICAgICAgIEhSRVNVTFQgcGxhY2VtZW50UmVzdWx0ID0gYW5hbHl6ZXItPkdl
dEdseXBoUGxhY2VtZW50cyh0ZXh0UG9zaXRpb24sIGNsdXN0ZXJNYXAuZGF0YSgpLCB0ZXh0UHJv
cGVydGllcy5kYXRhKCksIHJ1bi5sZW5ndGgsCisgICAgICAgICAgICBnbHlwaHMuZGF0YSgpLCBn
bHlwaFByb3BlcnRpZXMuZGF0YSgpLCBnbHlwaENvdW50LCBmb250UGxhdGZvcm1EYXRhLmR3Rm9u
dEZhY2UoKSwKKyAgICAgICAgICAgIGZvbnRQbGF0Zm9ybURhdGEuc2l6ZSgpLCBmb250UGxhdGZv
cm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgbV9ydW4u
bHRyKCksCisgICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCByZWludGVycHJldF9jYXN0PExQQ1dT
VFI+KGxvY2FsZU5hbWUpLCAKKyAgICAgICAgICAgIGZlYXR1cmVzLmRhdGEoKSwgJnJ1bi5sZW5n
dGgsIDEsCisgICAgICAgICAgICBnbHlwaEFkdmFuY2VzLmRhdGEoKSwgZ2x5cGhPZmZzZXRzLmRh
dGEoKSk7CisgICAgICAgIGlmIChGQUlMRUQocGxhY2VtZW50UmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3VsZCBiZSB0
cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgorICAgICAgICAvLyBXZSBh
bHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBxdWlja2x5IGdvIGZyb20gc3BhY2Ug
Z2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLgorICAgICAgICBm
bG9hdCBzcGFjZVdpZHRoID0gZm9udC0+c3BhY2VXaWR0aCgpIC0gZm9udC0+c3ludGhldGljQm9s
ZE9mZnNldCgpOworCisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcnVuLmxlbmd0aDsgKytr
KSB7CisgICAgICAgICAgICBVQ2hhciBjaCA9ICooY3VycmVudENQICsgayk7CisgICAgICAgICAg
ICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOworICAg
ICAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJlYXRB
c1plcm9XaWR0aFNwYWNlKGNoKTsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwgdHJl
YXRBc1plcm9XaWR0aFNwYWNlKSB7CisgICAgICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBpbiB0
aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMKKyAg
ICAgICAgICAgICAgICAvLyBhcnJheS4KKyAgICAgICAgICAgICAgICBnbHlwaHNbY2x1c3Rlck1h
cFtrXV0gPSBmb250LT5zcGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGhBZHZhbmNl
c1tjbHVzdGVyTWFwW2tdXSA9IHRyZWF0QXNTcGFjZSA/IHNwYWNlV2lkdGggOiAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3JpZ2lucy5yZXNpemUoZ2x5cGhDb3VudCk7
CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50KTsKKyAgICAgICAgc3RyaW5nSW5k
aWNlcy5yZXNpemUoZ2x5cGhDb3VudCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBnbHlwaENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ0luZGljZXNbaV0gPSBpOwor
ICAgICAgICAgICAgb3JpZ2luc1tpXSA9IEZsb2F0UG9pbnQoZ2x5cGhPZmZzZXRzW2ldLmFkdmFu
Y2VPZmZzZXQsIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCk7CisgICAgICAgICAgICBh
ZHZhbmNlc1tpXSA9IEZsb2F0U2l6ZShnbHlwaEFkdmFuY2VzW2ldLCAwKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRl
KGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIEZsb2F0U2l6ZSgpLCAq
Zm9udCwgY3VycmVudENQLCAwLCBydW4ubGVuZ3RoLCAwLCBydW4ubGVuZ3RoLCBtX3J1bi5sdHIo
KSkpOworICAgIH0KIH0KIAogfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVz
LmNwcAkocmV2aXNpb24gMjUxNzY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDE0
ICsxOTAsMjAgQEAgQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1GbwogCiAg
ICAgVmVjdG9yPHdjaGFyX3Q+IGxvY2FsZU5hbWUoTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CiAg
ICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVOYW1l
LmRhdGEoKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgUkVMRUFTRV9BU1NFUlQobG9j
YWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwogCi0gICAgQ09NUHRyPElEV3Jp
dGVGb250RmFtaWx5PiBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oc3lzdGVt
Rm9udENvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOwotICAgIGlmICghZm9u
dEZhbWlseSkKLSAgICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9uKHdl
YlByb2Nlc3NGb250Q29sbGVjdGlvbigpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKKyAgICBDT01Q
dHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uMT4gY29sbGVjdGlvbihRdWVyeSwgc3lzdGVtRm9udENv
bGxlY3Rpb24pOworCisgICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5ID0g
Zm9udEZhbWlseUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwgbG9n
Rm9udCk7CisgICAgaWYgKCFmb250RmFtaWx5KSB7CisgICAgICAgIGNvbGxlY3Rpb24gPSB3ZWJQ
cm9jZXNzRm9udENvbGxlY3Rpb24oKTsKKyAgICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1pbHlG
b3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOworICAg
IH0KIAogICAgIGlmICghZm9udEZhbWlseSkgewogICAgICAgICAvLyBKdXN0IHJldHVybiB0aGUg
Zmlyc3Qgc3lzdGVtIGZvbnQuCi0gICAgICAgIGhyID0gc3lzdGVtRm9udENvbGxlY3Rpb24tPkdl
dEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOworICAgICAgICBjb2xsZWN0aW9uID0gQ09NUHRy
PElEV3JpdGVGb250Q29sbGVjdGlvbjE+KFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlvbik7Cisg
ICAgICAgIGhyID0gY29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAmZm9udEZhbWlseSk7CiAg
ICAgICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTIxOCw2ICsyMjQsMjEgQEAgQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1G
bwogICAgIHJldHVybiBkd0ZvbnQ7CiB9CiAKK0RXUklURV9GT05UX1dFSUdIVCBmb250V2VpZ2h0
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQoreworICAgIHJldHVybiBEV1JJVEVfRk9OVF9XRUlH
SFRfUkVHVUxBUjsKK30KKworRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmKQoreworICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7Cit9
CisKK0RXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2goY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpCit7CisgICAgcmV0dXJuIERXUklURV9GT05UX1NUUkVUQ0hfTk9STUFMOworfQorCiB9IC8v
IG5hbWVzcGFjZSBEaXJlY3RXcml0ZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRpZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0V3JpdGVVdGlsaXRpZXMuaAkocmV2aXNpb24gMjUxNzY1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDggKzM2LDEzIEBAIGludGVyZmFjZSBJRFdyaXRlRm9udENvbGxlY3Rpb24xOwog
aW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5OwogaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRlcm9w
OwogCitlbnVtIERXUklURV9GT05UX1dFSUdIVDsKK2VudW0gRFdSSVRFX0ZPTlRfU1RZTEU7Citl
bnVtIERXUklURV9GT05UX1NUUkVUQ0g7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
Rm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogbmFtZXNwYWNlIERpcmVj
dFdyaXRlIHsKQEAgLTUyLDYgKzU3LDEwIEBAIENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4gZm9u
dEZhbWlseUZvckMKIENPTVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9udChj
b25zdCBMT0dGT05UJik7CiBWZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJRFdy
aXRlRm9udEZhbWlseSosIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSk7CiAKK0RX
UklURV9GT05UX1dFSUdIVCBmb250V2VpZ2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKK0RX
UklURV9GT05UX1NUWUxFIGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CitEV1JJ
VEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKKwog
fSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjUxNzY1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1MywxNCBAQCBGb250UGxhdGZvcm1EYXRhIEZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6CiAKICAgICBBU1NFUlQobV9mb250UmVmZXJlbmNlKTsKIAor
ICAgIGF1dG8gZmFjZU5hbWUgPSBtX25hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KTsKKyAgICBpZiAoZmFjZU5hbWUuc2l6ZSgpID4gTEZfRkFDRVNJWkUpIHsKKyAgICAgICAgZmFj
ZU5hbWUucmVzaXplKExGX0ZBQ0VTSVpFKTsKKyAgICAgICAgZmFjZU5hbWUubGFzdCgpID0gMDsK
KyAgICB9CisKICAgICBMT0dGT05UIGxvZ0ZvbnQgeyB9OwotICAgIG1lbWNweShsb2dGb250Lmxm
RmFjZU5hbWUsIG1fbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwg
c2l6ZW9mKGxvZ0ZvbnQubGZGYWNlTmFtZVswXSkgKiBzdGQ6Om1pbjxzaXplX3Q+KHN0YXRpY19j
YXN0PHNpemVfdD4oTEZfRkFDRVNJWkUpLCAxICsgbV9uYW1lLmxlbmd0aCgpKSk7CisgICAgbWVt
Y3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFjZU5hbWUuZGF0YSgpLCBzaXplb2YobG9nRm9udC5s
ZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVfdD4oc3RhdGljX2Nhc3Q8c2l6ZV90PihMRl9G
QUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKIAogICAgIGxvZ0ZvbnQubGZIZWlnaHQg
PSAtc2l6ZTsKICAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6Tm9y
bWFsKQpAQCAtODAsOCArODYsOCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE6CiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dGb250ID0gYWRvcHRDRihDR0ZvbnRD
cmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dGb250KSk7CiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9y
bURhdGEoV1RGTW92ZShoZm9udCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCBy
ZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwogI2Vsc2UKLSAg
ICBDT01QdHI8SURXcml0ZUZvbnQ+IGR3Rm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRoUGxh
dGZvcm1Gb250KGxvZ0ZvbnQpOwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUo
aGZvbnQpLCBkd0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9
PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKKyAgICBhdXRvIGZvbnQgPSBEaXJlY3RX
cml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KTsKKyAgICByZXR1cm4gRm9udFBs
YXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgV1RGTW92ZShmb250KSwgc2l6ZSwgYm9sZCwgaXRh
bGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwogI2Vu
ZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCShyZXZpc2lv
biAyNTE3NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEyICs1MywxMiBAQCB2
b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoCiAgICAgICAgIG1faXNTeXN0
ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3JhbmRlIik7CiB9CiAKLUZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmIGhmb250LCBJ
RFdyaXRlRm9udCogZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJv
b2wgdXNlR0RJKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8
SEZPTlQ+JiYgaGZvbnQsIENPTVB0cjxJRFdyaXRlRm9udD4mJiBmb250LCBmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCiAgICAgOiBtX3N5bnRoZXRpY0Jv
bGQoYm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQogICAgICwgbV9zaXpl
KHNpemUpCiAgICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1v
dmUoaGZvbnQpKSkKLSAgICAsIG1fZHdGb250KGZvbnQpCisgICAgLCBtX2R3Rm9udChXVEZNb3Zl
KGZvbnQpKQogICAgICwgbV91c2VHREkodXNlR0RJKQogewogICAgIEhSRVNVTFQgaHIgPSBtX2R3
Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CkBAIC0xMTYsNTUgKzExNiw2IEBA
IGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsKGMKICAgICAgICAgJiYgZm9u
dHNBcmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIubV9kd0ZvbnQuZ2V0KCkpOwogfQogCi1I
UkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChjb25zdCBMT0dGT05U
JiBsb2dGb250LCBJRFdyaXRlRm9udCoqIGR3Rm9udCkKLXsKLSAgICBpZiAoIWR3Rm9udCkKLSAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgICpkd0ZvbnQgPSBEaXJlY3RXcml0ZTo6Y3Jl
YXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KS5nZXQoKTsKLQotICAgIHJldHVybiBTX09LOwot
fQotCi1IUkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChIRk9OVCBo
Zm9udCwgSURXcml0ZUZvbnQqKiBkd0ZvbnQpCi17Ci0gICAgaWYgKCFkd0ZvbnQpCi0gICAgICAg
IHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uPiBm
b250Q29sbGVjdGlvbjsKLSAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3RvcnkoKS0+
R2V0U3lzdGVtRm9udENvbGxlY3Rpb24oJmZvbnRDb2xsZWN0aW9uKTsKLSAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgSFduZERDIGhkYygwKTsKLSAgICBIR0RJ
T0JKIG9sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLQotICAgIENPTVB0cjxJ
RFdyaXRlRm9udEZhY2U+IGZvbnRGYWNlOwotICAgIGhyID0gRGlyZWN0V3JpdGU6OmdkaUludGVy
b3AoKS0+Q3JlYXRlRm9udEZhY2VGcm9tSGRjKGhkYywgJmZvbnRGYWNlKTsKLSAgICBpZiAoRkFJ
TEVEKGhyKSkgewotICAgICAgICA6OlNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgICAg
ICByZXR1cm4gaHI7Ci0gICAgfQotCi0gICAgTE9HRk9OVCBnZGlCYXNlZEZvbnQgPSB7IH07Ci0g
ICAgaHIgPSBEaXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgpLT5Db252ZXJ0Rm9udEZhY2VUb0xPR0ZP
TlQoZm9udEZhY2UuZ2V0KCksICZnZGlCYXNlZEZvbnQpOwotICAgIGlmIChGQUlMRUQoaHIpKSB7
Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgICAgIHJldHVybiBo
cjsKLSAgICB9Ci0KLSAgICBociA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RnJvbUZvbnRGYWNl
KGZvbnRGYWNlLmdldCgpLCBkd0ZvbnQpOwotCi0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICBociA9IERpcmVjdFdyaXRlOjp3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKS0+R2V0Rm9u
dEZyb21Gb250RmFjZShmb250RmFjZS5nZXQoKSwgZHdGb250KTsKLQotICAgIDo6U2VsZWN0T2Jq
ZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biBocjsKLQotICAgIHJldHVybiBjcmVhdGVGYWxsYmFja0ZvbnQoZ2RpQmFzZWRGb250LCBkd0Zv
bnQpOwotfQotCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkocmV2aXNpb24gMjUxNzY1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw5ICszMywxMSBAQAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCisjaWYgIVVTRShESVJFQ1Qy
RCkKKyNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC00OSw2ICs1MSw4IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFu
ZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiAhVVNFKERJUkVDVDJE
KQorCiB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRo
aXMsIHJ1bik7CkBAIC0xMTMsNCArMTE3LDYgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgs
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAorI2VuZGlmCisKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI1MTc2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjcgKzUyLDQ1IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBVQ2hhciBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01B
WF9MRU5HVEggKyAxXSA9IHsgfTsKICAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1
bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIExPQ0FM
RV9OQU1FX01BWF9MRU5HVEgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8PSBM
T0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLSAgICBsb2NhbGVOYW1lW2xvY2FsZUxlbmd0aF0gPSAn
XDAnOwogCiAgICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0PExQ
V1NUUj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oYnVmZmVyKSwgYnVm
ZmVyTGVuZ3RoKTsKIAogICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwg
MCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQo
aHIpKTsKIAotICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQgPSAwOwotICAgIEdseXBoIGxvY2Fs
R2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICBHbHlwaCBjbHVzdGVyTWFwW0dseXBo
UGFnZTo6c2l6ZV07CisgICAgVmVjdG9yPEdseXBoPiBnbHlwaHMoR2x5cGhQYWdlOjpzaXplLCAw
KTsKKyAgICBWZWN0b3I8R2x5cGg+IGNsdXN0ZXJNYXAoR2x5cGhQYWdlOjpzaXplLCAwKTsKICAg
ICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0UHJvcGVydGllcyhH
bHlwaFBhZ2U6OnNpemUpOwogICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJU
SUVTPiBnbHlwaFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXplKTsKIAotICAgIGhyID0gYW5hbHl6
ZXItPkdldEdseXBocyhyZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGJ1ZmZlciksIGJ1ZmZlckxl
bmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0Zm9ybURhdGEub3Jp
ZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBmYWxzZSwKLSAgICAgICAg
JmhlbHBlci5tX2FuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAw
LCBHbHlwaFBhZ2U6OnNpemUsIGNsdXN0ZXJNYXAsIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwKLSAg
ICAgICAgbG9jYWxHbHlwaEJ1ZmZlciwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJnJldHVybmVk
Q291bnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNvbnN0IFdDSEFSKiB0ZXh0U3RhcnQgPSByZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGJ1
ZmZlcik7CisgICAgR2x5cGgqIGdseXBoRGF0YSA9IGdseXBocy5kYXRhKCk7CisgICAgR2x5cGgq
IGNsdXN0ZXJNYXBEYXRhID0gY2x1c3Rlck1hcC5kYXRhKCk7CisgICAgRFdSSVRFX1NIQVBJTkdf
VEVYVF9QUk9QRVJUSUVTKiB0ZXh0UHJvcGVydGllc0RhdGEgPSB0ZXh0UHJvcGVydGllcy5kYXRh
KCk7CisgICAgRFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUyogZ2x5cGhQcm9wZXJ0aWVz
RGF0YSA9IGdseXBoUHJvcGVydGllcy5kYXRhKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBsb2Nh
bEdseXBoQnVmZmVyW2ldOworICAgIHVuc2lnbmVkIHRvdGFsID0gMDsKKyAgICB1bnNpZ25lZCBt
YXhHbHlwaENvdW50ID0gR2x5cGhQYWdlOjpzaXplOworICAgIGZvciAoY29uc3QgYXV0byYgcnVu
IDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRvdGFs
ICsgcnVuLmxlbmd0aCA8PSBidWZmZXJMZW5ndGgpOworCisgICAgICAgIHVuc2lnbmVkIHJldHVy
bmVkQ291bnQgPSAwOworICAgICAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dFN0YXJ0
ICsgcnVuLnN0YXJ0UG9zaXRpb24sIHJ1bi5sZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250
RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9u
OjpWZXJ0aWNhbCwgZmFsc2UsCisgICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBtYXhHbHlwaENvdW50LCBjbHVzdGVyTWFwRGF0
YSwgdGV4dFByb3BlcnRpZXNEYXRhLAorICAgICAgICAgICAgZ2x5cGhEYXRhLCBnbHlwaFByb3Bl
cnRpZXNEYXRhLCAmcmV0dXJuZWRDb3VudCk7CisKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGdseXBoRGF0YSArPSByZXR1
cm5lZENvdW50OworICAgICAgICBjbHVzdGVyTWFwRGF0YSArPSByZXR1cm5lZENvdW50OworICAg
ICAgICB0ZXh0UHJvcGVydGllc0RhdGEgKz0gcmV0dXJuZWRDb3VudDsKKyAgICAgICAgZ2x5cGhQ
cm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50OworICAgICAgICBtYXhHbHlwaENvdW50IC09
IHJldHVybmVkQ291bnQ7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEds
eXBoUGFnZTo6c2l6ZTsgKytpKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2ldOwog
ICAgICAgICBpZiAoIWdseXBoKQogICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsK
ICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAkocmV2aXNpb24gMjUx
NzY1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXpl
ckhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1UZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihXQ0hB
UiogbG9jYWxlTmFtZSwgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQorVGV4
dEFuYWx5emVySGVscGVyOjpUZXh0QW5hbHl6ZXJIZWxwZXIoY29uc3QgV0NIQVIqIGxvY2FsZU5h
bWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKICAgICA6IG1f
bG9jYWxlTmFtZShsb2NhbGVOYW1lKQogICAgICwgbV9idWZmZXIoYnVmZmVyKQogICAgICwgbV9i
dWZmZXJMZW5ndGgoYnVmZmVyTGVuZ3RoKQpAQCAtMTIyLDcgKzEyMiw4IEBAIEhSRVNVTFQgVGV4
dEFuYWx5emVySGVscGVyOjpTZXRMaW5lQnJlYWsKIAogSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxw
ZXI6OlNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVu
Z3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTKiBhbmFseXNpcykKIHsKLSAgICBtX2Fu
YWx5c2lzID0gKmFuYWx5c2lzOworICAgIEFuYWx5emVkUnVuIGN1cnJlbnQgPSB7IHRleHRQb3Np
dGlvbiwgdGV4dExlbmd0aCwgKmFuYWx5c2lzIH07CisgICAgbV9hbmFseXplZFJ1bnMuYXBwZW5k
KFdURk1vdmUoY3VycmVudCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXpl
ckhlbHBlci5oCShyZXZpc2lvbiAyNTE3NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEx
ICsyNiwxOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEFuYWx5emVk
UnVuIHsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uIHsgMCB9OworICAgIHVuc2lnbmVkIGxl
bmd0aCB7IDAgfTsKKyAgICBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTIGFuYWx5c2lzOworfTsKKwog
c3RydWN0IFRleHRBbmFseXplckhlbHBlciA6IHB1YmxpYyBJRFdyaXRlVGV4dEFuYWx5c2lzU2lu
aywgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSB7Ci0gICAgVGV4dEFuYWx5emVySGVscGVyKFdD
SEFSKiBsb2NhbGVOYW1lLCBXQ0hBUiogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpOwor
ICAgIFRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9jYWxlTmFtZSwgY29uc3QgV0NI
QVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKIAogICAgIC8vIElVbmtub3duCiAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKF9Jbl8g
UkVGSUlELCBfQ09NX091dHB0cl8gdm9pZCoqKTsKQEAgLTUwLDEwICs1NywxMCBAQCBzdHJ1Y3Qg
VGV4dEFuYWx5emVySGVscGVyIDogcHVibGljIElEV3JpCiAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFNldEJpZGlMZXZlbChVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIg
dGV4dExlbmd0aCwgVUlOVDggZXhwbGljaXRMZXZlbCwgVUlOVDggcmVzb2x2ZWRMZXZlbCk7CiAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldE51bWJlclN1YnN0aXR1dGlv
bihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1
YnN0aXR1dGlvbiopOwogCi0gICAgV0NIQVIqIG1fbG9jYWxlTmFtZSB7IG51bGxwdHIgfTsKLSAg
ICBXQ0hBUiogbV9idWZmZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgV0NIQVIqIG1fbG9jYWxl
TmFtZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBXQ0hBUiogbV9idWZmZXIgeyBudWxscHRyIH07
CiAgICAgdW5zaWduZWQgbV9idWZmZXJMZW5ndGggeyAwIH07Ci0gICAgRFdSSVRFX1NDUklQVF9B
TkFMWVNJUyBtX2FuYWx5c2lzIHsgfTsKKyAgICBWZWN0b3I8QW5hbHl6ZWRSdW4+IG1fYW5hbHl6
ZWRSdW5zOwogICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382523</attachid>
            <date>2019-10-31 17:15:47 -0700</date>
            <delta_ts>2019-10-31 17:53:56 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-203548-20191031171541.patch</filename>
            <type>text/plain</type>
            <size>31168</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTg5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE5LTEwLTMxICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIEFkb3B0IERpcmVj
dFdyaXRlIGluIHBsYWNlIG9mIFVuaXNjcmliZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzNTQ4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NjY5
NTEzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBGdWppaSBIaXJvbm9yaS4KKworICAgICAgICBU
aGlzIHBhdGNoIHN3aXRjaGVzIGZyb20gdGhlIFVuaXNjcmliZSB0ZXh0IGNvbnRyb2xsZXIgdG8g
YQorICAgICAgICBEaXJlY3RXcml0ZSBiYXNlZCBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBUcmVhdCBXaW5kb3dzCisgICAgICAg
IGxpa2UgYW55IG90aGVyIENvbXBsZXhUZXh0Q29udHJvbGxlciBwbGF0Zm9ybS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBs
YXRmb3JtR2x5cGhJbml0KTogQWRkIGhhY2sgZm9yIERpcmVjdFdyaXRlCisgICAgICAgIHplcm8t
d2lkdGggc3BhY2UgaGFuZGxpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFu
Z2UgY29uc3QpOiBEb24ndCB1c2UgVW5pc2NyaWJlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmR3Rm9udENvbGxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6ZmFjZU5hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJEaXJlY3RXcml0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFwZSk6IEFkZGVkLAorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVy
Ojpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udCk6
IE1vZGlmeSB0byByZXR1cm4gYQorICAgICAgICBwYWlyIG9mIGZvbnQgYW5kIGZvbnQgY29sbGVj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250V2VpZ2h0KTogQWRkZWQg
c3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3R5bGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdFdyaXRlOjpmb250U3RyZXRjaCk6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURh
dGEpOiBBZGQgbW9yZQorICAgICAgICBpbmZvcm1hdGlvbiB0byBoZWxwIERpcmVjdFdyaXRlIGhh
bmRsZSBmb250IHN0eWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBs
YXRmb3JtRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnBsYXRmb3JtRGF0YUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpjcmVhdGVGYWxsYmFja0ZvbnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOiBVcGRhdGUgdG8gaGFuZGxlIG11bHRpcGxlIHJ1bnMgaW4gYQorICAgICAgICBnaXZl
biBzdHJpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFs
eXplckhlbHBlcik6IFVwZGF0ZSB0byBoYW5kbGUKKyAgICAgICAgYW5hbHlzaXMgb2Ygc3RyaW5n
cyB3aXRoIG11bHRpcGxlIHJ1bnMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0QW5hbHl6ZXJIZWxw
ZXI6OlNldFNjcmlwdEFuYWx5c2lzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oOgorCiAyMDE5LTEwLTMxICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtFTUVdIEJhdGNoIG11bHRpcGxlIGtleSBy
ZXF1ZXN0cyBpbnRvIG9uZSByZXF1ZXN0IGFuZCByZXNwb25zZQpJbmRleDogU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1GVFcuY21ha2UJKHJldmlzaW9uIDI1MTg5NSkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhl
bHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhE
aXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVHJhbnNmb3JtYXRpb25NYXRy
aXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIu
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9DdXJsU1NMSGFuZGxlV2luLmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvd2luL0Rvd25sb2FkQnVuZGxlV2luLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNTE4OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkK
IAogY2xhc3MgVGV4dExheW91dCB7CiB9OwpAQCAtNjMsNiArNjMsMTEgQEAgZmxvYXQgRm9udENh
c2NhZGU6OndpZHRoKFRleHRMYXlvdXQmLCB1bgogICAgIHJldHVybiAwOwogfQogCit2b2lkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEZvbnQqKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiAjZWxzZQogCiBjbGFzcyBUZXh0TGF5b3V0IHsKQEAg
LTE0NiwxMCArMTUxLDYgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRy
bwogICAgICwgbV9tYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbihtYXlVc2VOYXR1cmFsV3Jp
dGluZ0RpcmVjdGlvbikKICAgICAsIG1fZm9yVGV4dEVtcGhhc2lzKGZvclRleHRFbXBoYXNpcykK
IHsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYK
LQogICAgIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0eSgpOwogCiAgICAgY29sbGVjdENvbXBs
ZXhUZXh0UnVucygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAJKHJldmlzaW9uIDI1MTg5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTkgKzExOSwyMCBAQCB2b2lkIEZv
bnQ6OnBsYXRmb3JtR2x5cGhJbml0KCkKICAgICAvLyBldmVyeSBjaGFyYWN0ZXIgYW5kIHRoZSBz
cGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguIE90aGVyd2lzZSB3ZSByb3VuZC4KICAgICBpZiAoZ2x5
cGhQYWdlU3BhY2UpCiAgICAgICAgIG1fc3BhY2VHbHlwaCA9IGdseXBoUGFnZVNwYWNlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoc3BhY2UpLmdseXBoOwotICAgIGZsb2F0IHdpZHRoID0gd2lkdGhG
b3JHbHlwaChtX3NwYWNlR2x5cGgpOwotICAgIG1fc3BhY2VXaWR0aCA9IHdpZHRoOwogICAgIGlm
IChnbHlwaFBhZ2VDaGFyYWN0ZXJaZXJvKQogICAgICAgICBtX3plcm9HbHlwaCA9IGdseXBoUGFn
ZUNoYXJhY3Rlclplcm8tPmdseXBoRGF0YUZvckNoYXJhY3RlcignMCcpLmdseXBoOwotICAgIG1f
Zm9udE1ldHJpY3Muc2V0WmVyb1dpZHRoKHdpZHRoRm9yR2x5cGgobV96ZXJvR2x5cGgpKTsKLSAg
ICBkZXRlcm1pbmVQaXRjaCgpOwotICAgIG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gbV90cmVhdEFz
Rml4ZWRQaXRjaCA/IGNlaWxmKHdpZHRoKSA6IHJvdW5kZih3aWR0aCk7CiAKICAgICAvLyBGb3Jj
ZSB0aGUgZ2x5cGggZm9yIFpFUk8gV0lEVEggU1BBQ0UgdG8gaGF2ZSB6ZXJvIHdpZHRoLCB1bmxl
c3MgaXQgaXMgc2hhcmVkIHdpdGggU1BBQ0UuCiAgICAgLy8gSGVsdmV0aWNhIGlzIGFuIGV4YW1w
bGUgb2YgYSBub24temVybyB3aWR0aCBaRVJPIFdJRFRIIFNQQUNFIGdseXBoLgogICAgIC8vIFNl
ZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNzg+IGFuZCBGb250
Ojppc1plcm9XaWR0aFNwYWNlR2x5cGgoKQogICAgIGlmIChtX3plcm9XaWR0aFNwYWNlR2x5cGgg
PT0gbV9zcGFjZUdseXBoKQogICAgICAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOworCisg
ICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1fc3BhY2VHbHlwaCk7CisgICAgbV9zcGFj
ZVdpZHRoID0gd2lkdGg7CisgICAgbV9mb250TWV0cmljcy5zZXRaZXJvV2lkdGgod2lkdGhGb3JH
bHlwaChtX3plcm9HbHlwaCkpOworICAgIGRldGVybWluZVBpdGNoKCk7CisgICAgbV9hZGp1c3Rl
ZFNwYWNlV2lkdGggPSBtX3RyZWF0QXNGaXhlZFBpdGNoID8gY2VpbGYod2lkdGgpIDogcm91bmRm
KHdpZHRoKTsKIH0KIAogRm9udDo6fkZvbnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkocmV2aXNpb24gMjUxODk1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hh
c2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKLSNpZiBQTEFURk9S
TShXSU4pCisjaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQogI2luY2x1ZGUgIlVu
aXNjcmliZUNvbnRyb2xsZXIuaCIKICNlbmRpZgogCkBAIC0zNTAsNyArMzUwLDcgQEAgZmxvYXQg
Rm9udENhc2NhZGU6OndpZHRoT2ZUZXh0UmFuZ2UoY29ucwogCiAgICAgYXV0byBjb2RlUGF0aFRv
VXNlID0gY29kZVBhdGgocnVuKTsKICAgICBpZiAoY29kZVBhdGhUb1VzZSA9PSBDb21wbGV4KSB7
Ci0jaWYgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkK
ICAgICAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwogICAgICAgICBpdC5h
ZHZhbmNlKGZyb20pOwogICAgICAgICBvZmZzZXRCZWZvcmVSYW5nZSA9IGl0LnJ1bldpZHRoU29G
YXIoKTsKQEAgLTEzOTcsNyArMTM5Nyw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNB
bmRBZHZhbmNlc0YKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9CiAKLSNpZiAhUExBVEZP
Uk0oV0lOKQorI2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIGZsb2F0IEZvbnRD
YXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZs
b2F0IGluaXRpYWxBZHZhbmNlOwpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZQogICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7
CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKQorI2lmICFQTEFURk9STShXSU4pIHx8IFVTRShESVJF
Q1QyRCkKIGZsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcigqdGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKQEAgLTE1Nzgs
NyArMTU3OCw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3IKICAg
ICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoYWZ0ZXJX
aWR0aCAtIGJlZm9yZVdpZHRoKSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKQorI2lmICFQTEFU
Rk9STShXSU4pIHx8IFVTRShESVJFQ1QyRCkKIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNl
bGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIENv
bXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4pOwpAQCAtMTYzOCw3ICsx
NjM4LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbQogICAgIHJl
dHVybiBvZmZzZXQ7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKQorI2lmICFQTEFURk9STShXSU4p
IHx8IFVTRShESVJFQ1QyRCkKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIo
KnRoaXMsIHJ1bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyNTE4OTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw3ICsxMDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikg
JiYgVVNFKERJUkVDVDJEKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYm
LCBJRFdyaXRlRm9udCosIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50
aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CisgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmpl
Y3Q8SEZPTlQ+JiYsIENPTVB0cjxJRFdyaXRlRm9udD4mJiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50
aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0FJUk8pCkBAIC0xNDMsOSArMTQzLDYgQEAgcHVi
bGljOgogI2lmIFVTRShESVJFQ1QyRCkKICAgICBJRFdyaXRlRm9udCogZHdGb250KCkgY29uc3Qg
eyByZXR1cm4gbV9kd0ZvbnQuZ2V0KCk7IH0KICAgICBJRFdyaXRlRm9udEZhY2UqIGR3Rm9udEZh
Y2UoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udEZhY2UuZ2V0KCk7IH0KLQotICAgIHN0YXRpYyBI
UkVTVUxUIGNyZWF0ZUZhbGxiYWNrRm9udChjb25zdCBMT0dGT05UJiwgSURXcml0ZUZvbnQqKik7
Ci0gICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlRmFsbGJhY2tGb250KEhGT05ULCBJRFdyaXRlRm9u
dCoqKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4VGV4dENvbnRyb2xsZXJE
aXJlY3RXcml0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkocmV2aXNpb24g
MjUxODk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckRpcmVjdFdyaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTIgKzI1LDE1NyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgog
CisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiRGlyZWN0V3JpdGVVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1
ZGUgIlRleHRBbmFseXplckhlbHBlci5oIgorI2luY2x1ZGUgPGR3cml0ZV8zLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21w
bGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQsIHVuc2lnbmVk
LCBjb25zdCBGb250KikKK3N0YXRpYyBib29sIHNoYXBlKElEV3JpdGVUZXh0QW5hbHl6ZXIqIGFu
YWx5emVyLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTJiBhbmFseXNpcywgY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgZm9udFBsYXRmb3JtRGF0YSwgY29uc3QgV0NIQVIqIHRleHQsIHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQgc3VnZ2VzdGVkQ291bnQsIFZlY3RvcjxHbHlwaD4mIGdseXBo
cywgVmVjdG9yPEdseXBoPiYgY2x1c3Rlck1hcCwgVmVjdG9yPERXUklURV9TSEFQSU5HX1RFWFRf
UFJPUEVSVElFUz4mIHRleHRQcm9wZXJ0aWVzLCBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhf
UFJPUEVSVElFUz4mIGdseXBoUHJvcGVydGllcywgdW5zaWduZWQmIGdseXBoQ291bnQpCit7Cisg
ICAgSFJFU1VMVCBzaGFwZVJlc3VsdCA9IEVfUEVORElORzsKKworICAgIGRvIHsKKyAgICAgICAg
c2hhcGVSZXN1bHQgPSBhbmFseXplci0+R2V0R2x5cGhzKHRleHQsIGxlbmd0aCwgZm9udFBsYXRm
b3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBG
b250T3JpZW50YXRpb246OlZlcnRpY2FsLCBmYWxzZSwKKyAgICAgICAgICAgICZhbmFseXNpcywg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgc3VnZ2VzdGVkQ291bnQsIGNs
dXN0ZXJNYXAuZGF0YSgpLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksCisgICAgICAgICAgICBnbHlw
aHMuZGF0YSgpLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCAmZ2x5cGhDb3VudCk7CisKKyAgICAg
ICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAgICAgIC8vIE5l
ZWQgdG8gcmVzaXplIG91ciBidWZmZXJzIChleGNlcHQgZm9yIGNsdXN0ZXJNYXAuIEl0IGlzIGFs
d2F5cyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcpLgorICAgICAgICAgICAgZ2x5cGhzLnJlc2l6
ZShnbHlwaHMuc2l6ZSgpICogMik7CisgICAgICAgICAgICB0ZXh0UHJvcGVydGllcy5yZXNpemUo
Z2x5cGhzLnNpemUoKSk7CisgICAgICAgICAgICBnbHlwaFByb3BlcnRpZXMucmVzaXplKGdseXBo
cy5zaXplKCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7CisKKyAgICBpZiAoRkFJTEVEKHNoYXBlUmVzdWx0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9s
bGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY3As
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqIGZv
bnQpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIGlmICghZm9udCkgeworICAgICAgICAvLyBDcmVhdGUgYSBydW4gb2YgbWlz
c2luZyBnbHlwaHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgorICAgICAgICBtX2NvbXBsZXhUZXh0
UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwg
Y3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgsIDAsIGxlbmd0aCwgbV9ydW4ubHRyKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGZvbnRQbGF0Zm9ybURhdGEgPSBmb250
LT5wbGF0Zm9ybURhdGEoKTsKKworICAgIHdjaGFyX3QgbG9jYWxlTmFtZVtMT0NBTEVfTkFNRV9N
QVhfTEVOR1RIXSA9IHsgfTsKKyAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRM
b2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIExPQ0FMRV9O
QU1FX01BWF9MRU5HVEgpOworICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8IExPQ0FM
RV9OQU1FX01BWF9MRU5HVEgpOworCisgICAgVmVjdG9yPERXUklURV9GT05UX0ZFQVRVUkU+IGZv
bnRGZWF0dXJlcygxKTsKKyAgICBmb250RmVhdHVyZXNbMF0ubmFtZVRhZyA9IERXUklURV9GT05U
X0ZFQVRVUkVfVEFHX0tFUk5JTkc7CisgICAgZm9udEZlYXR1cmVzWzBdLnBhcmFtZXRlciA9IG1f
Zm9udC5lbmFibGVLZXJuaW5nKCkgPyAxIDogMDsKKworICAgIGlmIChmb250UGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkKKyAgICAgICAgZm9u
dEZlYXR1cmVzLmFwcGVuZCh7RFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfVkVSVElDQUxfV1JJVElO
RywgMX0pOworCisgICAgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTIHVzZWRGZWF0dXJlczsK
KyAgICB1c2VkRmVhdHVyZXMuZmVhdHVyZXMgPSBmb250RmVhdHVyZXMuZGF0YSgpOworICAgIHVz
ZWRGZWF0dXJlcy5mZWF0dXJlQ291bnQgPSBmb250RmVhdHVyZXMuc2l6ZSgpOworCisgICAgVmVj
dG9yPGNvbnN0IERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyo+IGZlYXR1cmVzOworICAgIGZl
YXR1cmVzLmFwcGVuZCgmdXNlZEZlYXR1cmVzKTsKKworICAgIENPTVB0cjxJRFdyaXRlVGV4dEFu
YWx5emVyPiBhbmFseXplcjsKKyAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3Rvcnko
KS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CisKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVscGVyKHJlaW50ZXJwcmV0
X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3Ap
LCBsZW5ndGgpOworCisgICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlwdCgmaGVscGVyLCAw
LCBsZW5ndGgsICZoZWxwZXIpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgdW5zaWduZWQgdG90YWxTdWdnZXN0ZWRDb3VudCA9ICgzICogbGVuZ3RoIC8gMiArIDE2
KTsKKworICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzOworICAgIFZlY3RvcjxHbHlwaD4gY2x1c3Rl
ck1hcDsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0UHJv
cGVydGllczsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5
cGhQcm9wZXJ0aWVzOworICAgIFZlY3RvcjxGTE9BVD4gZ2x5cGhBZHZhbmNlczsKKyAgICBWZWN0
b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzOworICAgIFZlY3RvcjxGbG9hdFBv
aW50PiBvcmlnaW5zOworICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFuY2VzOworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gc3RyaW5nSW5kaWNlczsKKworICAgIGdseXBocy5yZXNlcnZlQ2FwYWNpdHko
dG90YWxTdWdnZXN0ZWRDb3VudCk7CisgICAgY2x1c3Rlck1hcC5yZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKTsKKyAgICB0ZXh0UHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxTdWdnZXN0ZWRD
b3VudCk7CisgICAgZ2x5cGhQcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3Rl
ZENvdW50KTsKKyAgICBnbHlwaEFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3Rl
ZENvdW50KTsKKyAgICBnbHlwaE9mZnNldHMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVk
Q291bnQpOworICAgIG9yaWdpbnMucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsU3VnZ2VzdGVkQ291bnQp
OworICAgIGFkdmFuY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKKyAg
ICBzdHJpbmdJbmRpY2VzLnJlc2VydmVDYXBhY2l0eSh0b3RhbFN1Z2dlc3RlZENvdW50KTsKKwor
ICAgIGZvciAoY29uc3QgYXV0byYgcnVuIDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7CisgICAg
ICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50Q1AgPSBjcCArIHJ1bi5zdGFydFBvc2l0aW9uOworICAg
ICAgICBMUENXU1RSIHRleHRQb3NpdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBDV1NUUj4oY3Vy
cmVudENQKTsKKworICAgICAgICB1bnNpZ25lZCBzdWdnZXN0ZWRDb3VudCA9ICgzICogcnVuLmxl
bmd0aCAvIDIgKyAxNik7CisgICAgICAgIGdseXBocy5yZXNpemUoc3VnZ2VzdGVkQ291bnQpOwor
ICAgICAgICBjbHVzdGVyTWFwLnJlc2l6ZShydW4ubGVuZ3RoKTsKKyAgICAgICAgdGV4dFByb3Bl
cnRpZXMucmVzaXplKHN1Z2dlc3RlZENvdW50KTsKKyAgICAgICAgZ2x5cGhQcm9wZXJ0aWVzLnJl
c2l6ZShzdWdnZXN0ZWRDb3VudCk7CisKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IDA7
CisgICAgICAgIGlmICghc2hhcGUoYW5hbHl6ZXIuZ2V0KCksIHJ1bi5hbmFseXNpcywgZm9udFBs
YXRmb3JtRGF0YSwgdGV4dFBvc2l0aW9uLCBydW4ubGVuZ3RoLCBzdWdnZXN0ZWRDb3VudCwgZ2x5
cGhzLCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcywgZ2x5cGhQcm9wZXJ0aWVzLCBnbHlwaENv
dW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnbHlwaHMuc2hyaW5rKGdseXBo
Q291bnQpOworICAgICAgICB0ZXh0UHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAg
ICAgIGdseXBoUHJvcGVydGllcy5zaHJpbmsoZ2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQWR2
YW5jZXMucmVzaXplKGdseXBoQ291bnQpOworICAgICAgICBnbHlwaE9mZnNldHMucmVzaXplKGds
eXBoQ291bnQpOworCisgICAgICAgIEhSRVNVTFQgcGxhY2VtZW50UmVzdWx0ID0gYW5hbHl6ZXIt
PkdldEdseXBoUGxhY2VtZW50cyh0ZXh0UG9zaXRpb24sIGNsdXN0ZXJNYXAuZGF0YSgpLCB0ZXh0
UHJvcGVydGllcy5kYXRhKCksIHJ1bi5sZW5ndGgsCisgICAgICAgICAgICBnbHlwaHMuZGF0YSgp
LCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCBnbHlwaENvdW50LCBmb250UGxhdGZvcm1EYXRhLmR3
Rm9udEZhY2UoKSwKKyAgICAgICAgICAgIGZvbnRQbGF0Zm9ybURhdGEuc2l6ZSgpLCBmb250UGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCwgbV9y
dW4ubHRyKCksCisgICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCByZWludGVycHJldF9jYXN0PExQ
Q1dTVFI+KGxvY2FsZU5hbWUpLCAKKyAgICAgICAgICAgIGZlYXR1cmVzLmRhdGEoKSwgJnJ1bi5s
ZW5ndGgsIDEsCisgICAgICAgICAgICBnbHlwaEFkdmFuY2VzLmRhdGEoKSwgZ2x5cGhPZmZzZXRz
LmRhdGEoKSk7CisgICAgICAgIGlmIChGQUlMRUQocGxhY2VtZW50UmVzdWx0KSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAvLyBDb252ZXJ0IGFsbCBjaGFycyB0aGF0IHNob3VsZCBi
ZSB0cmVhdGVkIGFzIHNwYWNlcyB0byB1c2UgdGhlIHNwYWNlIGdseXBoLgorICAgICAgICAvLyBX
ZSBhbHNvIGNyZWF0ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBxdWlja2x5IGdvIGZyb20gc3Bh
Y2UgZ2x5cGhzIGJhY2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLgorICAgICAg
ICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC0+c3BhY2VXaWR0aCgpIC0gZm9udC0+c3ludGhldGlj
Qm9sZE9mZnNldCgpOworCisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcnVuLmxlbmd0aDsg
KytrKSB7CisgICAgICAgICAgICBVQ2hhciBjaCA9ICooY3VycmVudENQICsgayk7CisgICAgICAg
ICAgICBib29sIHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOwor
ICAgICAgICAgICAgYm9vbCB0cmVhdEFzWmVyb1dpZHRoU3BhY2UgPSBGb250Q2FzY2FkZTo6dHJl
YXRBc1plcm9XaWR0aFNwYWNlKGNoKTsKKyAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgfHwg
dHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7CisgICAgICAgICAgICAgICAgLy8gU3Vic3RpdHV0ZSBp
biB0aGUgc3BhY2UgZ2x5cGggYXQgdGhlIGFwcHJvcHJpYXRlIHBsYWNlIGluIHRoZSBnbHlwaHMK
KyAgICAgICAgICAgICAgICAvLyBhcnJheS4KKyAgICAgICAgICAgICAgICBnbHlwaHNbY2x1c3Rl
ck1hcFtrXV0gPSBmb250LT5zcGFjZUdseXBoKCk7CisgICAgICAgICAgICAgICAgZ2x5cGhBZHZh
bmNlc1tjbHVzdGVyTWFwW2tdXSA9IHRyZWF0QXNTcGFjZSA/IHNwYWNlV2lkdGggOiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3JpZ2lucy5yZXNpemUoZ2x5cGhDb3Vu
dCk7CisgICAgICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaENvdW50KTsKKyAgICAgICAgc3RyaW5n
SW5kaWNlcy5yZXNpemUoZ2x5cGhDb3VudCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBnbHlwaENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN0cmluZ0luZGljZXNbaV0gPSBp
OworICAgICAgICAgICAgb3JpZ2luc1tpXSA9IEZsb2F0UG9pbnQoZ2x5cGhPZmZzZXRzW2ldLmFk
dmFuY2VPZmZzZXQsIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCk7CisgICAgICAgICAg
ICBhZHZhbmNlc1tpXSA9IEZsb2F0U2l6ZShnbHlwaEFkdmFuY2VzW2ldLCAwKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3Jl
YXRlKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGljZXMsIEZsb2F0U2l6ZSgp
LCAqZm9udCwgY3VycmVudENQLCAwLCBydW4ubGVuZ3RoLCAwLCBydW4ubGVuZ3RoLCBtX3J1bi5s
dHIoKSkpOworICAgIH0KIH0KIAogfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjUxODk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkw
LDE0ICsxOTAsMjAgQEAgQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZvcm1Gbwog
CiAgICAgVmVjdG9yPHdjaGFyX3Q+IGxvY2FsZU5hbWUoTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7
CiAgICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVO
YW1lLmRhdGEoKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
bG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwogCi0gICAgQ09NUHRyPElE
V3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oc3lz
dGVtRm9udENvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOwotICAgIGlmICgh
Zm9udEZhbWlseSkKLSAgICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1pbHlGb3JDb2xsZWN0aW9u
KHdlYlByb2Nlc3NGb250Q29sbGVjdGlvbigpLCBsb2NhbGVOYW1lLCBsb2dGb250KTsKKyAgICBD
T01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9uMT4gY29sbGVjdGlvbihRdWVyeSwgc3lzdGVtRm9u
dENvbGxlY3Rpb24pOworCisgICAgQ09NUHRyPElEV3JpdGVGb250RmFtaWx5PiBmb250RmFtaWx5
ID0gZm9udEZhbWlseUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbi5nZXQoKSwgbG9jYWxlTmFtZSwg
bG9nRm9udCk7CisgICAgaWYgKCFmb250RmFtaWx5KSB7CisgICAgICAgIGNvbGxlY3Rpb24gPSB3
ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKTsKKyAgICAgICAgZm9udEZhbWlseSA9IGZvbnRGYW1p
bHlGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb24uZ2V0KCksIGxvY2FsZU5hbWUsIGxvZ0ZvbnQpOwor
ICAgIH0KIAogICAgIGlmICghZm9udEZhbWlseSkgewogICAgICAgICAvLyBKdXN0IHJldHVybiB0
aGUgZmlyc3Qgc3lzdGVtIGZvbnQuCi0gICAgICAgIGhyID0gc3lzdGVtRm9udENvbGxlY3Rpb24t
PkdldEZvbnRGYW1pbHkoMCwgJmZvbnRGYW1pbHkpOworICAgICAgICBjb2xsZWN0aW9uID0gQ09N
UHRyPElEV3JpdGVGb250Q29sbGVjdGlvbjE+KFF1ZXJ5LCBzeXN0ZW1Gb250Q29sbGVjdGlvbik7
CisgICAgICAgIGhyID0gY29sbGVjdGlvbi0+R2V0Rm9udEZhbWlseSgwLCAmZm9udEZhbWlseSk7
CiAgICAgICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTIxOCw2ICsyMjQsMjEgQEAgQ09NUHRyPElEV3JpdGVGb250PiBjcmVhdGVXaXRoUGxhdGZv
cm1GbwogICAgIHJldHVybiBkd0ZvbnQ7CiB9CiAKK0RXUklURV9GT05UX1dFSUdIVCBmb250V2Vp
Z2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKQoreworICAgIHJldHVybiBEV1JJVEVfRk9OVF9X
RUlHSFRfUkVHVUxBUjsKK30KKworRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKQoreworICAgIHJldHVybiBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUw7
Cit9CisKK0RXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2goY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpCit7CisgICAgcmV0dXJuIERXUklURV9GT05UX1NUUkVUQ0hfTk9STUFMOworfQorCiB9
IC8vIG5hbWVzcGFjZSBEaXJlY3RXcml0ZQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGlsaXRp
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0V3JpdGVVdGlsaXRpZXMuaAkocmV2aXNpb24gMjUxODk1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDggKzM2LDEzIEBAIGludGVyZmFjZSBJRFdyaXRlRm9udENvbGxlY3Rpb24x
OwogaW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5OwogaW50ZXJmYWNlIElEV3JpdGVHZGlJbnRl
cm9wOwogCitlbnVtIERXUklURV9GT05UX1dFSUdIVDsKK2VudW0gRFdSSVRFX0ZPTlRfU1RZTEU7
CitlbnVtIERXUklURV9GT05UX1NUUkVUQ0g7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogbmFtZXNwYWNlIERp
cmVjdFdyaXRlIHsKQEAgLTUyLDYgKzU3LDEwIEBAIENPTVB0cjxJRFdyaXRlRm9udEZhbWlseT4g
Zm9udEZhbWlseUZvckMKIENPTVB0cjxJRFdyaXRlRm9udD4gY3JlYXRlV2l0aFBsYXRmb3JtRm9u
dChjb25zdCBMT0dGT05UJik7CiBWZWN0b3I8d2NoYXJfdD4gZmFtaWx5TmFtZUZvckxvY2FsZShJ
RFdyaXRlRm9udEZhbWlseSosIGNvbnN0IFZlY3Rvcjx3Y2hhcl90PiYgbG9jYWxlTmFtZSk7CiAK
K0RXUklURV9GT05UX1dFSUdIVCBmb250V2VpZ2h0KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsK
K0RXUklURV9GT05UX1NUWUxFIGZvbnRTdHlsZShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CitE
V1JJVEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsK
KwogfSAvLyBuYW1lc3BhY2UgRGlyZWN0V3JpdGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjUxODk1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1MywxNCBAQCBGb250UGxhdGZvcm1EYXRh
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAKICAgICBBU1NFUlQobV9mb250UmVmZXJlbmNlKTsK
IAorICAgIGF1dG8gZmFjZU5hbWUgPSBtX25hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKTsKKyAgICBpZiAoZmFjZU5hbWUuc2l6ZSgpID4gTEZfRkFDRVNJWkUpIHsKKyAgICAgICAg
ZmFjZU5hbWUucmVzaXplKExGX0ZBQ0VTSVpFKTsKKyAgICAgICAgZmFjZU5hbWUubGFzdCgpID0g
MDsKKyAgICB9CisKICAgICBMT0dGT05UIGxvZ0ZvbnQgeyB9OwotICAgIG1lbWNweShsb2dGb250
LmxmRmFjZU5hbWUsIG1fbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEo
KSwgc2l6ZW9mKGxvZ0ZvbnQubGZGYWNlTmFtZVswXSkgKiBzdGQ6Om1pbjxzaXplX3Q+KHN0YXRp
Y19jYXN0PHNpemVfdD4oTEZfRkFDRVNJWkUpLCAxICsgbV9uYW1lLmxlbmd0aCgpKSk7CisgICAg
bWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgZmFjZU5hbWUuZGF0YSgpLCBzaXplb2YobG9nRm9u
dC5sZkZhY2VOYW1lWzBdKSAqIHN0ZDo6bWluPHNpemVfdD4oc3RhdGljX2Nhc3Q8c2l6ZV90PihM
Rl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsKIAogICAgIGxvZ0ZvbnQubGZIZWln
aHQgPSAtc2l6ZTsKICAgICBpZiAocmVuZGVyaW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6
Tm9ybWFsKQpAQCAtODAsOCArODYsOCBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6CiAgICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dGb250ID0gYWRvcHRDRihDR0Zv
bnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dGb250KSk7CiAgICAgcmV0dXJuIEZvbnRQbGF0
Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGlj
LCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwogI2Vsc2UK
LSAgICBDT01QdHI8SURXcml0ZUZvbnQ+IGR3Rm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRo
UGxhdGZvcm1Gb250KGxvZ0ZvbnQpOwotICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1v
dmUoaGZvbnQpLCBkd0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9k
ZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKKyAgICBhdXRvIGZvbnQgPSBEaXJl
Y3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KTsKKyAgICByZXR1cm4gRm9u
dFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgV1RGTW92ZShmb250KSwgc2l6ZSwgYm9sZCwg
aXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwog
I2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQuY3BwCShyZXZp
c2lvbiAyNTE4OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDEyICs1MywxMiBA
QCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoCiAgICAgICAgIG1faXNT
eXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3JhbmRlIik7CiB9CiAKLUZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiYmIGhmb250
LCBJRFdyaXRlRm9udCogZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUs
IGJvb2wgdXNlR0RJKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmpl
Y3Q8SEZPTlQ+JiYgaGZvbnQsIENPTVB0cjxJRFdyaXRlRm9udD4mJiBmb250LCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCiAgICAgOiBtX3N5bnRoZXRp
Y0JvbGQoYm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQogICAgICwgbV9z
aXplKHNpemUpCiAgICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdU
Rk1vdmUoaGZvbnQpKSkKLSAgICAsIG1fZHdGb250KGZvbnQpCisgICAgLCBtX2R3Rm9udChXVEZN
b3ZlKGZvbnQpKQogICAgICwgbV91c2VHREkodXNlR0RJKQogewogICAgIEhSRVNVTFQgaHIgPSBt
X2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CkBAIC0xMTYsNTUgKzExNiw2
IEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsKGMKICAgICAgICAgJiYg
Zm9udHNBcmVFcXVhbChtX2R3Rm9udC5nZXQoKSwgb3RoZXIubV9kd0ZvbnQuZ2V0KCkpOwogfQog
Ci1IUkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChjb25zdCBMT0dG
T05UJiBsb2dGb250LCBJRFdyaXRlRm9udCoqIGR3Rm9udCkKLXsKLSAgICBpZiAoIWR3Rm9udCkK
LSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgICpkd0ZvbnQgPSBEaXJlY3RXcml0ZTo6
Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KS5nZXQoKTsKLQotICAgIHJldHVybiBTX09L
OwotfQotCi1IUkVTVUxUIEZvbnRQbGF0Zm9ybURhdGE6OmNyZWF0ZUZhbGxiYWNrRm9udChIRk9O
VCBoZm9udCwgSURXcml0ZUZvbnQqKiBkd0ZvbnQpCi17Ci0gICAgaWYgKCFkd0ZvbnQpCi0gICAg
ICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICBDT01QdHI8SURXcml0ZUZvbnRDb2xsZWN0aW9u
PiBmb250Q29sbGVjdGlvbjsKLSAgICBIUkVTVUxUIGhyID0gRGlyZWN0V3JpdGU6OmZhY3Rvcnko
KS0+R2V0U3lzdGVtRm9udENvbGxlY3Rpb24oJmZvbnRDb2xsZWN0aW9uKTsKLSAgICBpZiAoRkFJ
TEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgSFduZERDIGhkYygwKTsKLSAgICBI
R0RJT0JKIG9sZEZvbnQgPSA6OlNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLQotICAgIENPTVB0
cjxJRFdyaXRlRm9udEZhY2U+IGZvbnRGYWNlOwotICAgIGhyID0gRGlyZWN0V3JpdGU6OmdkaUlu
dGVyb3AoKS0+Q3JlYXRlRm9udEZhY2VGcm9tSGRjKGhkYywgJmZvbnRGYWNlKTsKLSAgICBpZiAo
RkFJTEVEKGhyKSkgewotICAgICAgICA6OlNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAg
ICAgICByZXR1cm4gaHI7Ci0gICAgfQotCi0gICAgTE9HRk9OVCBnZGlCYXNlZEZvbnQgPSB7IH07
Ci0gICAgaHIgPSBEaXJlY3RXcml0ZTo6Z2RpSW50ZXJvcCgpLT5Db252ZXJ0Rm9udEZhY2VUb0xP
R0ZPTlQoZm9udEZhY2UuZ2V0KCksICZnZGlCYXNlZEZvbnQpOwotICAgIGlmIChGQUlMRUQoaHIp
KSB7Ci0gICAgICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgICAgIHJldHVy
biBocjsKLSAgICB9Ci0KLSAgICBociA9IGZvbnRDb2xsZWN0aW9uLT5HZXRGb250RnJvbUZvbnRG
YWNlKGZvbnRGYWNlLmdldCgpLCBkd0ZvbnQpOwotCi0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICBociA9IERpcmVjdFdyaXRlOjp3ZWJQcm9jZXNzRm9udENvbGxlY3Rpb24oKS0+R2V0
Rm9udEZyb21Gb250RmFjZShmb250RmFjZS5nZXQoKSwgZHdGb250KTsKLQotICAgIDo6U2VsZWN0
T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBocjsKLQotICAgIHJldHVybiBjcmVhdGVGYWxsYmFja0ZvbnQoZ2RpQmFzZWRGb250LCBk
d0ZvbnQpOwotfQotCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAkocmV2aXNpb24gMjUxODk1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw5ICszMywxMSBAQAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgIlVuaXNjcmliZUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCisjaWYgIVVTRShESVJF
Q1QyRCkKKyNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCisjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00OSw2ICs1MSw4IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4
cGFuZEFyb3VuZElkZW9ncmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiAhVVNFKERJUkVD
VDJEKQorCiB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0
KHRoaXMsIHJ1bik7CkBAIC0xMTMsNCArMTE3LDYgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRG
b3JQb3NpdGlvbkZvckNvbQogICAgIHJldHVybiBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9u
KHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAorI2VuZGlmCisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI1MTg5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjcgKzUyLDQ1IEBAIGJvb2wgR2x5cGhQYWdlOjpm
aWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBVQ2hhciBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1F
X01BWF9MRU5HVEggKyAxXSA9IHsgfTsKICAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRl
ZmF1bHRMb2NhbGVOYW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIExP
Q0FMRV9OQU1FX01BWF9MRU5HVEgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGxvY2FsZUxlbmd0aCA8
PSBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKLSAgICBsb2NhbGVOYW1lW2xvY2FsZUxlbmd0aF0g
PSAnXDAnOwogCiAgICAgVGV4dEFuYWx5emVySGVscGVyIGhlbHBlcihyZWludGVycHJldF9jYXN0
PExQV1NUUj4oJmxvY2FsZU5hbWUpLCByZWludGVycHJldF9jYXN0PExQV1NUUj4oYnVmZmVyKSwg
YnVmZmVyTGVuZ3RoKTsKIAogICAgIGhyID0gYW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBl
ciwgMCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKIAotICAgIHVuc2lnbmVkIHJldHVybmVkQ291bnQgPSAwOwotICAgIEdseXBoIGxv
Y2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICBHbHlwaCBjbHVzdGVyTWFwW0ds
eXBoUGFnZTo6c2l6ZV07CisgICAgVmVjdG9yPEdseXBoPiBnbHlwaHMoR2x5cGhQYWdlOjpzaXpl
LCAwKTsKKyAgICBWZWN0b3I8R2x5cGg+IGNsdXN0ZXJNYXAoR2x5cGhQYWdlOjpzaXplLCAwKTsK
ICAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTPiB0ZXh0UHJvcGVydGll
cyhHbHlwaFBhZ2U6OnNpemUpOwogICAgIFZlY3RvcjxEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9Q
RVJUSUVTPiBnbHlwaFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXplKTsKIAotICAgIGhyID0gYW5h
bHl6ZXItPkdldEdseXBocyhyZWludGVycHJldF9jYXN0PExQQ1dTVFI+KGJ1ZmZlciksIGJ1ZmZl
ckxlbmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0Zm9ybURhdGEu
b3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsLCBmYWxzZSwKLSAgICAg
ICAgJmhlbHBlci5tX2FuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCAwLCBHbHlwaFBhZ2U6OnNpemUsIGNsdXN0ZXJNYXAsIHRleHRQcm9wZXJ0aWVzLmRhdGEoKSwK
LSAgICAgICAgbG9jYWxHbHlwaEJ1ZmZlciwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEoKSwgJnJldHVy
bmVkQ291bnQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNvbnN0IFdDSEFSKiB0ZXh0U3RhcnQgPSByZWludGVycHJldF9jYXN0PExQQ1dTVFI+
KGJ1ZmZlcik7CisgICAgR2x5cGgqIGdseXBoRGF0YSA9IGdseXBocy5kYXRhKCk7CisgICAgR2x5
cGgqIGNsdXN0ZXJNYXBEYXRhID0gY2x1c3Rlck1hcC5kYXRhKCk7CisgICAgRFdSSVRFX1NIQVBJ
TkdfVEVYVF9QUk9QRVJUSUVTKiB0ZXh0UHJvcGVydGllc0RhdGEgPSB0ZXh0UHJvcGVydGllcy5k
YXRhKCk7CisgICAgRFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUyogZ2x5cGhQcm9wZXJ0
aWVzRGF0YSA9IGdseXBoUHJvcGVydGllcy5kYXRhKCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgR2x5cGggZ2x5cGggPSBs
b2NhbEdseXBoQnVmZmVyW2ldOworICAgIHVuc2lnbmVkIHRvdGFsID0gMDsKKyAgICB1bnNpZ25l
ZCBtYXhHbHlwaENvdW50ID0gR2x5cGhQYWdlOjpzaXplOworICAgIGZvciAoY29uc3QgYXV0byYg
cnVuIDogaGVscGVyLm1fYW5hbHl6ZWRSdW5zKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRv
dGFsICsgcnVuLmxlbmd0aCA8PSBidWZmZXJMZW5ndGgpOworCisgICAgICAgIHVuc2lnbmVkIHJl
dHVybmVkQ291bnQgPSAwOworICAgICAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHModGV4dFN0
YXJ0ICsgcnVuLnN0YXJ0UG9zaXRpb24sIHJ1bi5sZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdG
b250RmFjZSgpLCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0
aW9uOjpWZXJ0aWNhbCwgZmFsc2UsCisgICAgICAgICAgICAmcnVuLmFuYWx5c2lzLCBudWxscHRy
LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyLCAwLCBtYXhHbHlwaENvdW50LCBjbHVzdGVyTWFw
RGF0YSwgdGV4dFByb3BlcnRpZXNEYXRhLAorICAgICAgICAgICAgZ2x5cGhEYXRhLCBnbHlwaFBy
b3BlcnRpZXNEYXRhLCAmcmV0dXJuZWRDb3VudCk7CisKKyAgICAgICAgaWYgKCFTVUNDRUVERUQo
aHIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGdseXBoRGF0YSArPSBy
ZXR1cm5lZENvdW50OworICAgICAgICBjbHVzdGVyTWFwRGF0YSArPSByZXR1cm5lZENvdW50Owor
ICAgICAgICB0ZXh0UHJvcGVydGllc0RhdGEgKz0gcmV0dXJuZWRDb3VudDsKKyAgICAgICAgZ2x5
cGhQcm9wZXJ0aWVzRGF0YSArPSByZXR1cm5lZENvdW50OworICAgICAgICBtYXhHbHlwaENvdW50
IC09IHJldHVybmVkQ291bnQ7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdseXBoUGFnZTo6c2l6ZTsgKytpKSB7CisgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhzW2ld
OwogICAgICAgICBpZiAoIWdseXBoKQogICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAw
KTsKICAgICAgICAgZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAkocmV2aXNpb24g
MjUxODk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFs
eXplckhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1UZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihX
Q0hBUiogbG9jYWxlTmFtZSwgV0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQor
VGV4dEFuYWx5emVySGVscGVyOjpUZXh0QW5hbHl6ZXJIZWxwZXIoY29uc3QgV0NIQVIqIGxvY2Fs
ZU5hbWUsIGNvbnN0IFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKICAgICA6
IG1fbG9jYWxlTmFtZShsb2NhbGVOYW1lKQogICAgICwgbV9idWZmZXIoYnVmZmVyKQogICAgICwg
bV9idWZmZXJMZW5ndGgoYnVmZmVyTGVuZ3RoKQpAQCAtMTIyLDcgKzEyMiw4IEBAIEhSRVNVTFQg
VGV4dEFuYWx5emVySGVscGVyOjpTZXRMaW5lQnJlYWsKIAogSFJFU1VMVCBUZXh0QW5hbHl6ZXJI
ZWxwZXI6OlNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0
TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTKiBhbmFseXNpcykKIHsKLSAgICBt
X2FuYWx5c2lzID0gKmFuYWx5c2lzOworICAgIEFuYWx5emVkUnVuIGN1cnJlbnQgPSB7IHRleHRQ
b3NpdGlvbiwgdGV4dExlbmd0aCwgKmFuYWx5c2lzIH07CisgICAgbV9hbmFseXplZFJ1bnMuYXBw
ZW5kKFdURk1vdmUoY3VycmVudCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFs
eXplckhlbHBlci5oCShyZXZpc2lvbiAyNTE4OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDExICsyNiwxOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxkd3JpdGUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEFuYWx5
emVkUnVuIHsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uIHsgMCB9OworICAgIHVuc2lnbmVk
IGxlbmd0aCB7IDAgfTsKKyAgICBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTIGFuYWx5c2lzOworfTsK
Kwogc3RydWN0IFRleHRBbmFseXplckhlbHBlciA6IHB1YmxpYyBJRFdyaXRlVGV4dEFuYWx5c2lz
U2luaywgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSB7Ci0gICAgVGV4dEFuYWx5emVySGVscGVy
KFdDSEFSKiBsb2NhbGVOYW1lLCBXQ0hBUiogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgp
OworICAgIFRleHRBbmFseXplckhlbHBlcihjb25zdCBXQ0hBUiogbG9jYWxlTmFtZSwgY29uc3Qg
V0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKIAogICAgIC8vIElVbmtub3du
CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKF9J
bl8gUkVGSUlELCBfQ09NX091dHB0cl8gdm9pZCoqKTsKQEAgLTUwLDEwICs1NywxMCBAQCBzdHJ1
Y3QgVGV4dEFuYWx5emVySGVscGVyIDogcHVibGljIElEV3JpCiAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFNldEJpZGlMZXZlbChVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5U
MzIgdGV4dExlbmd0aCwgVUlOVDggZXhwbGljaXRMZXZlbCwgVUlOVDggcmVzb2x2ZWRMZXZlbCk7
CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldE51bWJlclN1YnN0aXR1
dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgSURXcml0ZU51bWJl
clN1YnN0aXR1dGlvbiopOwogCi0gICAgV0NIQVIqIG1fbG9jYWxlTmFtZSB7IG51bGxwdHIgfTsK
LSAgICBXQ0hBUiogbV9idWZmZXIgeyBudWxscHRyIH07CisgICAgY29uc3QgV0NIQVIqIG1fbG9j
YWxlTmFtZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBXQ0hBUiogbV9idWZmZXIgeyBudWxscHRy
IH07CiAgICAgdW5zaWduZWQgbV9idWZmZXJMZW5ndGggeyAwIH07Ci0gICAgRFdSSVRFX1NDUklQ
VF9BTkFMWVNJUyBtX2FuYWx5c2lzIHsgfTsKKyAgICBWZWN0b3I8QW5hbHl6ZWRSdW4+IG1fYW5h
bHl6ZWRSdW5zOwogICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>