<?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>202794</bug_id>
          
          <creation_ts>2019-10-10 06:16:14 -0700</creation_ts>
          <short_desc>Make CSS font shorthands parsable within a worker (i.e. without CSSValuePool)</short_desc>
          <delta_ts>2020-11-20 13:44:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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>
          
          <blocked>183720</blocked>
    
    <blocked>186759</blocked>
    
    <blocked>202793</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Lord">clord</reporter>
          <assigned_to name="Chris Lord">clord</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1578614</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 06:16:14 -0700</bug_when>
    <thetext>This bug will track making fonts stylable within a Worker. Currently styling requires a Document, but the spec says font styling on OffscreenCanvas should be possible within a worker using WorkerGlobalScope as the font provider, essentially.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578655</commentid>
    <comment_count>1</comment_count>
      <attachid>380642</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2019-10-10 08:19:33 -0700</bug_when>
    <thetext>Created attachment 380642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578808</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-10-10 13:11:19 -0700</bug_when>
    <thetext>As far as I know, none of objects in StyleResolver are thread safe. We need to very carefully separate those parts that are thread safe &amp; make things needed for this work thread safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691453</commentid>
    <comment_count>3</comment_count>
      <attachid>409552</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-24 04:28:13 -0700</bug_when>
    <thetext>Created attachment 409552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691454</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-24 04:32:49 -0700</bug_when>
    <thetext>A work-in-progress that I&apos;m submitting to see failures on EWS. This patch adds CSSParser::parseFontWorkerSafe (perhaps should be called parseFontShortHandWorkerSafe...) which does the equivalent of parseColorWorkerSafe, but for font short-hands - that is, it does the CSS parsing using consume*Raw functions so as to bypass use of the CSSValuePool (which isn&apos;t thread-safe and isn&apos;t necessary as we really just want the end result, not any of the CSS gubbins).

To test this new path, this also adds a bunch of code that ultimately should be shared somehow with StyleBuilder* to apply font styling from raw font style data, as opposed to CSSValue via a StyleBuilder. It&apos;d be good to have a static function somewhere that can do this.

Not handled in this WIP - Removing the need for Document, doing anything with FontResolver, anything to do with OffscreenCanvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691455</commentid>
    <comment_count>5</comment_count>
      <attachid>409553</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-24 04:36:43 -0700</bug_when>
    <thetext>Created attachment 409553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691467</commentid>
    <comment_count>6</comment_count>
      <attachid>409557</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-24 04:53:27 -0700</bug_when>
    <thetext>Created attachment 409557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691490</commentid>
    <comment_count>7</comment_count>
      <attachid>409567</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-24 06:37:33 -0700</bug_when>
    <thetext>Created attachment 409567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692520</commentid>
    <comment_count>8</comment_count>
      <attachid>409882</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-28 03:56:42 -0700</bug_when>
    <thetext>Created attachment 409882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692566</commentid>
    <comment_count>9</comment_count>
      <attachid>409889</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-28 08:56:45 -0700</bug_when>
    <thetext>Created attachment 409889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692866</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-29 02:20:33 -0700</bug_when>
    <thetext>I&apos;m hijacking this bug to track what this has turned into - further work will be needed for fonts to be fully stylable in a worker, but the first step is to make CSS font shorthands safely parsable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692867</commentid>
    <comment_count>11</comment_count>
      <attachid>409978</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-29 02:45:19 -0700</bug_when>
    <thetext>Created attachment 409978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692868</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-29 02:54:37 -0700</bug_when>
    <thetext>Some notes about this patch;

This is kind of the font equivalent of bug 204575, which made full CSS colour parsing available to OffscreenCanvas. This makes font shorthand parsing available to non-main-thread users by adding &apos;Raw&apos; equivalents of the necessary consume* CSS parsing functions and removing the use of CSSValue. parseFontWorkerSafe returns a FontRaw object that contains the raw values of the font longhands.

To make this still useful, it also adds Style::ResolveForFontRaw, which takes a FontRaw and other necessary values and returns a RenderStyle. This removes the use of StyleBuilder, which also dependeded on using CSSValue. I&apos;ve added a new file for this, somewhat in the vein of Style::ResolveForDocument.

To add test coverage and reduce the difference between HTMLCanvas and OffscreenCanvas, I&apos;ve used this function in CanvasRenderingContext2D::setFont, which is also, pleasantly, a code reduction in that area.

There is some duplication between ResolveForFontRaw and StyleBuilderCustom/StyleBuilderConverter - not a huge amount, but I&apos;d gladly take advice on the best way to get rid of it, as well of course as any feedback on this entire patch and design.

This is most of the work necessary for OffscreenCanvas on the main thread to provide font functions, but there are still lots of not-worker-safe/enabled bits of code left to work through for font support in a Worker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692893</commentid>
    <comment_count>13</comment_count>
      <attachid>409978</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-29 05:58:02 -0700</bug_when>
    <thetext>Comment on attachment 409978
Patch

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

&gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:49
&gt; +Optional&lt;RenderStyle&gt; resolveForFontRaw(const FontRaw&amp; fontRaw, FontCascadeDescription&amp;&amp; fontDescription, Document&amp; document)
&gt; +{
&gt; +    auto fontStyle = RenderStyle::create();

RenderStyle is not thread safe. It consists of non-atomically refcounted substructures (in DataRef&lt;&gt; fields). For example RenderStyle::create simply clones the static default style, sharing all substructures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692900</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-09-29 06:25:49 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #13)
&gt; Comment on attachment 409978 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=409978&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:49
&gt; &gt; +Optional&lt;RenderStyle&gt; resolveForFontRaw(const FontRaw&amp; fontRaw, FontCascadeDescription&amp;&amp; fontDescription, Document&amp; document)
&gt; &gt; +{
&gt; &gt; +    auto fontStyle = RenderStyle::create();
&gt; 
&gt; RenderStyle is not thread safe. It consists of non-atomically refcounted
&gt; substructures (in DataRef&lt;&gt; fields). For example RenderStyle::create simply
&gt; clones the static default style, sharing all substructures.

ok, that&apos;s good to know - in a future bug, we would need a function to either create a worker-safe RenderStyle, or to replace RenderStyle with something that could hold the same relevant data and be worker-safe. For this patch, it&apos;s not really an issue, I don&apos;t think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694664</commentid>
    <comment_count>15</comment_count>
      <attachid>410511</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-10-05 06:56:48 -0700</bug_when>
    <thetext>Created attachment 410511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696542</commentid>
    <comment_count>16</comment_count>
      <attachid>410511</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-10 13:12:11 -0700</bug_when>
    <thetext>Comment on attachment 410511
Patch

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

So much new code here. Wisher there was a way to save a bit more and make the code a bit less repetitive.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:140
&gt; +        if (category != CalculationCategory::Percent) {
&gt; +            if (!allowPercentOf || (category != CalculationCategory::PercentLength
&gt; +                &amp;&amp; category != CalculationCategory::PercentNumber))
&gt; +                return WTF::nullopt;
&gt; +        }

This logic is confusing enough that I think it might require a helper function. I also find the bool argument here both subtle and confusing.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:217
&gt; +        if (const CSSCalcValue* calcValue = calcParser.value()) {

auto

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:423
&gt; +                if (auto result = calcParser.consumePercentRaw(true))

This mysterious &quot;true&quot; is something we try to avoid in WebKit code.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1970
&gt; +    String familyName = concatenateFamilyName(range);
&gt; +    if (familyName.isNull())
&gt; +        return WTF::nullopt;
&gt; +    return familyName;

This shows that Optional&lt;String&gt; is a strange type. Since String already has a null value built in, it’s overkill to use Optional with it, despite the fact that it seems logical to do that. Another possibilities to change concatenateFamilyName to return Optional&lt;String&gt;.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:2090
&gt; +AtomString genericFontFamilyFromValueID(CSSValueID ident)

This could return const AtomString&amp;.

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:2108
&gt; +        return { };

This would return nullAtom.

&gt; Source/WebCore/style/StyleBuilderCustom.h:995
&gt;                  isGenericFamily = true;

The old code used to say &quot;default break&quot;. The new code instead sets isGenericFamily to true and calls CSSPropertyParserHelpers::genericFontFamilyFromValueID. Is that going to do the right thing?

&gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:199
&gt; +            return static_cast&lt;float&gt;(CSSPrimitiveValue::computeNonCalcLengthDouble(conversionData, length.type, length.value));

Here we are casting to a float.

&gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:201
&gt; +            return (parentSize * percentage) / 100.f;

Here we are writing an expression that will return a double without casting to a float. Unclear why the difference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698043</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-10-15 02:53:20 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #16)
&gt; Comment on attachment 410511 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=410511&amp;action=review
&gt; 
&gt; So much new code here. Wisher there was a way to save a bit more and make
&gt; the code a bit less repetitive.
&gt; 
&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:140
&gt; &gt; +        if (category != CalculationCategory::Percent) {
&gt; &gt; +            if (!allowPercentOf || (category != CalculationCategory::PercentLength
&gt; &gt; +                &amp;&amp; category != CalculationCategory::PercentNumber))
&gt; &gt; +                return WTF::nullopt;
&gt; &gt; +        }
&gt; 
&gt; This logic is confusing enough that I think it might require a helper
&gt; function. I also find the bool argument here both subtle and confusing.

I agree, I didn&apos;t really like this when I wrote it but nothing immediately came to mind... I&apos;ll try again.

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:217
&gt; &gt; +        if (const CSSCalcValue* calcValue = calcParser.value()) {
&gt; 
&gt; auto

Will change

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:423
&gt; &gt; +                if (auto result = calcParser.consumePercentRaw(true))
&gt; 
&gt; This mysterious &quot;true&quot; is something we try to avoid in WebKit code.

I&apos;ll try to find something better for this (and failing that, at least an enum or something).

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1970
&gt; &gt; +    String familyName = concatenateFamilyName(range);
&gt; &gt; +    if (familyName.isNull())
&gt; &gt; +        return WTF::nullopt;
&gt; &gt; +    return familyName;
&gt; 
&gt; This shows that Optional&lt;String&gt; is a strange type. Since String already has
&gt; a null value built in, it’s overkill to use Optional with it, despite the
&gt; fact that it seems logical to do that. Another possibilities to change
&gt; concatenateFamilyName to return Optional&lt;String&gt;.

You&apos;re right, I&apos;ll change to just using String.

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:2090
&gt; &gt; +AtomString genericFontFamilyFromValueID(CSSValueID ident)
&gt; 
&gt; This could return const AtomString&amp;.

Thanks, well spotted.

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:2108
&gt; &gt; +        return { };
&gt; 
&gt; This would return nullAtom.

I&apos;ll change this to emptyAtom() (which I assumed { } was, obviously incorrectly)

&gt; &gt; Source/WebCore/style/StyleBuilderCustom.h:995
&gt; &gt;                  isGenericFamily = true;
&gt; 
&gt; The old code used to say &quot;default break&quot;. The new code instead sets
&gt; isGenericFamily to true and calls
&gt; CSSPropertyParserHelpers::genericFontFamilyFromValueID. Is that going to do
&gt; the right thing?

The test for family.isEmpty() should mean that the default case still does the same thing with the above change.

&gt; &gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:199
&gt; &gt; +            return static_cast&lt;float&gt;(CSSPrimitiveValue::computeNonCalcLengthDouble(conversionData, length.type, length.value));
&gt; 
&gt; Here we are casting to a float.
&gt; 
&gt; &gt; Source/WebCore/style/StyleResolveForFontRaw.cpp:201
&gt; &gt; +            return (parentSize * percentage) / 100.f;
&gt; 
&gt; Here we are writing an expression that will return a double without casting
&gt; to a float. Unclear why the difference.

This is just a mistake, I&apos;ll add the cast to the latter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698047</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-10-15 03:25:07 -0700</bug_when>
    <thetext>Something else that needs fixing up, genericFontFamilyFromValueID isn&apos;t worker-safe at all. Need to figure out what to do with that... Ideally, some kind of thread-safe never destroyed AtomString would be great...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698078</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-10-15 05:15:45 -0700</bug_when>
    <thetext>(In reply to Chris Lord from comment #18)
&gt; Something else that needs fixing up, genericFontFamilyFromValueID isn&apos;t
&gt; worker-safe at all. Need to figure out what to do with that... Ideally, some
&gt; kind of thread-safe never destroyed AtomString would be great...

Just to note, I misread and this isn&apos;t required for parsing, so can be dealt with in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698114</commentid>
    <comment_count>20</comment_count>
      <attachid>411444</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-10-15 08:20:20 -0700</bug_when>
    <thetext>Created attachment 411444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698118</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-10-15 08:39:13 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #16)
&gt; Comment on attachment 410511 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=410511&amp;action=review
&gt; 
&gt; So much new code here. Wisher there was a way to save a bit more and make
&gt; the code a bit less repetitive.

The biggest cause of repetition is having to single out calc values, but I&apos;m not sure how best to address that without some more major refactoring...

The rest of these issues I&apos;ve solved in what I would consider the most obvious way, and this specifically;

&gt; &gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:140
&gt; &gt; +        if (category != CalculationCategory::Percent) {
&gt; &gt; +            if (!allowPercentOf || (category != CalculationCategory::PercentLength
&gt; &gt; +                &amp;&amp; category != CalculationCategory::PercentNumber))
&gt; &gt; +                return WTF::nullopt;
&gt; &gt; +        }
&gt; 
&gt; This logic is confusing enough that I think it might require a helper
&gt; function. I also find the bool argument here both subtle and confusing.

I removed this weird logic and bool parameter and just added consumeLengthOrPercentRaw to CSSCalcParser, which makes more sense I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708566</commentid>
    <comment_count>22</comment_count>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-11-18 04:58:10 -0800</bug_when>
    <thetext>Just to note, I plan on landing this soon - I&apos;ve been manually checking OffscreenCanvas test results with main-thread font functions on a subsequent patch to make sure that behaviour doesn&apos;t deviate from canvas and from expectations. The results look good, which gives me a bit of extra confidence about landing this. Worst case scenario, we can back it out anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708568</commentid>
    <comment_count>23</comment_count>
      <attachid>414439</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-11-18 05:00:45 -0800</bug_when>
    <thetext>Created attachment 414439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708592</commentid>
    <comment_count>24</comment_count>
      <attachid>414446</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2020-11-18 07:08:12 -0800</bug_when>
    <thetext>Created attachment 414446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708606</commentid>
    <comment_count>25</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-18 08:04:14 -0800</bug_when>
    <thetext>Committed r269957: &lt;https://trac.webkit.org/changeset/269957&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414446.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708607</commentid>
    <comment_count>26</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-18 08:05:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/71539772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709588</commentid>
    <comment_count>27</comment_count>
      <attachid>414446</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2020-11-20 12:02:35 -0800</bug_when>
    <thetext>Comment on attachment 414446
Patch

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

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1957
&gt; +            if (fontStyleIsWithinRange(angleInDegrees))

This is defined statically within CSSPropertyParser.cpp so this file is not buildable outside a unified build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709614</commentid>
    <comment_count>28</comment_count>
      <attachid>414446</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-20 13:06:51 -0800</bug_when>
    <thetext>Comment on attachment 414446
Patch

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

&gt;&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:1957
&gt;&gt; +            if (fontStyleIsWithinRange(angleInDegrees))
&gt; 
&gt; This is defined statically within CSSPropertyParser.cpp so this file is not buildable outside a unified build.

Are you going to fix that, should I, or do you want Chris to fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709617</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-20 13:18:44 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #28)
&gt; Are you going to fix that, should I, or do you want Chris to fix it?

I have a few minutes so I am working on a fix, but I might not get it done fast enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709629</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-20 13:44:42 -0800</bug_when>
    <thetext>Fixing in bug 219222.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380642</attachid>
            <date>2019-10-10 08:19:33 -0700</date>
            <delta_ts>2020-09-24 04:28:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20191010161931.patch</filename>
            <type>text/plain</type>
            <size>57445</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwOTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKaW5kZXggOTRkNjNhM2I1ODkxOGFlYWI0ZWZhOWQ3
MDkzYjU4Zjg1ZDc3ZTEzMC4uYTZiOWQ2ZTUwZGM0NDkyN2RmMjFmYzlmM2QzMWE3NzA4MTUzYTNj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcApAQCAtNTcsNyArNTcsNiBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVGYWxsYmFj
ayhDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVAogCiBzdGF0aWMg
Ym9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwg
VmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0LCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgYXV0byYgcmVnaXN0ZXJlZFByb3BlcnRpZXMgPSBzdGF0ZS5zdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgp
OwogICAgIGF1dG8mIHN0eWxlID0gKnN0YXRlLnN0eWxlUmVzb2x2ZXItPnN0eWxlKCk7CiAKICAg
ICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwpAQCAtNzIsNiArNzEsMTAgQEAgc3RhdGljIGJv
b2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZl
Y3RvcjxDU1NQYXJzZXIKICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IGZhbGxiYWNrUmVzdWx0
OwogICAgIGJvb2wgZmFsbGJhY2tSZXR1cm4gPSByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQ
YXJzZXJUb2tlblJhbmdlKHJhbmdlKSwgZmFsbGJhY2tSZXN1bHQsIHN0YXRlKTsKIAorICAgIGlm
ICghc3RhdGUuc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbGxi
YWNrUmV0dXJuOworCisgICAgYXV0byYgcmVnaXN0ZXJlZFByb3BlcnRpZXMgPSBzdGF0ZS5zdHls
ZVJlc29sdmVyLT5kb2N1bWVudCgpLT5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQo
KTsKICAgICBhdXRvKiBwcm9wZXJ0eSA9IHN0eWxlLmdldEN1c3RvbVByb3BlcnR5KHZhcmlhYmxl
TmFtZSk7CiAKICAgICBpZiAoIXByb3BlcnR5IHx8IHByb3BlcnR5LT5pc1Vuc2V0KCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAppbmRleCBiYTE5MmY3ZjEwZjg4YTQ5
M2JiMzg4ODkzMTliYjVmOTNkNzVhMGUxLi43MmI4ZGZlYjY4ZGZiMzJkZGNiYzcxOTJjYTZlN2Zl
MjZmZWQ2Nzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCkBAIC01
Miw4ICs1MiwxMCBAQCBEb2N1bWVudFJ1bGVTZXRzOjp+RG9jdW1lbnRSdWxlU2V0cygpCiBSdWxl
U2V0KiBEb2N1bWVudFJ1bGVTZXRzOjp1c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUoKSBjb25zdAog
ewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIHR5cGVzIGZvciBkb2N1
bWVudCBydWxlIHNldHMgYW5kIHNoYWRvdyB0cmVlIHJ1bGUgc2V0cy4KLSAgICBpZiAobV9pc0Zv
clNoYWRvd1Njb3BlKQotICAgICAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCku
c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKS51c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5
bGUoKTsKKyAgICBpZiAobV9pc0ZvclNoYWRvd1Njb3BlKSB7CisgICAgICAgIEFTU0VSVChtX3N0
eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIu
ZG9jdW1lbnQoKS0+c3R5bGVTY29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKS51c2VyQWdlbnRN
ZWRpYVF1ZXJ5U3R5bGUoKTsKKyAgICB9CiAKICAgICB1cGRhdGVVc2VyQWdlbnRNZWRpYVF1ZXJ5
U3R5bGVJZk5lZWRlZCgpOwogICAgIHJldHVybiBtX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZS5n
ZXQoKTsKQEAgLTg0LDE0ICs4NiwxNyBAQCB2b2lkIERvY3VtZW50UnVsZVNldHM6OnVwZGF0ZVVz
ZXJBZ2VudE1lZGlhUXVlcnlTdHlsZUlmTmVlZGVkKCkgY29uc3QKIAogUnVsZVNldCogRG9jdW1l
bnRSdWxlU2V0czo6dXNlclN0eWxlKCkgY29uc3QKIHsKLSAgICBpZiAobV91c2VzU2hhcmVkVXNl
clN0eWxlKQotICAgICAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuc3R5bGVT
Y29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKS51c2VyU3R5bGUoKTsKKyAgICBpZiAobV91c2Vz
U2hhcmVkVXNlclN0eWxlKSB7CisgICAgICAgIEFTU0VSVChtX3N0eWxlUmVzb2x2ZXIuZG9jdW1l
bnQoKSk7CisgICAgICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS0+c3R5bGVT
Y29wZSgpLnJlc29sdmVyKCkucnVsZVNldHMoKS51c2VyU3R5bGUoKTsKKyAgICB9CiAgICAgcmV0
dXJuIG1fdXNlclN0eWxlLmdldCgpOwogfQogCiB2b2lkIERvY3VtZW50UnVsZVNldHM6OmluaXRp
YWxpemVVc2VyU3R5bGUoKQogewotICAgIGF1dG8mIGV4dGVuc2lvblN0eWxlU2hlZXRzID0gbV9z
dHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKTsKKyAgICBBU1NF
UlQobV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOworICAgIGF1dG8mIGV4dGVuc2lvblN0eWxl
U2hlZXRzID0gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCktPmV4dGVuc2lvblN0eWxlU2hlZXRz
KCk7CiAgICAgYXV0byYgbWVkaWFRdWVyeUV2YWx1YXRvciA9IG1fc3R5bGVSZXNvbHZlci5tZWRp
YVF1ZXJ5RXZhbHVhdG9yKCk7CiAgICAgYXV0byB0ZW1wVXNlclN0eWxlID0gbWFrZVVuaXF1ZTxS
dWxlU2V0PigpOwogICAgIGlmIChDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0gZXh0ZW5z
aW9uU3R5bGVTaGVldHMucGFnZVVzZXJTaGVldCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCmluZGV4
IDFmZjllZmY0OGU5ZjNiZmJjYmY1Mjk1MTNkMWY4NTBlOWRiYTU1OGMuLjYzNzJhZTJiN2NkZTli
NTdjNzk3YTIwMmQwNWE5ZDg5Y2VkYjBiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAgLTM5
Nyw3ICszOTcsOCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzLCBjb25zdCBNZQogICAgICAgICAgICAgICAgIGFk
ZENoaWxkUnVsZXMobWVkaWFSdWxlLmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZlciwgaXNJ
bml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAmJiByZXNvbHZlcikgewogICAgICAgICAg
ICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICByZXNvbHZl
ci0+ZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKS5hZGRGb250RmFjZVJ1bGUoZG93bmNhc3Q8U3R5
bGVSdWxlRm9udEZhY2U+KCpydWxlLmdldCgpKSwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFn
ZW50U2hhZG93VHJlZSk7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZXItPmRvY3VtZW50KCkp
OworICAgICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCktPmZvbnRTZWxlY3RvcigpLmFkZEZv
bnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUuZ2V0KCkpLCBpc0lu
aXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKTsKICAgICAgICAgICAgIHJlc29s
dmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzPFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpICYmIHJlc29sdmVyKQogICAgICAgICAg
ICAgcmVzb2x2ZXItPmFkZEtleWZyYW1lU3R5bGUoZG93bmNhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVz
PigqcnVsZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNv
bnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmlu
ZGV4IGMwNzNhMTBkNjg3ZWE0NDdkZjMwNTk5NWI0ZWZlZGVlNmExNjNjNTQuLjNhMGM0YWJjZTk1
OWZkOTRlOWE3YmFhMjQzNTY0YTVjNmQwOWI3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTI5MSwxMCArMjkxLDExIEBAIGlubGluZSBUIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBjCiAgICAgICAgICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAg
ICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IG1pbmltdW1MaW5l
V2lkdGggPSAxIC8gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7
CisgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gc3R5bGVSZXNvbHZlci5kb2N1bWVu
dCgpID8gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLT5kZXZpY2VTY2FsZUZhY3RvcigpIDogMTsK
KyAgICAgICAgZmxvYXQgbWluaW11bUxpbmVXaWR0aCA9IDEgLyBkZXZpY2VTY2FsZUZhY3RvcjsK
ICAgICAgICAgaWYgKHJlc3VsdCA+IDAgJiYgcmVzdWx0IDwgbWluaW11bUxpbmVXaWR0aCkKICAg
ICAgICAgICAgIHJldHVybiBtaW5pbXVtTGluZVdpZHRoOwotICAgICAgICByZXR1cm4gZmxvb3JU
b0RldmljZVBpeGVsKHJlc3VsdCwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgICAgICByZXR1cm4gZmxvb3JUb0RldmljZVBpeGVsKHJlc3VsdCwgZGV2
aWNlU2NhbGVGYWN0b3IpOwogICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTU4OCw5ICs1ODksOSBAQCBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3Bl
cmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZVJlcwog
ewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUucHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJICYmIHN0eWxlUmVzb2x2ZXIuZG9jdW1l
bnQoKSkgewogICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZlVmFsdWUu
c3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjc3NVUkxWYWx1ZSwgc3R5bGVS
ZXNvbHZlci5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IFNWR1VS
SVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjc3NVUkxWYWx1ZSwg
KnN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXQgZG9l
c24ndCB3b3JrIHdpdGggZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MTMzKQogICAgICAgICAgICAgcmV0dXJuIFJl
ZmVyZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFsdWUsIGZyYWdtZW50KTsK
ICAgICAgICAgfQpAQCAtMTE4MSw3ICsxMTgyLDggQEAgaW5saW5lIEdyaWRBdXRvRmxvdyBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGVSZXNvbHZlciYsIGMK
IAogaW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCiB7Ci0gICAgaWYgKGF1dG8qIGZyYW1lID0gc3R5bGVSZXNvbHZl
ci5kb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICBhdXRvKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXIu
ZG9jdW1lbnQoKSA/IHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS0+ZnJhbWUoKSA6IG51bGxwdHI7
CisgICAgaWYgKGZyYW1lKSB7CiAgICAgICAgIGZsb2F0IHRleHRab29tRmFjdG9yID0gc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT50ZXh0Wm9vbSgpICE9IFRleHRab29tOjpSZXNldCA/IGZyYW1lLT50
ZXh0Wm9vbUZhY3RvcigpIDogMS4wZjsKICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgKiB0ZXh0Wm9vbUZhY3Rvcik7CiAg
ICAgfQpAQCAtMTQ2MywxMiArMTQ2NSwxMyBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdQogCiBp
bmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR1VSSVJlZmVyZW5j
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CisgICAgQVNTRVJUKHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CiAgICAgU3RyaW5nIHM7CiAg
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1VSSSgpKQogICAgICAgICBzID0gcHJpbWl0
aXZlVmFsdWUuc3RyaW5nVmFsdWUoKTsKIAotICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmZy
YWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcocywgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgp
KTsKKyAgICByZXR1cm4gU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJ
U3RyaW5nKHMsICpzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOwogfQogCiBpbmxpbmUgQ29sb3Ig
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHQ29sb3IoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlckN1c3RvbS5oCmluZGV4IGM1YzJiZjVkMGY1ZmM3OTEwYWZmMTYyNTk5OTBjNDM4NjYw
YzE0MjQuLmIzOTM1OWQzMGM0Y2I3ZGFmNTRmMDFiYmE3MzA2Yzk4N2YxMDhmYmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTYxMCwyNCArNjEwLDI0IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsTGluZUhlaWdodChTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sCiAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVj
aWZpZWRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgp
KTsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBjb21wdXRlQmFzZVNwZWNpZmllZEZvbnRTaXpl
KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29s
IHBlcmNlbnRhZ2VBdXRvc2l6aW5nRW5hYmxlZCkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgY29tcHV0
ZUJhc2VTcGVjaWZpZWRGb250U2l6ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFNl
dHRpbmdzJiBzZXR0aW5ncywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIHBlcmNlbnRh
Z2VBdXRvc2l6aW5nRW5hYmxlZCkKIHsKICAgICBmbG9hdCByZXN1bHQgPSBzdHlsZS5zcGVjaWZp
ZWRGb250U2l6ZSgpOwotICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBh
dXRvKiBmcmFtZSA9IGRvY3VtZW50ID8gZG9jdW1lbnQuZnJhbWUoKSA6IG51bGxwdHI7CiAgICAg
aWYgKGZyYW1lICYmIHN0eWxlLnRleHRab29tKCkgIT0gVGV4dFpvb206OlJlc2V0KQogICAgICAg
ICByZXN1bHQgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiAgICAgcmVzdWx0ICo9IHN0eWxl
LmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAocGVyY2VudGFnZUF1dG9zaXppbmdFbmFibGVkICYm
ICFkb2N1bWVudC5zZXR0aW5ncygpLnRleHRBdXRvc2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkp
CisgICAgaWYgKHBlcmNlbnRhZ2VBdXRvc2l6aW5nRW5hYmxlZCAmJiAhc2V0dGluZ3MudGV4dEF1
dG9zaXppbmdVc2VzSWRlbXBvdGVudE1vZGUoKSkKICAgICAgICAgcmVzdWx0ICo9IHN0eWxlLnRl
eHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgZmxvYXQgY29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6
ZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQorc3RhdGljIGlubGluZSBmbG9hdCBjb21wdXRl
TGluZUhlaWdodE11bHRpcGxpZXJEdWVUb0ZvbnRTaXplKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKIHsKLSAgICBib29sIHBlcmNlbnRhZ2VBdXRv
c2l6aW5nRW5hYmxlZCA9IGRvY3VtZW50LnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVk
KCkgJiYgc3R5bGUudGV4dFNpemVBZGp1c3QoKS5pc1BlcmNlbnRhZ2UoKTsKKyAgICBib29sIHBl
cmNlbnRhZ2VBdXRvc2l6aW5nRW5hYmxlZCA9IHNldHRpbmdzLnRleHRBdXRvc2l6aW5nRW5hYmxl
ZCgpICYmIHN0eWxlLnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCk7CiAKICAgICBpZiAo
dmFsdWUuaXNMZW5ndGgoKSkgewotICAgICAgICBhdXRvIG1pbmltdW1Gb250U2l6ZSA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkubWluaW11bUZvbnRTaXplKCk7CisgICAgICAgIGF1dG8gbWluaW11bUZv
bnRTaXplID0gc2V0dGluZ3MubWluaW11bUZvbnRTaXplKCk7CiAgICAgICAgIGlmIChtaW5pbXVt
Rm9udFNpemUgPiAwKSB7CiAgICAgICAgICAgICBhdXRvIHNwZWNpZmllZEZvbnRTaXplID0gY29t
cHV0ZUJhc2VTcGVjaWZpZWRGb250U2l6ZShkb2N1bWVudCwgc3R5bGUsIHBlcmNlbnRhZ2VBdXRv
c2l6aW5nRW5hYmxlZCk7CiAgICAgICAgICAgICAvLyBTbWFsbCBmb250IHNpemVzIGNhdXNlIGEg
cHJlcG9zdGVyb3VzbHkgbGFyZ2UgKG5lYXIgaW5maW5pdHkpIGxpbmUtaGVpZ2h0LiBBZGQgYSBm
dXp6LWZhY3RvciBvZiAxcHggd2hpY2ggb3B0cyBvdXQgb2YKQEAgLTY0OSw3ICs2NDksNyBAQCBz
dGF0aWMgaW5saW5lIGZsb2F0IGNvbXB1dGVMaW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNp
emUoY29uc3QgRG9jdW1lbnQmIGRvYwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHBlcmNl
bnRhZ2VBdXRvc2l6aW5nRW5hYmxlZCAmJiAhZG9jdW1lbnQuc2V0dGluZ3MoKS50ZXh0QXV0b3Np
emluZ1VzZXNJZGVtcG90ZW50TW9kZSgpKQorICAgIGlmIChwZXJjZW50YWdlQXV0b3NpemluZ0Vu
YWJsZWQgJiYgIXNldHRpbmdzLnRleHRBdXRvc2l6aW5nVXNlc0lkZW1wb3RlbnRNb2RlKCkpCiAg
ICAgICAgIHJldHVybiBzdHlsZS50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKTsKICAgICBy
ZXR1cm4gMTsKIH0KQEAgLTY2NSw3ICs2NjUsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQog
ICAgICAgICBjb21wdXRlZExpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0LnZhbHVlKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKLSAgICAgICAgYXV0byBtdWx0aXBsaWVyID0gY29tcHV0ZUxpbmVIZWln
aHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6ZShzdHlsZVJlc29sdmVyLmRvY3VtZW50KCksICpzdHls
ZVJlc29sdmVyLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgYXV0byBtdWx0aXBs
aWVyID0gY29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6ZShzdHlsZVJlc29s
dmVyLmRvY3VtZW50KCksIHN0eWxlUmVzb2x2ZXIuc2V0dGluZ3MoKSwgKnN0eWxlUmVzb2x2ZXIu
c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBpZiAobXVsdGlwbGllciA9PSAxKQog
ICAgICAgICAgICAgY29tcHV0ZWRMaW5lSGVpZ2h0ID0gbGluZUhlaWdodC52YWx1ZSgpOwogICAg
ICAgICBlbHNlCkBAIC04NzUsNyArODc1LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2wKICAg
ICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJp
YyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgaWYg
KGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpIHsKICAgICAgICAgaWYgKENT
U1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lk
ZW50aWZpZXIoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERl
c2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCBmYWxz
ZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChz
aXplSWRlbnRpZmllciwgZmFsc2UsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSwgc3R5bGVSZXNv
bHZlci5zZXR0aW5ncygpKSk7CiAgICAgfQogICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1p
bHkoKS5pc0VtcHR5KCkpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhpbml0
aWFsRGVzYy5mYW1pbGllcygpKTsKQEAgLTk2NCw3ICs5NjQsNyBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZQogCiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkg
IT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKICAgICAgICAgaWYgKENTU1ZhbHVl
SUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZp
ZXIoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5
VXNlZEZpeGVkRGVmYXVsdFNpemUsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkpOworICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLCBzdHlsZVJlc29sdmVyLnNldHRpbmdz
KCkpKTsKICAgICB9CiAKICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZN
b3ZlKGZvbnREZXNjcmlwdGlvbikpOwpAQCAtMTQ4Niw3ICsxNDg2LDcgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVS
ZXNvbHZlciYgc3QKIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFs
Rm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKIHsKICAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0s
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKSk7CisgICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NT
VmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxl
UmVzb2x2ZXIuZG9jdW1lbnQoKSwgc3R5bGVSZXNvbHZlci5zZXR0aW5ncygpKTsKIAogICAgIGlm
IChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwKICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJn
ZToKLSAgICAgICAgICAgIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBm
b250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLmRvY3Vt
ZW50KCkpOworICAgICAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRl
bnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxlUmVzb2x2ZXIu
ZG9jdW1lbnQoKSwgc3R5bGVSZXNvbHZlci5zZXR0aW5ncygpKTsKICAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKGlkZW50KTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgpAQCAtMTYxNCwxMyArMTYx
NCwxMyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAh
KHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJl
bGF0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0
PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwg
c3R5bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQo
KS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKKyAgICAgICAgICAgIHNpemUgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxl
KCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSA/IHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS0+
cmVuZGVyVmlldygpIDogbnVsbHB0ciwgMS4wZiwgdHJ1ZSkpOwogICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1
ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZl
VmFsdWUuZmxvYXRWYWx1ZSgpICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsK
ICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5z
dGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKLSAgICAgICAgICAgIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgcGFyZW50Q29udmVyc2lvbkRhdGEgeyBzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmRv
Y3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlIH07CisgICAgICAgICAgICBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhIHBhcmVudENvbnZlcnNpb25EYXRhIHsgc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLCBjb252ZXJzaW9uRGF0YS5yb290U3R5bGUoKSwgc3R5bGVSZXNvbHZlci5k
b2N1bWVudCgpID8gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkgOiBudWxs
cHRyLCAxLjBmLCB0cnVlIH07CiAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY3Nz
Q2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUocGFyZW50Q29udmVyc2lvbkRhdGEp
LT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMjBlN2IyYWZiODFlNDJl
MWE1NTE2N2ZkZWJmMTJhMGY1OTFkOTZkMS4uNmY4ZjEwMTA2OWIzZDJjODg2MmFmMjliNTMxZWM5
MDAyYWNjNTdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTg3LDU1
ICsxODcsNzEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpNYXRjaFJlc3VsdDo6YWRkTWF0Y2hlZFBy
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm8KICAgICB9CiB9CiAKLVN0eWxlUmVz
b2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorU3R5bGVSZXNvbHZlcjo6
U3R5bGVSZXNvbHZlcihEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFNldHRpbmdzJiBzZXR0aW5n
cykKICAgICA6IG1fcnVsZVNldHMoKnRoaXMpCiAgICAgLCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2Fj
aGVTd2VlcFRpbWVyKCp0aGlzLCAmU3R5bGVSZXNvbHZlcjo6c3dlZXBNYXRjaGVkUHJvcGVydGll
c0NhY2hlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSNpZiBFTkFCTEUoQ1NTX0RFVklD
RV9BREFQVEFUSU9OKQotICAgICwgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIoVmlld3BvcnRTdHls
ZVJlc29sdmVyOjpjcmVhdGUoJmRvY3VtZW50KSkKLSNlbmRpZgorICAgICwgbV9zZXR0aW5ncyhz
ZXR0aW5ncykKICAgICAsIG1fc3R5bGVNYXAodGhpcykKLSAgICAsIG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZCgpKQorICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobV9zZXR0aW5ncy5hdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZCgpKQogewotICAgIEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50
LmRvY3VtZW50RWxlbWVudCgpOwotCi0gICAgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjppbml0RGVm
YXVsdFN0eWxlKHJvb3QpOworICAgIGlmIChtX2RvY3VtZW50KSB7CisjaWYgRU5BQkxFKENTU19E
RVZJQ0VfQURBUFRBVElPTikKKyAgICAgICAgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIgPSBWaWV3
cG9ydFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyNlbmRpZgorICAgICAgICBF
bGVtZW50KiByb290ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICAgICAg
Q1NTRGVmYXVsdFN0eWxlU2hlZXRzOjppbml0RGVmYXVsdFN0eWxlKHJvb3QpOworCisgICAgICAg
IC8vIGNvbnN0cnVjdCBkb2N1bWVudCByb290IGVsZW1lbnQgZGVmYXVsdCBzdHlsZS4gdGhpcyBp
cyBuZWVkZWQKKyAgICAgICAgLy8gdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0aGF0IGNvbnRh
aW4gcmVsYXRpdmUgY29uc3RyYWludHMsIGxpa2UgInNjcmVlbiBhbmQgKG1heC13aWR0aDogMTBl
bSkiCisgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBpbnN0ZWFkIG9mIGNvbnN0cnVjdG9yLCBiZWNh
dXNlIHdoZW4gY29uc3RydWN0b3IgaXMgcnVuLAorICAgICAgICAvLyBkb2N1bWVudCBkb2Vzbid0
IGhhdmUgZG9jdW1lbnRFbGVtZW50CisgICAgICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0
IGVsZW1lbnQgdGhhdCBnZXRzIHBhc3NlZCB0byBzdHlsZUZvckVsZW1lbnQgLWNhbGwKKyAgICAg
ICAgLy8gaXMgYWx3YXlzIGZyb20gdGhlIGRvY3VtZW50IHRoYXQgb3ducyB0aGUgc3R5bGUgc2Vs
ZWN0b3IKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC0+dmlldygpOworICAg
ICAgICBpZiAodmlldykKKyAgICAgICAgICAgIG1fbWVkaWFRdWVyeUV2YWx1YXRvciA9IE1lZGlh
UXVlcnlFdmFsdWF0b3IgeyB2aWV3LT5tZWRpYVR5cGUoKSB9OworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX21lZGlhUXVlcnlFdmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgImFs
bCIgfTsKKworICAgICAgICBpZiAocm9vdCkgeworICAgICAgICAgICAgbV9yb290RGVmYXVsdFN0
eWxlID0gc3R5bGVGb3JFbGVtZW50KCpyb290LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBu
dWxscHRyLCBSdWxlTWF0Y2hpbmdCZWhhdmlvcjo6TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJl
bmRlclN0eWxlOworICAgICAgICAgICAgLy8gVHVybiBvZmYgYXNzZXJ0aW9uIGFnYWluc3QgZm9u
dCBsb29rdXBzIGR1cmluZyBzdHlsZSByZXNvbHZlciBpbml0aWFsaXphdGlvbi4gV2UgbWF5IG5l
ZWQgcm9vdCBzdHlsZSBmb250IGZvciBtZWRpYSBxdWVyaWVzLgorICAgICAgICAgICAgbV9kb2N1
bWVudC0+Zm9udFNlbGVjdG9yKCkuaW5jcmVtZW50SXNDb21wdXRpbmdSb290U3R5bGVGb250KCk7
CisgICAgICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZt
X2RvY3VtZW50LT5mb250U2VsZWN0b3IoKSk7CisgICAgICAgICAgICBtX3Jvb3REZWZhdWx0U3R5
bGUtPmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgICAgIG1fZG9jdW1lbnQt
PmZvbnRTZWxlY3RvcigpLmRlY3JlbWVudElzQ29tcHV0aW5nUm9vdFN0eWxlRm9udCgpOworICAg
ICAgICB9CiAKLSAgICAvLyBjb25zdHJ1Y3QgZG9jdW1lbnQgcm9vdCBlbGVtZW50IGRlZmF1bHQg
c3R5bGUuIHRoaXMgaXMgbmVlZGVkCi0gICAgLy8gdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyB0
aGF0IGNvbnRhaW4gcmVsYXRpdmUgY29uc3RyYWludHMsIGxpa2UgInNjcmVlbiBhbmQgKG1heC13
aWR0aDogMTBlbSkiCi0gICAgLy8gVGhpcyBpcyBoZXJlIGluc3RlYWQgb2YgY29uc3RydWN0b3Is
IGJlY2F1c2Ugd2hlbiBjb25zdHJ1Y3RvciBpcyBydW4sCi0gICAgLy8gZG9jdW1lbnQgZG9lc24n
dCBoYXZlIGRvY3VtZW50RWxlbWVudAotICAgIC8vIE5PVEU6IHRoaXMgYXNzdW1lcyB0aGF0IGVs
ZW1lbnQgdGhhdCBnZXRzIHBhc3NlZCB0byBzdHlsZUZvckVsZW1lbnQgLWNhbGwKLSAgICAvLyBp
cyBhbHdheXMgZnJvbSB0aGUgZG9jdW1lbnQgdGhhdCBvd25zIHRoZSBzdHlsZSBzZWxlY3Rvcgot
ICAgIEZyYW1lVmlldyogdmlldyA9IG1fZG9jdW1lbnQudmlldygpOwotICAgIGlmICh2aWV3KQot
ICAgICAgICBtX21lZGlhUXVlcnlFdmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgdmll
dy0+bWVkaWFUeXBlKCkgfTsKLSAgICBlbHNlCisgICAgICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5
bGUgJiYgdmlldykKKyAgICAgICAgICAgIG1fbWVkaWFRdWVyeUV2YWx1YXRvciA9IE1lZGlhUXVl
cnlFdmFsdWF0b3IgeyB2aWV3LT5tZWRpYVR5cGUoKSwgKm1fZG9jdW1lbnQsIG1fcm9vdERlZmF1
bHRTdHlsZS5nZXQoKSB9OworICAgIH0gZWxzZSB7CisgICAgICAgIENTU0RlZmF1bHRTdHlsZVNo
ZWV0czo6aW5pdERlZmF1bHRTdHlsZShudWxscHRyKTsKICAgICAgICAgbV9tZWRpYVF1ZXJ5RXZh
bHVhdG9yID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJhbGwiIH07Ci0KLSAgICBpZiAocm9vdCkg
ewotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1f
ZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgbnVsbHB0ciwgUnVsZU1hdGNoaW5nQmVoYXZpb3I6Ok1h
dGNoT25seVVzZXJBZ2VudFJ1bGVzKS5yZW5kZXJTdHlsZTsKLSAgICAgICAgLy8gVHVybiBvZmYg
YXNzZXJ0aW9uIGFnYWluc3QgZm9udCBsb29rdXBzIGR1cmluZyBzdHlsZSByZXNvbHZlciBpbml0
aWFsaXphdGlvbi4gV2UgbWF5IG5lZWQgcm9vdCBzdHlsZSBmb250IGZvciBtZWRpYSBxdWVyaWVz
LgotICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLmluY3JlbWVudElzQ29tcHV0aW5n
Um9vdFN0eWxlRm9udCgpOwotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUtPmZvbnRDYXNjYWRl
KCkudXBkYXRlKCZtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLSAgICAgICAgbV9yb290RGVm
YXVsdFN0eWxlLT5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgICAgIG1fZG9jdW1l
bnQuZm9udFNlbGVjdG9yKCkuZGVjcmVtZW50SXNDb21wdXRpbmdSb290U3R5bGVGb250KCk7CiAg
ICAgfQogCi0gICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQotICAgICAgICBtX21l
ZGlhUXVlcnlFdmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgdmlldy0+bWVkaWFUeXBl
KCksIG1fZG9jdW1lbnQsIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSB9OwotCiAgICAgbV9ydWxl
U2V0cy5yZXNldEF1dGhvclN0eWxlKCk7CiAgICAgbV9ydWxlU2V0cy5yZXNldFVzZXJBZ2VudE1l
ZGlhUXVlcnlTdHlsZSgpOwogfQogCitTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKGNvbnN0
IFNldHRpbmdzJiBzZXR0aW5ncykKKyAgICA6IFN0eWxlUmVzb2x2ZXIobnVsbHB0ciwgc2V0dGlu
Z3MpCit7Cit9CisKK1N0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3Vt
ZW50KQorICAgIDogU3R5bGVSZXNvbHZlcigmZG9jdW1lbnQsIGRvY3VtZW50LnNldHRpbmdzKCkp
Cit7Cit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkQ3VycmVudFNWR0ZvbnRGYWNlUnVsZXMo
KQogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKG1fZG9jdW1lbnQuc3ZnRXh0ZW5z
aW9ucygpKSB7Ci0gICAgICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRm9udEZhY2VFbGVtZW50Kj4mIHN2
Z0ZvbnRGYWNlRWxlbWVudHMgPSBtX2RvY3VtZW50LnN2Z0V4dGVuc2lvbnMoKS0+c3ZnRm9udEZh
Y2VFbGVtZW50cygpOworICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPnN2Z0V4dGVu
c2lvbnMoKSkgeworICAgICAgICBjb25zdCBIYXNoU2V0PFNWR0ZvbnRGYWNlRWxlbWVudCo+JiBz
dmdGb250RmFjZUVsZW1lbnRzID0gbV9kb2N1bWVudC0+c3ZnRXh0ZW5zaW9ucygpLT5zdmdGb250
RmFjZUVsZW1lbnRzKCk7CiAgICAgICAgIGZvciAoYXV0byogc3ZnRm9udEZhY2VFbGVtZW50IDog
c3ZnRm9udEZhY2VFbGVtZW50cykKLSAgICAgICAgICAgIG1fZG9jdW1lbnQuZm9udFNlbGVjdG9y
KCkuYWRkRm9udEZhY2VSdWxlKHN2Z0ZvbnRGYWNlRWxlbWVudC0+Zm9udEZhY2VSdWxlKCksIHN2
Z0ZvbnRGYWNlRWxlbWVudC0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSk7CisgICAgICAgICAg
ICBtX2RvY3VtZW50LT5mb250U2VsZWN0b3IoKS5hZGRGb250RmFjZVJ1bGUoc3ZnRm9udEZhY2VF
bGVtZW50LT5mb250RmFjZVJ1bGUoKSwgc3ZnRm9udEZhY2VFbGVtZW50LT5pc0luVXNlckFnZW50
U2hhZG93VHJlZSgpKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTI0NCw4ICsyNjAsOCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4+JgogewogICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVT
aGVldHMoc3R5bGVTaGVldHMsICZtX21lZGlhUXVlcnlFdmFsdWF0b3IsIG1faW5zcGVjdG9yQ1NT
T01XcmFwcGVycywgdGhpcyk7CiAKLSAgICBpZiAoYXV0byByZW5kZXJWaWV3ID0gZG9jdW1lbnQo
KS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udENhc2NhZGUo
KS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOworICAgIGlmIChkb2N1bWVudCgp
ICYmIGRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVuZGVy
VmlldygpLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLT5mb250U2Vs
ZWN0b3IoKSk7CiAKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQogICAgIHZpZXdw
b3J0U3R5bGVSZXNvbHZlcigpLT5yZXNvbHZlKCk7CkBAIC0yNjEsNyArMjc3LDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphZGRLZXlmcmFtZVN0eWxlKFJlZjxTdHlsZVJ1bGVLZXlmcmFtZXM+JiYg
cnVsZSkKIAogU3R5bGVSZXNvbHZlcjo6flN0eWxlUmVzb2x2ZXIoKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2RvY3VtZW50LmlzUmVzb2x2aW5nVHJlZVN0eWxlKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2RvY3VtZW50IHx8ICFtX2RvY3VtZW50LT5pc1Jlc29sdmluZ1RyZWVTdHlsZSgp
KTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0RlbGV0ZWQpOwogICAgIG1faXNEZWxldGVkID0g
dHJ1ZTsKIApAQCAtMzQ0LDYgKzM2MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0TmV3U3Rh
dGVXaXRoRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogCiBFbGVtZW50U3R5bGUgU3R5
bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudEJveFN0
eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBjb25zdCBTZWxlY3Rv
ckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCiB7CisgICAgQVNTRVJUKGRvY3VtZW50KCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2lzRGVsZXRlZCk7CiAKICAgICBtX3N0YXRlID0gU3RhdGUoZWxl
bWVudCwgcGFyZW50U3R5bGUsIG1fb3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZSwgc2VsZWN0
b3JGaWx0ZXIpOwpAQCAtMzk1LDcgKzQxMiw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAg
ICAgYWRqdXN0UmVuZGVyU3R5bGUoKnN0YXRlLnN0eWxlKCksICpzdGF0ZS5wYXJlbnRTdHlsZSgp
LCBwYXJlbnRCb3hTdHlsZSwgJmVsZW1lbnQpOwogCiAgICAgaWYgKHN0YXRlLnN0eWxlKCktPmhh
c1ZpZXdwb3J0VW5pdHMoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5zZXRIYXNTdHlsZVdpdGhWaWV3
cG9ydFVuaXRzKCk7CisgICAgICAgIGRvY3VtZW50KCktPnNldEhhc1N0eWxlV2l0aFZpZXdwb3J0
VW5pdHMoKTsKIAogICAgIHN0YXRlLmNsZWFyKCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQg
cmVzb2x2ZS4KIApAQCAtNTYyLDYgKzU3OSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJh
bWVTdHlsZXNGb3JBbmltYXRpb24oY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuCiAK
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVG
b3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVz
dCYgcHNldWRvU3R5bGVSZXF1ZXN0LCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIGNv
bnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKIHsKKyAgICBBU1NFUlQoZG9jdW1l
bnQoKSk7CisKICAgICBtX3N0YXRlID0gU3RhdGUoZWxlbWVudCwgJnBhcmVudFN0eWxlLCBtX292
ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUsIHNlbGVjdG9yRmlsdGVyKTsKIAogICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CkBAIC02MDEsNyArNjIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxl
bWVudCYKICAgICBhZGp1c3RSZW5kZXJTdHlsZSgqc3RhdGUuc3R5bGUoKSwgKm1fc3RhdGUucGFy
ZW50U3R5bGUoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAKICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+
aGFzVmlld3BvcnRVbml0cygpKQotICAgICAgICBkb2N1bWVudCgpLnNldEhhc1N0eWxlV2l0aFZp
ZXdwb3J0VW5pdHMoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0SGFzU3R5bGVXaXRoVmlld3Bv
cnRVbml0cygpOwogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCiAgICAgcmV0dXJuIHN0
YXRlLnRha2VTdHlsZSgpOwpAQCAtNjExLDExICs2MzAsMTEgQEAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0RlbGV0ZWQpOwogCi0gICAgYXV0byogZG9jdW1lbnRF
bGVtZW50ID0gbV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVu
dEVsZW1lbnQgPSBtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgOiBu
dWxscHRyOwogICAgIGlmICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gUmVuZGVy
U3R5bGU6OmNyZWF0ZVB0cigpOwogCi0gICAgbV9zdGF0ZSA9IFN0YXRlKCpkb2N1bWVudEVsZW1l
bnQsIG1fZG9jdW1lbnQucmVuZGVyU3R5bGUoKSk7CisgICAgbV9zdGF0ZSA9IFN0YXRlKCpkb2N1
bWVudEVsZW1lbnQsIG1fZG9jdW1lbnQtPnJlbmRlclN0eWxlKCkpOwogCiAgICAgbV9zdGF0ZS5z
ZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCkpOwogICAgIG1fc3RhdGUuc3R5bGUoKS0+
aW5oZXJpdEZyb20oKm1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKQEAgLTY1MSwxMCArNjcw
LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JQYWdlKGludCBwYWdlSW5kZXgpCiAKIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7CisgICAgQVNTRVJUKGRvY3Vt
ZW50KCkpOwogICAgIG1fc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigpKTsK
ICAgICAvLyBNYWtlIHN1cmUgb3VyIGZvbnRzIGFyZSBpbml0aWFsaXplZCBpZiB3ZSBkb24ndCBp
bmhlcml0IHRoZW0gZnJvbSBvdXIgcGFyZW50IHN0eWxlLgogICAgIGluaXRpYWxpemVGb250U3R5
bGUoKTsKLSAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVu
dCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnRDYXNjYWRlKCku
dXBkYXRlKCZkb2N1bWVudCgpLT5mb250U2VsZWN0b3IoKSk7CiAgICAgcmV0dXJuIG1fc3RhdGUu
dGFrZVN0eWxlKCk7CiB9CiAKQEAgLTg4Miw2ICs5MDIsOCBAQCBzdGF0aWMgYm9vbCBoYXNUZXh0
Q2hpbGQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIAogYm9vbCBTdHlsZVJlc29sdmVyOjphZGp1
c3RSZW5kZXJTdHlsZUZvclRleHRBdXRvc2l6aW5nKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKIHsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKSk7CisKICAgICBpZiAo
IXNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCkgfHwgIXNldHRpbmdzKCkudGV4dEF1
dG9zaXppbmdVc2VzSWRlbXBvdGVudE1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC04ODksNyArOTExLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZUZv
clRleHRBdXRvc2l6aW5nKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QKICAgICBpZiAoc3R5bGUu
dGV4dFNpemVBZGp1c3QoKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ZmxvYXQgaW5pdGlhbFNjYWxlID0gZG9jdW1lbnQoKS5wYWdlKCkgPyBkb2N1bWVudCgpLnBhZ2Uo
KS0+aW5pdGlhbFNjYWxlKCkgOiAxOworICAgIGZsb2F0IGluaXRpYWxTY2FsZSA9IGRvY3VtZW50
KCktPnBhZ2UoKSA/IGRvY3VtZW50KCktPnBhZ2UoKS0+aW5pdGlhbFNjYWxlKCkgOiAxOwogICAg
IGF1dG8gYWRqdXN0TGluZUhlaWdodElmTmVlZGVkID0gWyZdKGF1dG8gY29tcHV0ZWRGb250U2l6
ZSkgewogICAgICAgICBhdXRvIGxpbmVIZWlnaHQgPSBzdHlsZS5zcGVjaWZpZWRMaW5lSGVpZ2h0
KCk7CiAgICAgICAgIGNvbnN0ZXhwciBzdGF0aWMgdW5zaWduZWQgZWxpZ2libGVGb250U2l6ZSA9
IDEyOwpAQCAtOTIzLDcgKzk0NSw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVy
U3R5bGVGb3JUZXh0QXV0b3NpemluZyhSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0CiAKICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGlzQ2FuZGlkYXRlID8gYWRqdXN0ZWRGb250
U2l6ZSA6IHNwZWNpZmllZEZvbnRTaXplKTsKICAgICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKLSAgICBzdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0
ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgc3R5bGUuZm9udENhc2NhZGUoKS51
cGRhdGUoJmRvY3VtZW50KCktPmZvbnRTZWxlY3RvcigpKTsKIAogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcmVzdG9yZSBjb21wdXRlZCBsaW5lIGhlaWdodCB0byBpdHMgb3JpZ2luYWwgdmFsdWUg
aW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaXMgbm90CiAgICAgLy8gYW4gaWRlbXBvdGVu
dCB0ZXh0IGF1dG9zaXppbmcgY2FuZGlkYXRlOyBvdGhlcndpc2UsIGlmIGFuIGVsZW1lbnQgdGhh
dCBpcyBhIHRleHQgYXV0b3NpemluZyBjYW5kaWRhdGUgY29udGFpbnMKQEAgLTkzNyw2ICs5NTks
OCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXpp
bmcoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdAogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVz
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcmVu
dFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50Qm94U3R5bGUsIGNvbnN0IEVsZW1lbnQq
IGVsZW1lbnQpCiB7CisgICAgQVNTRVJUKGRvY3VtZW50KCkpOworCiAgICAgLy8gSWYgdGhlIGNv
bXBvc2VkIHRyZWUgcGFyZW50IGhhcyBkaXNwbGF5OmNvbnRlbnRzLCB0aGUgcGFyZW50IGJveCBz
dHlsZSB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwYXJlbnQgc3R5bGUuCiAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBpdCB3aGVuIHJlc29sdmluZyBjb21wdXRlZCBzdHlsZSBmb3IgZGlzcGxheTpu
b25lIHN1YnRyZWUuIFVzZSBwYXJlbnQgc3R5bGUgZm9yIGFkanVzdG1lbnRzIGluIHRoYXQgY2Fz
ZS4KICAgICBpZiAoIXBhcmVudEJveFN0eWxlKQpAQCAtOTU0LDcgKzk3OCw3IEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBS
ZW5kZXJTdHlsZSYgcGFyCiAgICAgICAgICAgICAvLyBwcm9wZXJ0eS4KICAgICAgICAgICAgIC8v
IFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFu
ZCA8dGFibGU+cy4gSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKICAgICAgICAgICAgIC8vIHRoZXNl
IHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCi0gICAgICAgICAgICBpZiAoZG9j
dW1lbnQoKS5pblF1aXJrc01vZGUoKSkgeworICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPmlu
UXVpcmtzTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
dGRUYWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXkoRGlzcGxheVR5
cGU6OlRhYmxlQ2VsbCk7CiAgICAgICAgICAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0aW5nKEZs
b2F0OjpObyk7CkBAIC0xMDA0LDcgKzEwMjgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVz
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHBhcgog
CiAgICAgICAgIC8vIEFic29sdXRlL2ZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMsIGZsb2F0aW5n
IGVsZW1lbnRzIGFuZCB0aGUgZG9jdW1lbnQgZWxlbWVudCBuZWVkIGJsb2NrLWxpa2Ugb3V0c2lk
ZSBkaXNwbGF5LgogICAgICAgICBpZiAoc3R5bGUuaGFzT3V0T2ZGbG93UG9zaXRpb24oKSB8fCBz
dHlsZS5pc0Zsb2F0aW5nKCkgfHwgKGVsZW1lbnQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1
bWVudEVsZW1lbnQoKSA9PSBlbGVtZW50KSkKLSAgICAgICAgICAgIHN0eWxlLnNldERpc3BsYXko
ZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgZG9jdW1lbnQoKSkpOworICAgICAgICAgICAg
c3R5bGUuc2V0RGlzcGxheShlcXVpdmFsZW50QmxvY2tEaXNwbGF5KHN0eWxlLCAqZG9jdW1lbnQo
KSkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9y
IHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQn
cyBub3QgY29tcGxldGVseQogICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4K
QEAgLTEwMzYsNyArMTA2MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5
bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgcGFyCiAgICAgICAgIC8v
ICJBIHBhcmVudCB3aXRoIGEgZ3JpZCBvciBmbGV4IGRpc3BsYXkgdmFsdWUgYmxvY2tpZmllcyB0
aGUgYm944oCZcyBkaXNwbGF5IHR5cGUuIgogICAgICAgICBpZiAocGFyZW50Qm94U3R5bGUtPmlz
RGlzcGxheUZsZXhpYmxlT3JHcmlkQm94KCkpIHsKICAgICAgICAgICAgIHN0eWxlLnNldEZsb2F0
aW5nKEZsb2F0OjpObyk7Ci0gICAgICAgICAgICBzdHlsZS5zZXREaXNwbGF5KGVxdWl2YWxlbnRC
bG9ja0Rpc3BsYXkoc3R5bGUsIGRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHN0eWxlLnNldERp
c3BsYXkoZXF1aXZhbGVudEJsb2NrRGlzcGxheShzdHlsZSwgKmRvY3VtZW50KCkpKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTE5NSwxMyArMTIxOSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUm
IHBhcgogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlRm9yU2l0ZVNwZWNp
ZmljUXVpcmtzKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsK
LSAgICBpZiAoZG9jdW1lbnQoKS5xdWlya3MoKS5uZWVkc0dNYWlsT3ZlcmZsb3dTY3JvbGxRdWly
aygpKSB7CisgICAgaWYgKCFkb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRv
Y3VtZW50KCktPnF1aXJrcygpLm5lZWRzR01haWxPdmVyZmxvd1Njcm9sbFF1aXJrKCkpIHsKICAg
ICAgICAgLy8gVGhpcyB0dXJucyBzaWRlYmFyIHNjcm9sbGFibGUgd2l0aG91dCBtb3VzZSBtb3Zl
IGV2ZW50LgogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbVN0cmluZz4gcm9sZVZh
bHVlKCJuYXZpZ2F0aW9uIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAg
ICAgICBpZiAoc3R5bGUub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkhpZGRlbiAmJiBlbGVtZW50
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm9sZUF0dHIpID09IHJvbGVWYWx1ZSkK
ICAgICAgICAgICAgIHN0eWxlLnNldE92ZXJmbG93WShPdmVyZmxvdzo6QXV0byk7CiAgICAgfQot
ICAgIGlmIChkb2N1bWVudCgpLnF1aXJrcygpLm5lZWRzWW91VHViZU92ZXJmbG93U2Nyb2xsUXVp
cmsoKSkgeworICAgIGlmIChkb2N1bWVudCgpLT5xdWlya3MoKS5uZWVkc1lvdVR1YmVPdmVyZmxv
d1Njcm9sbFF1aXJrKCkpIHsKICAgICAgICAgLy8gVGhpcyB0dXJucyBzaWRlYmFyIHNjcm9sbGFi
bGUgd2l0aG91dCBob3Zlci4KICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21TdHJp
bmc+IGlkVmFsdWUoImd1aWRlLWlubmVyLWNvbnRlbnQiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CiAgICAgICAgIGlmIChzdHlsZS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
SGlkZGVuICYmIGVsZW1lbnQuaWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBpZFZhbHVlKQpAQCAt
MTIyMyw3ICsxMjQ5LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShS
ZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
bmV3Rm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9u
dCgpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoRm9udFNlbGVjdG9yKiBmb250U2Vs
ZWN0b3IpCiB7CiAgICAgaWYgKCFtX3N0YXRlLmZvbnREaXJ0eSgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMjM1LDEyICsxMjYxLDE4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgp
CiAgICAgY2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKHN0eWxlLCBtX3N0YXRlLnBhcmVudFN0
eWxlKCkpOwogICAgIGNoZWNrRm9yWm9vbUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHls
ZSgpKTsKICAgICBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKHN0eWxlKTsKLSAgICBzdHlsZS5m
b250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgc3R5
bGUuZm9udENhc2NhZGUoKS51cGRhdGUoZm9udFNlbGVjdG9yKTsKICAgICBpZiAobV9zdGF0ZS5m
b250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSkKICAgICAgICAgc3R5bGUuc2V0SGFzVmlld3BvcnRV
bml0cyh0cnVlKTsKICAgICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CiB9CiAKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KCkpOwor
ICAgIHVwZGF0ZUZvbnQoJmRvY3VtZW50KCktPmZvbnRTZWxlY3RvcigpKTsKK30KKwogVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChj
b25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKIHsKICAgICBy
ZXR1cm4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgUHNldWRvSWQ6Ok5vbmUs
IHJ1bGVzVG9JbmNsdWRlKTsKQEAgLTE3NzYsMTMgKzE4MDgsMTMgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgQXBw
bHlDYXNjYWQKIAogICAgIENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogY3VzdG9tUHJvcGVy
dHlSZWdpc3RlcmVkID0gbnVsbHB0cjsKIAotICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3Rv
bSkgeworICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSAmJiBkb2N1bWVudCgpKSB7CiAg
ICAgICAgIGN1c3RvbVByb3BlcnR5VmFsdWUgPSAmZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZT4oKnZhbHVlVG9BcHBseSk7CiAgICAgICAgIEFTU0VSVChjdXN0b21Qcm9wZXJ0eVZhbHVl
LT5pc1Jlc29sdmVkKCkpOwogICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDU1NW
YWx1ZUlEPihjdXN0b21Qcm9wZXJ0eVZhbHVlLT52YWx1ZSgpKSkKICAgICAgICAgICAgIGN1c3Rv
bVByb3BlcnR5VmFsdWVJRCA9IFdURjo6Z2V0PENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFs
dWUtPnZhbHVlKCkpOwogICAgICAgICBhdXRvJiBuYW1lID0gY3VzdG9tUHJvcGVydHlWYWx1ZS0+
bmFtZSgpOwotICAgICAgICBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQgPSBkb2N1bWVudCgpLmdl
dENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKKyAgICAgICAgY3Vz
dG9tUHJvcGVydHlSZWdpc3RlcmVkID0gZG9jdW1lbnQoKS0+Z2V0Q1NTUmVnaXN0ZXJlZEN1c3Rv
bVByb3BlcnR5U2V0KCkuZ2V0KG5hbWUpOwogICAgIH0KIAogICAgIGJvb2wgaXNJbmhlcml0ID0g
c3RhdGUucGFyZW50U3R5bGUoKSA/IHZhbHVlVG9DaGVja0ZvckluaGVyaXRJbml0aWFsLT5pc0lu
aGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlSW5oZXJp
dCA6IGZhbHNlOwpAQCAtMTgzOSw5ICsxODcxLDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgQXBwbHlDYXNjYWQK
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseUluaGVyaXRlZFByb3BlcnRp
ZXMoKTsKIAogI2lmIEVOQUJMRShDU1NfUEFJTlRJTkdfQVBJKQotICAgIGlmIChpczxDU1NQYWlu
dEltYWdlVmFsdWU+KCp2YWx1ZVRvQXBwbHkpKSB7CisgICAgaWYgKGlzPENTU1BhaW50SW1hZ2VW
YWx1ZT4oKnZhbHVlVG9BcHBseSkgJiYgZG9jdW1lbnQoKSkgewogICAgICAgICBhdXRvJiBuYW1l
ID0gZG93bmNhc3Q8Q1NTUGFpbnRJbWFnZVZhbHVlPigqdmFsdWVUb0FwcGx5KS5uYW1lKCk7Ci0g
ICAgICAgIGlmIChhdXRvKiBwYWludFdvcmtsZXQgPSBkb2N1bWVudCgpLnBhaW50V29ya2xldEds
b2JhbFNjb3BlRm9yTmFtZShuYW1lKSkgeworICAgICAgICBpZiAoYXV0byogcGFpbnRXb3JrbGV0
ID0gZG9jdW1lbnQoKS0+cGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVGb3JOYW1lKG5hbWUpKSB7CiAg
ICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHBhaW50V29ya2xldC0+cGFpbnREZWZp
bml0aW9uTG9jaygpKTsKICAgICAgICAgICAgIGlmIChhdXRvKiByZWdpc3RyYXRpb24gPSBwYWlu
dFdvcmtsZXQtPnBhaW50RGVmaW5pdGlvbk1hcCgpLmdldChuYW1lKSkgewogICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiByZWdpc3RyYXRpb24tPmlucHV0UHJvcGVydGllcykK
QEAgLTE4NTcsNyArMTg4OSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIEFwcGx5Q2FzY2FkCiAKIFJlZlB0cjxD
U1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0
YXRlJiBzdGF0ZSkgY29uc3QKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKGRvY3VtZW50KCkpOwor
ICAgIEFTU0VSVChkb2N1bWVudCgpKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKCpkb2N1bWVudCgp
KTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHBy
b3BJRCwgdmFsdWUsIHN0YXRlKTsKIH0KIApAQCAtMTkyNyw3ICsxOTYwLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBSZW5kZXIKICAgICAvLyBtdWx0aXBseWluZyBieSBvdXIgc2NhbGUgZmFjdG9yLgog
ICAgIGZsb2F0IHNpemU7CiAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBjaGls
ZEZvbnQua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkKLSAgICAgICAgc2l6ZSA9IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsIGNoaWxkRm9udC51c2VGaXhlZERlZmF1
bHRTaXplKCksIGRvY3VtZW50KCkpOworICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9y
S2V5d29yZChzaXplSWRlbnRpZmllciwgY2hpbGRGb250LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwg
ZG9jdW1lbnQoKSwgc2V0dGluZ3MoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0IGZpeGVk
U2NhbGVGYWN0b3IgPSAoc2V0dGluZ3MoKS5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpICYmIHNldHRp
bmdzKCkuZGVmYXVsdEZvbnRTaXplKCkpCiAgICAgICAgICAgICA/IHN0YXRpY19jYXN0PGZsb2F0
PihzZXR0aW5ncygpLmRlZmF1bHRGaXhlZEZvbnRTaXplKCkpIC8gc2V0dGluZ3MoKS5kZWZhdWx0
Rm9udFNpemUoKQpAQCAtMTk0OCw3ICsxOTgxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0
aWFsaXplRm9udFN0eWxlKCkKICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShz
ZXR0aW5ncygpLmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRP
bmVGYW1pbHkoc3RhbmRhcmRGYW1pbHkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3Jk
U2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKLSAgICBzZXRGb250U2l6ZShmb250
RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZh
bHNlLCBkb2N1bWVudCgpKSk7CisgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHls
ZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmYWxzZSwgZG9jdW1lbnQoKSwg
c2V0dGluZ3MoKSkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyhzZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPyBB
bGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5v
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dEZXNpZ25TeXN0ZW1VSUZvbnRz
KHNldHRpbmdzKCkuc2hvdWxkQWxsb3dEZXNpZ25TeXN0ZW1VSUZvbnRzKCkpOwogICAgIHNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwpAQCAtMTk1Nyw3ICsxOTkw
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNv
bXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNB
YnNvbHV0ZVNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCksIG1fc3RhdGUuc3R5bGUoKSwgZG9jdW1l
bnQoKSkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1
dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNv
bHV0ZVNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCksIG1fc3RhdGUuc3R5bGUoKSwgZG9jdW1lbnQo
KSwgc2V0dGluZ3MoKSkpOwogfQogCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZh
bHVlKQpAQCAtMTk3NSwyNiArMjAwOCwyOCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1lbnQoY29uc3QgQ1NTUHJpbWl0aQogCiBD
b2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmlt
aXRpdmVWYWx1ZSYgdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0CiB7CisgICAgQVNT
RVJUKGRvY3VtZW50KCkpOworCiAgICAgaWYgKHZhbHVlLmlzUkdCQ29sb3IoKSkKICAgICAgICAg
cmV0dXJuIHZhbHVlLmNvbG9yKCk7CiAKICAgICBhdXRvIGlkZW50aWZpZXIgPSB2YWx1ZS52YWx1
ZUlEKCk7CiAgICAgc3dpdGNoIChpZGVudGlmaWVyKSB7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dFRleHQ6Ci0gICAgICAgIHJldHVybiBkb2N1bWVudCgpLnRleHRDb2xvcigpOworICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+dGV4dENvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdExp
bms6Ci0gICAgICAgIHJldHVybiAobV9zdGF0ZS5lbGVtZW50KCktPmlzTGluaygpICYmIGZvclZp
c2l0ZWRMaW5rKSA/IGRvY3VtZW50KCkudmlzaXRlZExpbmtDb2xvcigpIDogZG9jdW1lbnQoKS5s
aW5rQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIChtX3N0YXRlLmVsZW1lbnQoKS0+aXNMaW5rKCkg
JiYgZm9yVmlzaXRlZExpbmspID8gZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtDb2xvcigpIDogZG9j
dW1lbnQoKS0+bGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEFjdGl2ZWxpbms6
Ci0gICAgICAgIHJldHVybiBkb2N1bWVudCgpLmFjdGl2ZUxpbmtDb2xvcigpOworICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+YWN0aXZlTGlua0NvbG9yKCk7CiAgICAgY2FzZSBDU1NWYWx1ZVdl
YmtpdEZvY3VzUmluZ0NvbG9yOgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNpbmdsZXRv
bigpLmZvY3VzUmluZ0NvbG9yKGRvY3VtZW50KCkuc3R5bGVDb2xvck9wdGlvbnMobV9zdGF0ZS5z
dHlsZSgpKSk7CisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkuZm9jdXNS
aW5nQ29sb3IoZG9jdW1lbnQoKS0+c3R5bGVDb2xvck9wdGlvbnMobV9zdGF0ZS5zdHlsZSgpKSk7
CiAgICAgY2FzZSBDU1NWYWx1ZUN1cnJlbnRjb2xvcjoKICAgICAgICAgLy8gQ29sb3IgaXMgYW4g
aW5oZXJpdGVkIHByb3BlcnR5IHNvIGRlcGVuZGluZyBvbiBpdCBlZmZlY3RpdmVseSBtYWtlcyB0
aGUgcHJvcGVydHkgaW5oZXJpdGVkLgogICAgICAgICAvLyBGSVhNRTogU2V0dGluZyB0aGUgZmxh
ZyBhcyBhIHNpZGUgZWZmZWN0IG9mIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBhIGJpdCBvYmxp
cXVlLiBDYW4gd2UgZG8gYmV0dGVyPwogICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHJldHVybiBtX3N0YXRlLnN0
eWxlKCktPmNvbG9yKCk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFN0eWxlQ29sb3I6
OmNvbG9yRnJvbUtleXdvcmQoaWRlbnRpZmllciwgZG9jdW1lbnQoKS5zdHlsZUNvbG9yT3B0aW9u
cyhtX3N0YXRlLnN0eWxlKCkpKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlQ29sb3I6OmNvbG9yRnJv
bUtleXdvcmQoaWRlbnRpZmllciwgZG9jdW1lbnQoKS0+c3R5bGVDb2xvck9wdGlvbnMobV9zdGF0
ZS5zdHlsZSgpKSk7CiAgICAgfQogfQogCkBAIC0yMDgxLDYgKzIxMTYsNyBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUs
IEZpbHRlck9wZXJhdAogewogICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgQVNTRVJU
KG91dE9wZXJhdGlvbnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKSk7CiAKICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGluVmFsdWUpOwpAQCAt
MjEwMCw3ICsyMTM2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXQKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9IHByaW1pdGl2ZVZhbHVl
LnN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQoKS5jb21wbGV0
ZVVSTChjc3NVcmwpOworICAgICAgICAgICAgVVJMIHVybCA9IGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGNzc1VybCk7CiAKICAgICAgICAgICAgIGF1dG8gb3BlcmF0aW9uID0gUmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uOjpjcmVhdGUoY3NzVXJsLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCkpOwog
ICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFdURk1vdmUob3BlcmF0
aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBlMGMzMThlZTc3Y2IxM2I5
ODZmMDU3MTY2ZTlkODljNDZkNjA5YTI4Li40NDE2NmYwZmVkOGViNzFjNjMwMDEyOWJmYzU3NzQx
ZWNlZDIyOGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTEyNyw2ICsxMjcs
NyBAQCBzdHJ1Y3QgRWxlbWVudFN0eWxlIHsKIGNsYXNzIFN0eWxlUmVzb2x2ZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlUmVzb2x2ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKKyAgICBTdHlsZVJlc29sdmVyKGNvbnN0IFNldHRpbmdzJik7CiAgICAgU3R5
bGVSZXNvbHZlcihEb2N1bWVudCYpOwogICAgIH5TdHlsZVJlc29sdmVyKCk7CiAKQEAgLTE0Myw5
ICsxNDQsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRTdHlsZSgpOyB9CiAgICAgY29uc3QgUmVuZGVy
U3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKTsgfQogICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQoKSB7IHJldHVybiBtX3N0
YXRlLmVsZW1lbnQoKTsgfQotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIHsgcmV0dXJuIG1fZG9j
dW1lbnQ7IH0KLSAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9Ci0gICAgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1
cm4gbV9kb2N1bWVudC5zZXR0aW5ncygpOyB9CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgeyBy
ZXR1cm4gbV9kb2N1bWVudDsgfQorICAgIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICBjb25zdCBTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiBtX3NldHRpbmdzOyB9CiAKICAgICB2b2lkIGFwcGVuZEF1dGhvclN0eWxl
U2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+Jik7CiAKQEAgLTE4Myw2
ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAogICAgIHZvaWQgdXBkYXRlRm9udCgpOworICAg
IHZvaWQgdXBkYXRlRm9udChGb250U2VsZWN0b3IqKTsKICAgICB2b2lkIGluaXRpYWxpemVGb250
U3R5bGUoKTsKIAogICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYs
IGZsb2F0IHNpemUpOwpAQCAtMzEyLDYgKzMxNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGx5
Q2FzY2FkZWRDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0eVN0YXRlJik7CiAKIHByaXZhdGU6CisgICAgU3R5bGVSZXNvbHZlcihEb2N1bWVudCos
IGNvbnN0IFNldHRpbmdzJik7CisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGZpeGVzIHVwIHRoZSBk
ZWZhdWx0IGZvbnQgc2l6ZSBpZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQgZ2VuZXJpYyBm
b250IGZhbWlseSBoYXMgY2hhbmdlZC4gLWR3aAogICAgIHZvaWQgY2hlY2tGb3JHZW5lcmljRmFt
aWx5Q2hhbmdlKFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsK
ICAgICB2b2lkIGNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSk7CkBAIC01MTEsNyArNTE1LDggQEAgcHJpdmF0ZToKICAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1fbWVkaWFRdWVyeUV2YWx1YXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsKIAotICAgIERvY3VtZW50JiBtX2Rv
Y3VtZW50OworICAgIERvY3VtZW50KiBtX2RvY3VtZW50IHsgbnVsbHB0ciB9OworICAgIGNvbnN0
IFNldHRpbmdzJiBtX3NldHRpbmdzOwogCiAgICAgUmVuZGVyU3R5bGUqIG1fb3ZlcnJpZGVEb2N1
bWVudEVsZW1lbnRTdHlsZSB7IG51bGxwdHIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuY3BwCmluZGV4IGE2OGQ1NWI2ZTVlM2NlNDc4MmYxMmFlNWNjNTlkMmE3ODM1MjZm
YTEuLmFkZGE5NWI5YTZlNGY0MmEyZTFjMjVjNTBmMDc4ZDQ4NDY2YWRmZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTIyMiw3ICsyMjIsNyBAQCBSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NT
UHJvcGVydHlJRCBwcm9wSQogICAgIGNvbnN0IGF1dG8mIHZhbHVlV2l0aFJlZmVyZW5jZXMgPSBX
VEY6OmdldDxSZWY8Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KGN1c3RvbVByb3BWYWx1ZS52
YWx1ZSgpKS5nZXQoKTsKIAogICAgIGF1dG8mIG5hbWUgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPih2YWx1ZSkubmFtZSgpOwotICAgIGF1dG8qIHJlZ2lzdGVyZWQgPSBzdGF0ZS5z
dHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNl
dCgpLmdldChuYW1lKTsKKyAgICBhdXRvKiByZWdpc3RlcmVkID0gc3RhdGUuc3R5bGVSZXNvbHZl
ci0+ZG9jdW1lbnQoKSA/IHN0YXRlLnN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPmdldENTU1Jl
Z2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKSA6IG51bGxwdHI7CiAgICAgYXV0
byYgc3ludGF4ID0gcmVnaXN0ZXJlZCA/IHJlZ2lzdGVyZWQtPnN5bnRheCA6ICIqIjsKICAgICBh
dXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlcyhzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlcklt
cGwuY3BwCmluZGV4IGQ3NWU0ZmM5MmM3N2IwN2IxZTUzZGFkMzM4N2U1NTFhMzkwYzI1YjkuLjVj
NDc3NzU2ZmI3NjBmM2MzMDFhYWY0OTVhYzRlMTUzM2RjZGE5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXJJbXBsLmNwcApAQCAtODksNyArODksMTAgQEAgQ1NTUGFy
c2VyOjpQYXJzZVJlc3VsdCBDU1NQYXJzZXJJbXBsOjpwYXJzZVZhbHVlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMqIGRlY2xhcmEKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQogICAg
IGlmIChkZWNsYXJhdGlvbi0+Y3NzUGFyc2VyTW9kZSgpID09IENTU1ZpZXdwb3J0UnVsZU1vZGUp
CiAgICAgICAgIHJ1bGVUeXBlID0gU3R5bGVSdWxlOjpWaWV3cG9ydDsKKyAgICBlbHNlCiAjZW5k
aWYKKyAgICBpZiAoZGVjbGFyYXRpb24tPmNzc1BhcnNlck1vZGUoKSA9PSBGb250RmFjZVJ1bGVN
b2RlKQorICAgICAgICBydWxlVHlwZSA9IFN0eWxlUnVsZTo6Rm9udEZhY2U7CiAgICAgcGFyc2Vy
LmNvbnN1bWVEZWNsYXJhdGlvblZhbHVlKHBhcnNlci50b2tlbml6ZXIoKS0+dG9rZW5SYW5nZSgp
LCBwcm9wZXJ0eUlELCBpbXBvcnRhbnQsIHJ1bGVUeXBlKTsKICAgICBpZiAocGFyc2VyLm1fcGFy
c2VkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDU1NQYXJzZXI6OlBhcnNl
UmVzdWx0OjpFcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmgK
aW5kZXggZDQyYTQyOTY0N2JiMDY4ZDM4YmNjMGM3OGJmNGMzMTM3NzgxMDFiMy4uZjQzMzc2Zjg1
YTE0YTA5MjhkOTZiNDgyY2EzZTJhMmUwYmI0YjU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXJNb2RlLmgKQEAgLTQ0LDcgKzQ0LDEwIEBAIGVudW0gQ1NTUGFyc2VyTW9k
ZSB7CiAgICAgLy8gbXVzdCBjYWxsIHBhcnNlVmlld3BvcnRQcm9wZXJ0aWVzIHNvIG5lZWRzIGEg
c3BlY2lhbCBtb2RlLgogICAgIENTU1ZpZXdwb3J0UnVsZU1vZGUsCiAgICAgLy8gVXNlciBhZ2Vu
dCBzdHlsZXNoZWV0cyBhcmUgcGFyc2VkIGluIHN0YW5kYXJkcyBtb2RlIGJ1dCBhbHNvIGFsbG93
cyBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFuZCB2YWx1ZXMuCi0gICAgVUFTaGVldE1vZGUKKyAgICBV
QVNoZWV0TW9kZSwKKyAgICAvLyBDYW52YXMgZm9udCBydWxlcyBhcmUgcGFyc2VkIGluIHN0YW5k
YXJkcyBtb2RlIGJ1dCBPZmZzY3JlZW5DYW52YXMgY2FuIHNldCBmb250cyBpbiB3b3JrZXJzCisg
ICAgLy8gc28gbmVlZHMgYSBzcGVjaWFsIG1vZGUgdG8gYXZvaWQgcGF0aHMgdGhhdCBhcmVuJ3Qg
dGhyZWFkLXNhZmUuCisgICAgRm9udEZhY2VSdWxlTW9kZQogfTsKIAogaW5saW5lIGJvb2wgaXNR
dWlya3NNb2RlQmVoYXZpb3IoQ1NTUGFyc2VyTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAKaW5kZXggNzU5MWQ0MWQ5Y2U0NTM4M2NkYzU1ZDAwNTM0ZDI0MDg1MTNkZjc5
Yi4uMTg0MzFjNTdjNmJkMjM2MTlmODU4NTFiMmIzNjZjZGM4NWJkYTZiZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC01OCw3ICs1OCwyMyBAQCB2b2lkIE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAg
ICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51bnBhcnNlZEZvbnQgJiYgc3RhdGUoKS5mb250LnJl
YWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGFyc2VkU3R5bGUgPSBNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKKyAgICBGb250U2VsZWN0b3IqIGZvbnRTZWxl
Y3RvcjsKKyAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyOworICAgIGF1dG8gY29udGV4
dCA9IGNhbnZhc0Jhc2UoKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKGNvbnRl
eHQtPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgeworICAgICAgICBXb3JrZXJHbG9iYWxTY29wZSYg
d29ya2VyR2xvYmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQp
OworICAgICAgICBmb250U2VsZWN0b3IgPSAmd29ya2VyR2xvYmFsU2NvcGUuZm9udFNlbGVjdG9y
KCk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIgPSAmd29ya2VyR2xvYmFsU2NvcGUuc3R5bGVSZXNv
bHZlcigpOworICAgIH0gZWxzZSBpZiAoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgIGZvbnRTZWxlY3RvciA9ICZkb2N1bWVudC5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgc3R5
bGVSZXNvbHZlciA9ICZkb2N1bWVudC51c2VyQWdlbnRTaGFkb3dUcmVlU3R5bGVSZXNvbHZlcigp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRTdHlsZSA9IE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZShjb250ZXh0LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkgPyBDU1NQYXJzZXJN
b2RlOjpGb250RmFjZVJ1bGVNb2RlIDogQ1NTUGFyc2VyTW9kZTo6SFRNTFN0YW5kYXJkTW9kZSk7
CiAgICAgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLCBDU1NQcm9wZXJ0eUZvbnQs
IG5ld0ZvbnQsIHRydWUsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJp
bGl0eVBhcnNlTW9kZSkpOwogICAgIGlmIChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CkBAIC04Niw0NSArMTAyLDIzIEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKIAogICAgIG5ld1N0
eWxlLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShkZWZhdWx0Rm9udERlc2NyaXB0aW9uKSk7
CiAKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKLSAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJHbG9iYWxTY29wZSgpKSB7Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiQ2FudmFzIHNjcmlwdCBleGVjdXRpb24gY29udGV4dCBpcyBXb3JrZXJH
bG9iYWxTY29wZSIpOwotICAgICAgICBXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2Nv
cGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKmNvbnRleHQpOwotCi0gICAgICAgIG5l
d1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmd29ya2VyR2xvYmFsU2NvcGUuZm9udFNlbGVj
dG9yKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTZXQgZm9udCBwcm9wZXJ0aWVzCisgICAgbmV3
U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiAKLSAgICAgICAgbW9k
aWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKHdvcmtlckdsb2JhbFNjb3BlLmZvbnRTZWxl
Y3RvcigpLCAqbmV3U3R5bGUuZ2V0KCkpOworICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVy
dHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJv
cGVydHlUb1N0eWxlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSwgV1RGTW92ZShuZXdTdHls
ZSkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlGb250U3R5bGUpLmdldCgpKTsKKyAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Cisg
ICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5
Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250V2VpZ2h0KS5nZXQoKSk7CiAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiQ2FudmFzIHNjcmlw
dCBleGVjdXRpb24gY29udGV4dCBpcyBEb2N1bWVudCIpOwotICAgICAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwotICAgICAgICBuZXdTdHlsZS0+
Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLQotICAgICAg
ICAvLyBOb3cgbWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4K
LSAgICAgICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciA9IGRvY3VtZW50LnVzZXJBZ2Vu
dFNoYWRvd1RyZWVTdHlsZVJlc29sdmVyKCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBXVEZNb3ZlKG5ld1N0
eWxlKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxl
KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLmFwcGx5
UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2Vk
U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdl
dCgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUo
Q1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKLQotICAgICAgICAvLyBBcyBkZXNjcmliZWQg
aW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBhIGZvbnQg
bWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlIGNhbGws
Ci0gICAgICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUg
Zm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCi0gICAgICAgIC8vIFRoZSB1cGRh
dGVGb250KCkgY2FsbHMgYmVsb3cgdXBkYXRlIHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJlIHRo
ZSBwcm9wZXIgc2V0dGluZyBvZiBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0LgotICAgICAgICBz
dHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VkU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOwotICAgICAgICBz
dHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKLQotICAg
ICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVj
dG9yKCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQg
bGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZUxlbmd0aERvdWJsZSBjYWxsLAorICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRy
aWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFz
aCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCisg
ICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNz
IGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWln
aHQuCisgICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9udChmb250U2VsZWN0b3IpOworICAgIHN0
eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9udChmb250U2VsZWN0b3IpOwor
ICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
TGluZUhlaWdodCkuZ2V0KCkpOwogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbW9k
aWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKCpmb250U2VsZWN0b3IsICpzdHlsZVJlc29s
dmVyLT5zdHlsZSgpKTsKIH0KIAogYXV0byBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmZvbnRQcm94eSgpIC0+IGNvbnN0IEZvbnRQcm94eSYgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA4ZjA4
ZDdhNTkwOTZkNGY2OTUzNmQwMDcwYThjMTE3MTFiMDljZGQ2Li5lZmJhMzdmYzY4OWY0N2Q3YWI2
YmJmMzE2MTA2MTUwZDAwOTJkNTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtOTQ2LDEyICs5NDYsMTQgQEAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0Fn
ZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3QKIAogUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1
bGUqIHN0eWxlUnVsZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxl
bWVudCkKIHsKKyAgICBBU1NFUlQoc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKTsKKwogICAgIGlm
ICghc3R5bGVSdWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFN0eWxlUnVs
ZXMgcmV0dXJuZWQgYnkgU3R5bGVSZXNvbHZlcjo6c3R5bGVSdWxlc0ZvckVsZW1lbnQgbGFjayBw
YXJlbnQgcG9pbnRlcnMgc2luY2UgdGhhdCBpbmZvbWF0aW9uIGlzIG5vdCBjaGVhcGx5IGF2YWls
YWJsZS4KICAgICAvLyBTaW5jZSB0aGUgaW5zcGVjdG9yIHdhbnRzIHRvIHdhbGsgdGhlIHBhcmVu
dCBjaGFpbiwgd2UgY29uc3RydWN0IHRoZSBmdWxsIHdyYXBwZXJzIGhlcmUuCi0gICAgc3R5bGVS
ZXNvbHZlci5pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkuY29sbGVjdERvY3VtZW50V3JhcHBlcnMo
c3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmV4dGVuc2lvblN0eWxlU2hlZXRzKCkpOworICAgIHN0
eWxlUmVzb2x2ZXIuaW5zcGVjdG9yQ1NTT01XcmFwcGVycygpLmNvbGxlY3REb2N1bWVudFdyYXBw
ZXJzKHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS0+ZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSk7CiAg
ICAgc3R5bGVSZXNvbHZlci5pbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkuY29sbGVjdFNjb3BlV3Jh
cHBlcnMoU3R5bGU6OlNjb3BlOjpmb3JOb2RlKGVsZW1lbnQpKTsKIAogICAgIC8vIFBvc3NpYmxp
dHkgb2YgOmhvc3Qgc3R5bGVzIGlmIHRoaXMgZWxlbWVudCBoYXMgYSBzaGFkb3cgcm9vdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKaW5kZXgg
Mjg3NDM1MWQwNzgzMjIzOTUxYWI0MGRkZjQyN2U0MzA1NmZjMjMxZS4uNTE3ODFlYzI2NGRkYzcw
YmIyMDVlYWQwM2RiMzFhMDg3ZjU4YjM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKQEAgLTg3LDE1ICs4NywyMiBAQCBzdGF0aWMgZmxv
YXQgY29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKGZsb2F0IHNwZWNpZmllZFNpemUs
IGJvb2wgaXNBYnNvbAogfQogCiBmbG9hdCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNp
emUoZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgYm9vbCB1c2VTVkda
b29tUnVsZXMsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KQoreworICAgIHJldHVybiBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc3Bl
Y2lmaWVkU2l6ZSwgaXNBYnNvbHV0ZVNpemUsIHVzZVNWR1pvb21SdWxlcywgc3R5bGUsICZkb2N1
bWVudCwgZG9jdW1lbnQuc2V0dGluZ3MoKSk7Cit9CisKK2Zsb2F0IGNvbXB1dGVkRm9udFNpemVG
cm9tU3BlY2lmaWVkU2l6ZShmbG9hdCBzcGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVTaXpl
LCBib29sIHVzZVNWR1pvb21SdWxlcywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFNldHRpbmdzJiBzZXR0aW5ncykKIHsKICAgICBmbG9h
dCB6b29tRmFjdG9yID0gMS4wZjsKICAgICBpZiAoIXVzZVNWR1pvb21SdWxlcykgewogICAgICAg
ICB6b29tRmFjdG9yID0gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lICYmIHN0eWxlLT50ZXh0
Wm9vbSgpICE9IFRleHRab29tOjpSZXNldCkKLSAgICAgICAgICAgIHpvb21GYWN0b3IgKj0gZnJh
bWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgICAgIGlmIChkb2N1bWVudCkgeworICAgICAgICAg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgICAgICBpZiAoZnJh
bWUgJiYgc3R5bGUtPnRleHRab29tKCkgIT0gVGV4dFpvb206OlJlc2V0KQorICAgICAgICAgICAg
ICAgIHpvb21GYWN0b3IgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgcmV0dXJuIGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzcGVjaWZp
ZWRTaXplLCBpc0Fic29sdXRlU2l6ZSwgem9vbUZhY3RvciwgdXNlU1ZHWm9vbVJ1bGVzID8gTWlu
aW11bUZvbnRTaXplUnVsZTo6Tm9uZSA6IE1pbmltdW1Gb250U2l6ZVJ1bGU6OkFic29sdXRlQW5k
UmVsYXRpdmUsIGRvY3VtZW50LnNldHRpbmdzKCkpOworICAgIHJldHVybiBjb21wdXRlZEZvbnRT
aXplRnJvbVNwZWNpZmllZFNpemUoc3BlY2lmaWVkU2l6ZSwgaXNBYnNvbHV0ZVNpemUsIHpvb21G
YWN0b3IsIHVzZVNWR1pvb21SdWxlcyA/IE1pbmltdW1Gb250U2l6ZVJ1bGU6Ok5vbmUgOiBNaW5p
bXVtRm9udFNpemVSdWxlOjpBYnNvbHV0ZUFuZFJlbGF0aXZlLCBzZXR0aW5ncyk7CiB9CiAKIGZs
b2F0IGNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZUZvclNWR0lubGluZVRleHQoZmxv
YXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgem9vbUZhY3Rvciwg
Y29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAtMTQ1LDEwICsxNTIsMTAgQEAgc3RhdGljIGNv
bnN0IGludCBzdHJpY3RGb250U2l6ZVRhYmxlW2ZvbnRTaXplVGFibGVNYXggLSBmb250U2l6ZVRh
YmxlTWluICsgMV1bdG8KIC8vIGZhY3RvcnMgZm9yIGVhY2gga2V5d29yZCB2YWx1ZS4KIHN0YXRp
YyBjb25zdCBmbG9hdCBmb250U2l6ZUZhY3RvcnNbdG90YWxLZXl3b3Jkc10gPSB7IDAuNjBmLCAw
Ljc1ZiwgMC44OWYsIDEuMGYsIDEuMmYsIDEuNWYsIDIuMGYsIDMuMGYgfTsKIAotZmxvYXQgZm9u
dFNpemVGb3JLZXl3b3JkKHVuc2lnbmVkIGtleXdvcmRJRCwgYm9vbCBzaG91bGRVc2VGaXhlZERl
ZmF1bHRTaXplLCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCitmbG9hdCBmb250U2l6ZUZvcktl
eXdvcmQodW5zaWduZWQga2V5d29yZElELCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUs
IGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzKQogewot
ICAgIGJvb2wgcXVpcmtzTW9kZSA9IGRvY3VtZW50LmluUXVpcmtzTW9kZSgpOwotICAgIGludCBt
ZWRpdW1TaXplID0gc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSA/IGRvY3VtZW50LnNldHRpbmdz
KCkuZGVmYXVsdEZpeGVkRm9udFNpemUoKSA6IGRvY3VtZW50LnNldHRpbmdzKCkuZGVmYXVsdEZv
bnRTaXplKCk7CisgICAgYm9vbCBxdWlya3NNb2RlID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+aW5R
dWlya3NNb2RlKCkgOiBmYWxzZTsKKyAgICBpbnQgbWVkaXVtU2l6ZSA9IHNob3VsZFVzZUZpeGVk
RGVmYXVsdFNpemUgPyBzZXR0aW5ncy5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpIDogc2V0dGluZ3Mu
ZGVmYXVsdEZvbnRTaXplKCk7CiAgICAgaWYgKG1lZGl1bVNpemUgPj0gZm9udFNpemVUYWJsZU1p
biAmJiBtZWRpdW1TaXplIDw9IGZvbnRTaXplVGFibGVNYXgpIHsKICAgICAgICAgLy8gTG9vayB1
cCB0aGUgZW50cnkgaW4gdGhlIHRhYmxlLgogICAgICAgICBpbnQgcm93ID0gbWVkaXVtU2l6ZSAt
IGZvbnRTaXplVGFibGVNaW47CkBAIC0xNTcsMTAgKzE2NCwxNSBAQCBmbG9hdCBmb250U2l6ZUZv
cktleXdvcmQodW5zaWduZWQga2V5d29yZElELCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNp
emUsIGNvbgogICAgIH0KIAogICAgIC8vIFZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRo
ZSB0YWJsZS4gQXBwbHkgdGhlIHNjYWxlIGZhY3RvciBpbnN0ZWFkLgotICAgIGZsb2F0IG1pbkxv
Z2ljYWxTaXplID0gc3RkOjptYXgoZG9jdW1lbnQuc2V0dGluZ3MoKS5taW5pbXVtTG9naWNhbEZv
bnRTaXplKCksIDEpOworICAgIGZsb2F0IG1pbkxvZ2ljYWxTaXplID0gc3RkOjptYXgoc2V0dGlu
Z3MubWluaW11bUxvZ2ljYWxGb250U2l6ZSgpLCAxKTsKICAgICByZXR1cm4gc3RkOjptYXgoZm9u
dFNpemVGYWN0b3JzW2tleXdvcmRJRCAtIENTU1ZhbHVlWHhTbWFsbF0gKiBtZWRpdW1TaXplLCBt
aW5Mb2dpY2FsU2l6ZSk7CiB9CiAKK2Zsb2F0IGZvbnRTaXplRm9yS2V5d29yZCh1bnNpZ25lZCBr
ZXl3b3JkSUQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KQoreworICAgIHJldHVybiBmb250U2l6ZUZvcktleXdvcmQoa2V5d29yZElELCBz
aG91bGRVc2VGaXhlZERlZmF1bHRTaXplLCAmZG9jdW1lbnQsIGRvY3VtZW50LnNldHRpbmdzKCkp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RhdGljIGludCBmaW5kTmVhcmVzdExlZ2Fj
eUZvbnRTaXplKGludCBwaXhlbEZvbnRTaXplLCBjb25zdCBUKiB0YWJsZSwgaW50IG11bHRpcGxp
ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgK
aW5kZXggZDM4NWI5YTAyNDg4NTJkNGFhMTI2ZmYxMTY1ODAxNWE3NmRiMGU2ZC4uM2VkYTA4ZjUz
MjZjOGFlNWVhMjVkNzUyZDJmNDYxOTk0ZTc4NjVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuaApAQCAtMzQsMTEgKzM0LDEzIEBAIGNsYXNzIFJl
bmRlclN0eWxlOwogbmFtZXNwYWNlIFN0eWxlIHsKIAogZmxvYXQgY29tcHV0ZWRGb250U2l6ZUZy
b21TcGVjaWZpZWRTaXplKGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgaXNBYnNvbHV0ZVNpemUs
IGJvb2wgdXNlU1ZHWm9vbVJ1bGVzLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IERvY3VtZW50
Jik7CitmbG9hdCBjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoZmxvYXQgc3BlY2lm
aWVkU2l6ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMsIGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgRG9jdW1lbnQqLCBjb25zdCBTZXR0aW5ncyYpOwogZmxvYXQg
Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplRm9yU1ZHSW5saW5lVGV4dChmbG9hdCBz
cGVjaWZpZWRTaXplLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCB6b29tRmFjdG9yLCBjb25z
dCBEb2N1bWVudCYpOwogCiAvLyBHaXZlbiBhIENTUyBrZXl3b3JkIGlkIGluIHRoZSByYW5nZSAo
Q1NTVmFsdWVYeFNtYWxsIHRvIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2UpLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgcmV0dXJuCiAvLyB0aGUgY29ycmVjdCBmb250IHNpemUgc2NhbGVkIHJlbGF0aXZlIHRv
IHRoZSB1c2VyJ3MgZGVmYXVsdCAobWVkaXVtKS4KIGZsb2F0IGZvbnRTaXplRm9yS2V5d29yZCh1
bnNpZ25lZCBrZXl3b3JkSUQsIGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3Qg
RG9jdW1lbnQmKTsKK2Zsb2F0IGZvbnRTaXplRm9yS2V5d29yZCh1bnNpZ25lZCBrZXl3b3JkSUQs
IGJvb2wgc2hvdWxkVXNlRml4ZWREZWZhdWx0U2l6ZSwgY29uc3QgRG9jdW1lbnQqLCBjb25zdCBT
ZXR0aW5ncyYpOwogCiAvLyBHaXZlbiBhIGZvbnQgc2l6ZSBpbiBwaXhlbCwgdGhpcyBmdW5jdGlv
biB3aWxsIHJldHVybiBsZWdhY3kgZm9udCBzaXplIGJldHdlZW4gMSBhbmQgNy4KIGludCBsZWdh
Y3lGb250U2l6ZUZvclBpeGVsU2l6ZShpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbCBzaG91bGRVc2VG
aXhlZERlZmF1bHRTaXplLCBjb25zdCBEb2N1bWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNj
b3BlLmNwcAppbmRleCBkY2I2NWJjMDljMzQ3NzliNjNhMjkzMjRlMjRkMzcyYmZjNmEyM2Q0Li42
YzhhOTJhMDBkNTAwZDkzNTdlNTdjMGNiOWRhNTdmMGY4YWI1ZTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVNjb3BlLmNwcApAQCAtMTEzLDcgKzExMyw3IEBAIFN0eWxlUmVzb2x2ZXImIFNjb3Bl
OjpyZXNvbHZlcigpCiAgICAgICAgICAgICBtX2RvY3VtZW50LmZvbnRTZWxlY3RvcigpLmJ1aWxk
Q29tcGxldGVkKCk7CiAgICAgfQogICAgIEFTU0VSVCghbV9zaGFkb3dSb290IHx8ICZtX2RvY3Vt
ZW50ID09ICZtX3NoYWRvd1Jvb3QtPmRvY3VtZW50KCkpOwotICAgIEFTU0VSVCgmbV9yZXNvbHZl
ci0+ZG9jdW1lbnQoKSA9PSAmbV9kb2N1bWVudCk7CisgICAgQVNTRVJUKG1fcmVzb2x2ZXItPmRv
Y3VtZW50KCkgPT0gJm1fZG9jdW1lbnQpOwogICAgIHJldHVybiAqbV9yZXNvbHZlcjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCmluZGV4IGEwMGY0ZmUw
ZjRjY2I1MmRkODMxYTk0ZTI2YTU4NjRlNWMxYjc5MjcuLjRmOGRjMmI2YmIwOTNiOGQ0YTNhYmQ5
Mjc2YTMwMTM3YjhkZjc1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
VHJlZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHAKQEAgLTgzLDggKzgzLDEwIEBAIFRyZWVSZXNvbHZlcjo6U2NvcGU6OlNjb3BlKFNo
YWRvd1Jvb3QmIHNoYWRvd1Jvb3QsIFNjb3BlJiBlbmNsb3NpbmdTY29wZSkKIAogVHJlZVJlc29s
dmVyOjpTY29wZTo6flNjb3BlKCkKIHsKLSAgICBpZiAoIXNoYWRvd1Jvb3QpCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5zZXRJc1Jlc29sdmluZ1RyZWVTdHlsZShmYWxzZSk7Cisg
ICAgaWYgKCFzaGFkb3dSb290KSB7CisgICAgICAgIEFTU0VSVChzdHlsZVJlc29sdmVyLmRvY3Vt
ZW50KCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCktPnNldElzUmVzb2x2aW5n
VHJlZVN0eWxlKGZhbHNlKTsKKyAgICB9CiAKICAgICBzdHlsZVJlc29sdmVyLnNldE92ZXJyaWRl
RG9jdW1lbnRFbGVtZW50U3R5bGUobnVsbHB0cik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCmluZGV4IGQ4MmRkNjUzNzg1OTBkNWZhMzFiMzBmODI3
MTJhMTJkZDYzMzhiMGIuLjYwYzY0N2VkNzhmYWU4YWY4ZWRhMDMzZWM1OTZjNDcxNDU5ODgzNDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuY3BwCkBAIC00
NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTb2NrZXRQcm92aWRlci5oIgorI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJMb2NhdGlv
bi5oIgpAQCAtNTA4LDQgKzUwOSwxMSBAQCB2b2lkIFdvcmtlckdsb2JhbFNjb3BlOjpjcmVhdGVJ
bWFnZUJpdG1hcChJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBpbnQgc3gsCiAgICAgSW1h
Z2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoKnRoaXMsIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShv
cHRpb25zKSwgc3gsIHN5LCBzdywgc2gsIFdURk1vdmUocHJvbWlzZSkpOwogfQogCitTdHlsZVJl
c29sdmVyJiBXb3JrZXJHbG9iYWxTY29wZTo6c3R5bGVSZXNvbHZlcigpCit7CisgICAgaWYgKCFt
X3N0eWxlUmVzb2x2ZXIpCisgICAgICAgIG1fc3R5bGVSZXNvbHZlciA9IG1ha2VVbmlxdWU8U3R5
bGVSZXNvbHZlcj4oc2V0dGluZ3MoKSk7CisgICAgcmV0dXJuICptX3N0eWxlUmVzb2x2ZXI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
R2xvYmFsU2NvcGUuaAppbmRleCA5NjFkY2IyYzJiMGY3MzRkMDI5ZTU2ZjExOGMwZTA3ZWVjOTFl
ZTQ4Li41MTE4YTBlNjA0MTc2MDkxZjc3OTdmZjAyODIwMzBiMmFhMWM5M2I3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlckdsb2JhbFNjb3BlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJHbG9iYWxTY29wZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNs
YXNzIE9mZnNjcmVlbkZvbnRTZWxlY3RvcjsKIGNsYXNzIFBlcmZvcm1hbmNlOwogY2xhc3MgU2No
ZWR1bGVkQWN0aW9uOwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTdHlsZVJlc29sdmVyOwogY2xh
c3MgV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcjsKIGNsYXNzIFdvcmtlckxvY2F0aW9uOwogY2xh
c3MgV29ya2VyTmF2aWdhdG9yOwpAQCAtMTQyLDYgKzE0Myw4IEBAIHB1YmxpYzoKIAogICAgIE9m
ZnNjcmVlbkZvbnRTZWxlY3RvciYgZm9udFNlbGVjdG9yKCkgeyByZXR1cm4gbV9mb250U2VsZWN0
b3I7IH0KIAorICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKTsKKwogcHJvdGVjdGVk
OgogICAgIFdvcmtlckdsb2JhbFNjb3BlKGNvbnN0IFVSTCYsIFJlZjxTZWN1cml0eU9yaWdpbj4m
JiwgY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwgYm9v
bCBpc09ubGluZSwgV29ya2VyVGhyZWFkJiwgYm9vbCBzaG91bGRCeXBhc3NNYWluV29ybGRDb250
ZW50U2VjdXJpdHlQb2xpY3ksIFJlZjxTZWN1cml0eU9yaWdpbj4mJiB0b3BPcmlnaW4sIE1vbm90
b25pY1RpbWUgdGltZU9yaWdpbiwgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uUHJveHkqLCBTb2Nr
ZXRQcm92aWRlciopOwogCkBAIC0yMjYsNiArMjI5LDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBS
ZWY8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAKICAgICBSZWY8T2Zmc2NyZWVuRm9udFNlbGVjdG9y
PiBtX2ZvbnRTZWxlY3RvcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHlsZVJlc29sdmVyPiBt
X3N0eWxlUmVzb2x2ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409552</attachid>
            <date>2020-09-24 04:28:13 -0700</date>
            <delta_ts>2020-09-24 04:39:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200924122811.patch</filename>
            <type>text/plain</type>
            <size>49550</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKaW5kZXggNmM2MmQ0YjJlMzk3ZWFlNmU4YTNiYTYwNzA0YTZhMjQyZWE3ZWRhZi4u
ZjJhZDEyYzA5ZmY0ZDZmYTUwNzc1ZTJmOTgyMDRhY2ZhOWY5MWJlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTM4LDYgKzEzOCwxNSBAQCBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsK
IH0KIAorT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKK30KKwogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IDllMDEwNGFmOTZkOTUzYjQwNzdmMzJi
MWE3NzkxZmNhM2QwZDI5MGIuLjkyNTg5YmY2OTU3ODBhYjc5NzUyOTg3YTQ0NGRiYTc5OTIwNWM3
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtNDMsNiArNDMsMTAg
QEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3Mg
QnVpbGRlclN0YXRlOwogfQpAQCAtOTEsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcp
OwogCisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dz4gcGFyc2VGb250V29ya2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRN
TFN0YW5kYXJkTW9kZSk7CisKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCmluZGV4IGU0MDRkNDhlZjhmZmYyZWI5Zjk2Mzg3OWZjNjFlZDIyODVmZTAz
ZjkuLmQ3N2U3MGQxYzlhNmIwNWFlMzY4MzIzNWI0NmZkZDRkYTJmNWIxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNT
U1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgpAQCAtODYxLDE2ICs4NjAsMTUgQEAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmEKICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBD
U1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NW
YWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKLX0KLQog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gc3dpdGNo
T24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQp
OworICAgICAgICB9LCBbXSAoZG91YmxlIHdlaWdodE51bWJlcikgeworICAgICAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUod2VpZ2h0TnVtYmVyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dEFic29sdXRlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtOTA3
LDcgKzkwNSw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIAogc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVVbHRy
YUNvbmRlbnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENT
U1ZhbHVlU2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVk
LCBDU1NWYWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFF
eHBhbmRlZD4ocmFuZ2UpOworICAgIGlmIChhdXRvIHZhbHVlSUQgPSBjb25zdW1lRm9udFN0cmV0
Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTk2MiwyNiArOTYy
LDE1IEBAIHN0YXRpYyBib29sIGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoZmxvYXQgb2JsaXF1ZSkK
IAogc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewot
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5nZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1
ZUlEID0gcmVzdWx0LT52YWx1ZUlEKCk7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYykKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRT
dHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCkpOwotICAgIEFTU0VSVChyZXN1bHQtPnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU9ibGlxdWUpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1l
QW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZm9udFN0eWxl
SXNXaXRoaW5SYW5nZShhbmdsZS0+dmFsdWU8ZmxvYXQ+KENTU1VuaXRUeXBlOjpDU1NfREVHKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVl
KSwgV1RGTW92ZShhbmdsZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlKQorICAgICAgICAgICAgcmV0
dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT5hbmdsZS52YWx1ZSwgcmVzdWx0LT5hbmdsZS50eXBlKSk7CiAjZW5k
aWYKLSAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAg
ICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE1
LDMzICsxMDA0LDExIEBAIHN0YXRpYyBSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29u
c3VtZUZvbnRTdHlsZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmCiB9CiAjZW5kaWYKIAotc3Rh
dGljIFN0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJvb2wgYWRkZWRTcGFjZSA9
IGZhbHNlOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVl
aygpOwotICAgIHdoaWxlIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKLSAgICAgICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKSk7Ci0gICAgfQotICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZp
cnN0VG9rZW4uaWQoKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFt
aWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0cmluZygpKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5
cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTdHJpbmcg
ZmFtaWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7Ci0gICAgaWYgKGZhbWls
eU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsK
KyAgICBpZiAoYXV0byBmYW1pbHlOYW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpKQor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5
VmFsdWUoKmZhbWlseU5hbWUpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJpY0ZhbWlseShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTExNDksMTMgKzExMTYsMTkgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUZvbnRTaXplKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2QKIAog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxpbmVIZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAg
ICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgIHJldHVy
biBjb25zdW1lSWRlbnQocmFuZ2UpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0ID0gY29uc3VtZU51bWJlcihyYW5nZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
LSAgICBpZiAobGluZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGxpbmVIZWlnaHQ7Ci0gICAgcmV0
dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSk7CisgICAgaWYgKGF1dG8gbGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVp
Z2h0UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24oKmxpbmVIZWlnaHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZUlEKTsKKyAgICAgICAgfSwgW10gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVIpOworICAgICAgICB9LCBbXSAoTGVuZ3RoT3JQZXJjZW50IGxlbmd0aE9y
UGVyY2VudCkgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obGVuZ3RoT3JQZXJj
ZW50LCBbXSAoQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGggbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
bGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAgICAgICAgICB9LCBbXSAoZG91YmxlIHBl
cmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0Up
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oCmluZGV4IGI3ZTE5ZmJkNjRhNzhjMGY3ZDU5YzcxNDg3ZDc5
NjZlN2EwYjA5OWUuLjA3OTE3MzVhYWRlYWViNTE4MGEwYTM0NTU1MDg2ZGU1YTA3YmMwNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
CmluZGV4IDY5NThhNjYyNzhjOTU4ZGQxZTYyOTM0ZThkMDkzNWJhNGViZDNiOWMuLjY0NzJlOWZk
Zjc0MjJjNzg3NjNkMzU2MjNlOGFlNWJjYWM3YmYyZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTEyOCwx
MCArMTI4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
T3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdygpCisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUGVyY2VudFJhdyhib29sIGFsbG93UGVyY2VudE9mID0gZmFsc2UpCiAgICAgewot
ICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCisgICAgICAgIGlmICghbV9jYWxjVmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGNhdGVnb3J5ID0g
bV9jYWxjVmFsdWUtPmNhdGVnb3J5KCk7CisgICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50KSB7CisgICAgICAgICAgICBpZiAoIWFsbG93UGVyY2VudE9m
IHx8CisgICAgICAgICAgICAgICAgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnRMZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgfQogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKICAgICAg
ICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOwogICAgIH0KQEAgLTE0NCw2ICsx
NTEsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRp
dmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKICAgICB9CiAKKyAgICBP
cHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5ndGhSYXcoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBt
X3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKKyAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+
cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CisgICAgfQor
CiBwcml2YXRlOgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBtX3JhbmdlOwpAQCAtMTc3LDEwICsxOTIsMTIgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBjb25zdW1lSW50ZWdlcihyYW5nZSwgMSk7CiB9CiAK
LWJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91Ymxl
JiByZXN1bHQpCitib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pIHsKKyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5n
ZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTg4LDcgKzIwNSw3IEBAIGJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgZG91YmxlJiByZXN1bHQpCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlv
blRva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7Cisg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIsIHZhbHVlUmFuZ2UpOwogICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXco
cmVzdWx0KTsKIH0KIApAQCAtMTk2LDIyICsyMTMsMTkgQEAgYm9vbCBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7
Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tl
bi5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdG9rZW4udW5pdFR5cGUo
KSk7Ci0gICAgfQotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2Vy
IGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGNWYWx1ZSA9IGNhbGNQYXJz
ZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1Zh
bHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgIGlmIChjYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwogICAg
IH0KIAorICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2Us
IG51bWJlciwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5pdFR5cGUoKSk7CisKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIApAQCAtMjIyLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBk
aXZpc2libGVCeTEwMChkb3VibGUgdmFsdWUpCiB9CiAjZW5kaWYKIAotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVh
bCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMu
CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CkBAIC0yMzAsMTEgKzI0NCwxNSBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQogI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogICAgICAg
ICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZp
c2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFsdWUoKSkKICNlbmRpZgotICAgICkKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXIocmFuZ2UsIFZhbHVlUmFuZ2VBbGwpOworICAgICkgeworICAg
ICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2Vu
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFu
IGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0
YXJnZXQgY29udGV4dC4iCiAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2VBbGwpOwpAQCAtMjQ1LDkgKzI2MywxNiBA
QCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KHJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6
bmV4dGFmdGVyKDEwMDAuLCAwLikpOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yNTksMTQgKzI4NCwxNCBAQCBpbmxp
bmUgYm9vbCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLAogICAgICAgICB8fCAoY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVp
cmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyk7CiB9CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5ndGhS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewogICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9r
ZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAgICAgICAgIHN3aXRjaCAodG9rZW4udW5p
dFR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKICAg
ICAgICAgICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VNUzoKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CkBAIC0yODcsMjggKzMx
MiwzOSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZAogICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICB9CiAgICAgICAgIGlmICgodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUg
JiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKSB8fCBzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNW
YWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgdG9rZW4udW5pdFR5
cGUoKSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9
IH07CiAgICAgfQogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKICAgICAg
ICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCBj
c3NQYXJzZXJNb2RlLCB1bml0bGVzcykKICAgICAgICAgICAgIHx8ICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQ1NTVW5pdFR5cGUgdW5pdFR5cGUgPSBDU1NVbml0
VHlwZTo6Q1NTX1BYOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1
ZSgpLCB1bml0VHlwZSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwogICAgIH0KIAogICAgIGlmICh0b2tlbi50
eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNhbGNQ
YXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1l
VmFsdWUoKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoUmF3KCk7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjYWxjUGFyc2Vy
LnZhbHVlKCkgJiYgY2FsY1BhcnNlci52YWx1ZSgpLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVW
YWx1ZSgpOworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmVzdWx0LT52YWx1ZSwg
cmVzdWx0LT50eXBlKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzMzLDcgKzM2OSw3
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwogICAg
ICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFs
dWUoKSkgewogICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJz
ZXIuY29uc3VtZVZhbHVlKCk7CkBAIC0zNjEsMjIgKzM5Nyw1NiBAQCBzdGF0aWMgYm9vbCBjYW5D
b25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENTU1BhcnNlck1v
ZGUgY3NzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0aE9yUGVyY2VudD4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51
bWJlclRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2Vy
TW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVy
Y2VudGFnZVRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVl
UmFuZ2UpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4u
dHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkK
KyAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsK
KyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25U
b2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CiAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2Fs
Y3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbkNvbnN1bWVD
YWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGlmIChjYW5D
b25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJNb2RlKSkg
eworICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNh
bGNQYXJzZXIuY29uc3VtZUxlbmd0aFJhdygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyAqcmVzdWx0IH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNhbGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcodHJ1ZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4p
IHsKKyAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVl
KiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNh
bkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZh
bHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtd
IChMZW5ndGggbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAg
ICAgICAgICB9LCBbXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NV
bml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgfSk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKQEAgLTUwMiwxMSArNTcyLDI1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJl
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlm
IChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQg
dXBwZXIpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVl
aygpLmlkKCkgPiB1cHBlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gY29uc3VtZUlkZW50UmF3KHJhbmdlKTsKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJ
RCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKQEAgLTE4MDMsNiArMTg4NywyMjUgQEAgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlckNvbnRleHQgY29udGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NT
VmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NT
VmFsdWVTbWFsbENhcHM+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7
CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xk
LCBDU1NWYWx1ZUJvbGRlciwgQ1NTVmFsdWVMaWdodGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFs
PEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29y
ZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAg
cmV0dXJuIHsgKnJlc3VsdCB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlv
bmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1Zh
bHVlVWx0cmFDb25kZW5zZWQsIENTU1ZhbHVlRXh0cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVu
c2VkLCBDU1NWYWx1ZVNlbWlDb25kZW5zZWQsIENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlF
eHBhbmRlZCwgQ1NTVmFsdWVFeHBhbmRlZCwgQ1NTVmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1
ZVVsdHJhRXhwYW5kZWQ+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sK
KyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxp
YywgQ1NTVmFsdWVPYmxpcXVlPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4g
Y29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHls
ZUtleXdvcmRWYWx1ZVJhdyhyYW5nZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGlkZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRl
bnQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWRlbnQgPT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAg
IHJldHVybiB7IHsgaWRlbnQsIHsgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIDAuMCB9IH0gfTsKKyAg
ICBBU1NFUlQoaWRlbnQgPT0gQ1NTVmFsdWVPYmxpcXVlKTsKKyNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQorICAgIGlmICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBpZiAoYXV0byBhbmds
ZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8gYW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMo
YW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7CisgICAgICAgICAgICBpZiAoZm9udFN0eWxlSXNX
aXRoaW5SYW5nZShhbmdsZUluRGVncmVlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NWYWx1ZU9ibGlxdWUsICphbmdsZSB9IH07CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2Vy
TW9kZSk7CisjZW5kaWYKKyAgICByZXR1cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgeyBDU1NVbml0
VHlwZTo6Q1NTX0RFRywgMC4wIH0gfSB9OworfQorCitTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlO
YW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKKyAgICBjb25zdCBDU1NQYXJzZXJU
b2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB3aGlsZSAocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBhZGRlZFNw
YWNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZChyYW5nZS5jb25z
dW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWFkZGVk
U3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlkKCkpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworT3B0aW9u
YWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKKyAgICAg
ICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0
cmluZygpOworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25jYXRl
bmF0ZUZhbWlseU5hbWUocmFuZ2UpOworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmYW1pbHlOYW1lOworfQorCitP
cHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmFuZ2VSYXcocmFuZ2Us
IENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlV2Via2l0Qm9keSk7Cit9CisKK09wdGlvbmFsPFdURjo6
VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBjb25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICBXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3PiBsaXN0Owor
ICAgIGRvIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lR2VuZXJpY0ZhbWlseVJh
dyhyYW5nZSkpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh7ICppZGVudCB9KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byBzdHJpbmcgPSBjb25zdW1lRmFtaWx5TmFtZVJh
dyhyYW5nZSkpCisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqc3RyaW5nIH0pOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIH0KKyAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdl
KSk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK09wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1l
Rm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBpZiAocmFuZ2UucGVl
aygpLmlkKCkgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIHJhbmdlLnBlZWsoKS5pZCgpIDw9IENTU1Zh
bHVlTGFyZ2VyKSB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3KHJh
bmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7ICppZGVudCB9OworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhP
clBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSwg
dW5pdGxlc3MpKQorICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdo
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewor
ICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBkb3VibGUgbnVtYmVyOworICAgIGlmIChjb25zdW1lTnVtYmVyUmF3KHJhbmdl
LCBudW1iZXIsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB7IG51bWJl
ciB9OworCisgICAgaWYgKGF1dG8gbGVuZ3RoT3JQZXJjZW50ID0gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkKKyAg
ICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OworCisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKworT3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7Cisg
ICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNvbWV3
aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgorICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5
ID0gcmFuZ2U7CisgICAgd2hpbGUgKCFyYW5nZUNvcHkuYXRFbmQoKSkgeworICAgICAgICBDU1NW
YWx1ZUlEIGlkID0gcmFuZ2VDb3B5LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUluaXRp
YWwpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIEZvbnRS
YXcgcmVzdWx0OworCisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CisgICAgICAgIENTU1Zh
bHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuaWQoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc3R5bGUp
IHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuc3R5bGUgPSBjb25zdW1lRm9udFN0eWxlUmF3KHJh
bmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXJlc3VsdC52YXJpYW50Q2FwcyAmJiAoaWQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgaWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpKSB7CisgICAgICAgICAgICAvLyBGb250IHZh
cmlhbnQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXJ0aWN1bGFyLCBpdCBvbmx5IGFjY2VwdHMgbm9y
bWFsIG9yIHNtYWxsLWNhcHMuCisgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy1mb250cy8jcHJvcGRlZi1mb250CisgICAgICAgICAgICBpZiAocmVzdWx0LnZh
cmlhbnRDYXBzID0gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcocmFuZ2UpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LndlaWdodCkg
eworICAgICAgICAgICAgaWYgKHJlc3VsdC53ZWlnaHQgPSBjb25zdW1lRm9udFdlaWdodFJhdyhy
YW5nZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFyZXN1bHQuc3RyZXRjaCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdC5zdHJldGNoID0gY29u
c3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmFu
Z2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIE5vdyBh
IGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KKyAgICBpZiAoYXV0byBzaXplID0gY29uc3VtZUZvbnRT
aXplUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmVzdWx0LnNpemUgPSAqc2l6
ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAocmFu
Z2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjb25z
dW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkgeworICAgICAgICBpZiAoIShyZXN1
bHQubGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIEZv
bnQgZmFtaWx5IG11c3QgY29tZSBub3cuCisgICAgaWYgKGF1dG8gZmFtaWx5ID0gY29uc3VtZUZv
bnRGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICByZXN1bHQuZmFtaWx5ID0gKmZhbWlseTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitBdG9tU3RyaW5nIGdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoQ1NTVmFsdWVJ
RCBpZGVudCkKK3sKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2FzZSBDU1NWYWx1ZVNlcmlm
OgorICAgICAgICByZXR1cm4gc2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJp
ZjoKKyAgICAgICAgcmV0dXJuIHNhbnNTZXJpZkZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlQ3Vy
c2l2ZToKKyAgICAgICAgcmV0dXJuIGN1cnNpdmVGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZUZh
bnRhc3k6CisgICAgICAgIHJldHVybiBmYW50YXN5RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVN
b25vc3BhY2U6CisgICAgICAgIHJldHVybiBtb25vc3BhY2VGYW1pbHk7CisgICAgY2FzZSBDU1NW
YWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgIHJldHVybiBwaWN0b2dyYXBoRmFtaWx5Owor
ICAgIGNhc2UgQ1NTVmFsdWVTeXN0ZW1VaToKKyAgICAgICAgcmV0dXJuIHN5c3RlbVVpRmFtaWx5
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmgKaW5kZXggYTg3YmQyMGFhMmE1MjM2MTRiZDM4M2JjMDgzNTc0NDg0ZmE0MDZiYi4u
N2RiZTg2NTMwNDc2MzhiZWJkZTY1MDY4ZWRiYzgyNzg2N2YwODQyZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCkBAIC0z
Nyw2ICszNyw4IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiTGVuZ3Ro
LmgiIC8vIEZvciBWYWx1ZVJhbmdlCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1
ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTYwLDIzICs2MiwzNiBAQCBzdHJ1Y3QgQW5nbGUgewogICAgIGRvdWJs
ZSB2YWx1ZTsKIH07CiAKK3N0cnVjdCBMZW5ndGggeworICAgIENTU1VuaXRUeXBlIHR5cGU7Cisg
ICAgZG91YmxlIHZhbHVlOworfTsKKwordXNpbmcgTGVuZ3RoT3JQZXJjZW50ID0gV1RGOjpWYXJp
YW50PExlbmd0aCwgZG91YmxlPjsKKwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
SW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1ib29sIGNv
bnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0KTsKK2Jv
b2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1bHQs
IFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8TGVuZ3RoPiBjb25zdW1lTGVuZ3RoUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1
aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxk
b3VibGU+IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdl
ID0gVmFsdWVSYW5nZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJj
ZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKK09wdGlvbmFsPExlbmd0aE9y
UGVyY2VudD4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6
OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNl
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRs
ZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotT3B0aW9uYWw8QW5nbGU+IGNvbnN1
bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyayk7CitPcHRpb25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlk
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0
bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVz
b2x1dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQWxsb3dYUmVzb2x1dGlvblVuaXQgPSBBbGxv
d1hSZXNvbHV0aW9uVW5pdDo6Rm9yYmlkKTsKIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVl
SUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlE
IGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENT
U1ZhbHVlSUQgdXBwZXIpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFsdWVJRC4uLj4gaW5s
aW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQgaWQpOwordGVtcGxhdGU8Q1NTVmFsdWVJ
RC4uLiBhbGxvd2VkSWRlbnRzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBhbGxvd2VkSWRl
bnRzPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUN1c3RvbUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTExNSw2ICsxMzAsNDAgQEAgZW51bSBjbGFzcyBB
bGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFsbG93ZWRGaWx0
ZXJGdW5jdGlvbnMpOwogUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZG93
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJv
b2wgYWxsb3dTcHJlYWQpOwogCitzdHJ1Y3QgRm9udFN0eWxlUmF3IHsKKyAgICBDU1NWYWx1ZUlE
IHN0eWxlOworICAgIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6QW5nbGUgYW5nbGU7Cit9Owor
dXNpbmcgRm9udFdlaWdodFJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBkb3VibGU+Owor
dXNpbmcgRm9udFNpemVSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NTVmFsdWVJRCwgQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnQ+OwordXNpbmcgTGluZUhlaWdodFJhdyA9IFdU
Rjo6VmFyaWFudDxDU1NWYWx1ZUlELCBkb3VibGUsIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
TGVuZ3RoT3JQZXJjZW50PjsKK3VzaW5nIEZvbnRGYW1pbHlSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NT
VmFsdWVJRCwgU3RyaW5nPjsKKworc3RydWN0IEZvbnRSYXcgeworICAgIE9wdGlvbmFsPEZvbnRT
dHlsZVJhdz4gc3R5bGU7CisgICAgT3B0aW9uYWw8Q1NTVmFsdWVJRD4gdmFyaWFudENhcHM7Cisg
ICAgT3B0aW9uYWw8Rm9udFdlaWdodFJhdz4gd2VpZ2h0OworICAgIE9wdGlvbmFsPENTU1ZhbHVl
SUQ+IHN0cmV0Y2g7CisgICAgRm9udFNpemVSYXcgc2l6ZTsKKyAgICBPcHRpb25hbDxMaW5lSGVp
Z2h0UmF3PiBsaW5lSGVpZ2h0OworICAgIFdURjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+IGZhbWls
eTsKK307CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250
V2VpZ2h0S2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPEZv
bnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
K09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0
eWxlS2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPEZvbnRT
dHlsZVJhdz4gY29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSk7CitTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKK09wdGlvbmFsPFN0cmluZz4gY29uc3VtZUZhbWlseU5hbWVSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVyaWNGYW1pbHlSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8V1RGOjpWZWN0b3I8Rm9udEZhbWlseVJh
dz4+IGNvbnN1bWVGb250RmFtaWx5UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFs
PEZvbnRTaXplUmF3PiBjb25zdW1lRm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MgPSBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQpOworT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOworT3B0aW9uYWw8Rm9udFJhdz4gY29uc3Vt
ZUZvbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK0F0
b21TdHJpbmcgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEKTsKKwogLy8g
VGVtcGxhdGUgaW1wbGVtZW50YXRpb25zIGFyZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIGZv
ciByZWFkYWJpbGl0eS4KIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gZW1wdHlCYXNlQ2FzZT4gaW5s
aW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0x
MjMsNiArMTcyLDEzIEBAIHRlbXBsYXRlPENTU1ZhbHVlSUQgaGVhZCwgQ1NTVmFsdWVJRC4uLiB0
YWlsPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJCiAgICAgcmV0dXJuIGlkID09
IGhlYWQgfHwgaWRlbnRNYXRjaGVzPHRhaWwuLi4+KGlkKTsKIH0KIAordGVtcGxhdGU8Q1NTVmFs
dWVJRC4uLiBuYW1lcz4gT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9
IElkZW50VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1lcy4uLj4ocmFuZ2UucGVlaygpLmlkKCkp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4g
bmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1lcy4uLj4ocmFuZ2UucGVlaygpLmlkKCkpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKaW5kZXggODkxODAyNzlhZjJiN2Y3NjU2YmNkZGY4ZWVjMDgzMzNiNjVjNjE0OC4u
NTZiM2NlNThjY2EyNDNkYjYwNTAwODg0MGY3YmNiYTEyZjgzMGJjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUg
IkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTQ0LDcgKzQ1
LDkgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCisjaW5jbHVkZSAiU3R5bGVG
b250U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1
ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAtMTM0LDYgKzEzNywx
MSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcm
IG5ld0ZvbnQpCiAgICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51bnBhcnNlZEZvbnQgJiYgc3Rh
dGUoKS5mb250LnJlYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gZm9udFJh
dyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJpY3RUb0NTU1Bh
cnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAgICBpZiAoIWZv
bnRSYXcpCisgICAgICAgIHJldHVybjsKKworI2lmIDAKICAgICBhdXRvIHBhcnNlZFN0eWxlID0g
TXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKHBhcnNlZFN0eWxlLCBDU1NQcm9wZXJ0eUZvbnQsIG5ld0ZvbnQsIHRydWUsIHN0cmljdFRv
Q1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOwogICAgIGlm
IChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQpAQCAtMTQ1LDcgKzE1Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICAv
LyB0aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdub3JlZC4KICAg
ICBpZiAoZm9udFZhbHVlID09ICJpbmhlcml0IiB8fCBmb250VmFsdWUgPT0gImluaXRpYWwiKQog
ICAgICAgICByZXR1cm47Ci0KKyNlbmRpZgogICAgIC8vIFRoZSBwYXJzZSBzdWNjZWVkZWQuCiAg
ICAgU3RyaW5nIG5ld0ZvbnRTYWZlQ29weShuZXdGb250KTsgLy8gQ3JlYXRlIGEgc3RyaW5nIGNv
cHkgc2luY2UgbmV3Rm9udCBjYW4gYmUgZGVsZXRlZCBpbnNpZGUgcmVhbGl6ZVNhdmVzLgogICAg
IHJlYWxpemVTYXZlcygpOwpAQCAtMTU4LDMxICsxNjYsMjAyIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBjYW52YXMoKS5kb2N1bWVudCgpOwogICAgIGRvY3VtZW50LnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKTsKIAorICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwogICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gY2FudmFzKCkuY29tcHV0ZWRTdHls
ZSgpKQotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSB9KTsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNvbXB1dGVkU3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpIH07CiAgICAgZWxzZSB7Ci0gICAgICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgZGVmYXVsdEZvbnREZXNj
cmlwdGlvbi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOwotICAgICAgICBkZWZhdWx0
Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKLSAgICAg
ICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoRGVmYXVsdEZvbnRTaXpl
KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShEZWZhdWx0Rm9udEZhbWls
eSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKERlZmF1bHRGb250
U2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoRGVmYXVsdEZv
bnRTaXplKTsKKyAgICB9CiAKLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGRlZmF1bHRGb250RGVzY3JpcHRpb24pKTsKKyAgICAvLyBOb3cgbWFwIHRoZSBmb250
IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KKyAgICBmbG9hdCBwYXJlbnRTaXpl
ID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKKworICAgIC8vIEZvbnQgZmFtaWx5
CisgICAgLy8gRklYTUU6IE1vc3RseSBkdXBsaWNhdGVkIGZyb20gU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlRm9udEZhbWlseQorICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZv
bnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5Lgor
ICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpOworCisgICAgVmVjdG9yPEF0b21TdHJpbmc+IGZhbWlsaWVz
OworICAgIGZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFJhdy0+ZmFtaWx5LnNp
emUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmb250UmF3LT5mYW1pbHkpIHsKKyAgICAg
ICAgQXRvbVN0cmluZyBmYW1pbHk7CisgICAgICAgIGJvb2wgaXNHZW5lcmljRmFtaWx5ID0gZmFs
c2U7CisgICAgICAgIHN3aXRjaE9uKGl0ZW0sIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgeworICAg
ICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gaWRlbnQgIT0gQ1NTVmFsdWVXZWJraXRCb2R5Owor
ICAgICAgICAgICAgZmFtaWx5ID0gaXNHZW5lcmljRmFtaWx5ID8KKyAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoaWRl
bnQpIDoKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZh
bWlseSgpOworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5U3RyaW5nKSB7Cisg
ICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlTdHJpbmc7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNT
cGVjaWZpZWRGb250KCFpc0dlbmVyaWNGYW1pbHkpOworICAgICAgICBmYW1pbGllcy51bmNoZWNr
ZWRBcHBlbmQoZmFtaWx5KTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKS51
cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKyAgICBpZiAoZmFtaWxpZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKGZh
bWlsaWVzKTsKIAotICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGlu
dG8gdGhlIHN0eWxlLgorICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CisgICAgICAgIGlmIChDU1NW
YWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVu
dGlmaWVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktl
eXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgZG9j
dW1lbnQpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6
ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpj
b21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlz
QWJzb2x1dGVTaXplKCksIGZhbHNlLCBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEZvbnQgc3R5bGUKKyAgICAvLyBGSVhNRTogTW9zdGx5IGR1
cGxpY2F0ZWQgZnJvbSBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVl
CisgICAgaWYgKGZvbnRSYXctPnN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9udFJhdy0+c3R5
bGUtPnN0eWxlKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKIAorICAgICAgICBjYXNlIENTU1ZhbHVlSXRhbGljOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhpdGFsaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVPYmxpcXVlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEl0YWxpYyhGb250U2VsZWN0aW9uVmFsdWUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhmb250UmF3LT5zdHlsZS0+YW5nbGUudHlwZSwg
Zm9udFJhdy0+c3R5bGUtPmFuZ2xlLnZhbHVlKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRG
b250U3R5bGVBeGlzKChmb250UmF3LT5zdHlsZSAmJiBmb250UmF3LT5zdHlsZS0+c3R5bGUgPT0g
Q1NTVmFsdWVJdGFsaWMpID8gRm9udFN0eWxlQXhpczo6aXRhbCA6IEZvbnRTdHlsZUF4aXM6OnNs
bnQpOworCisgICAgLy8gRm9udCB2YXJpYW50IGNhcHMKKyAgICBpZiAoZm9udFJhdy0+dmFyaWFu
dENhcHMpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbXVzdCBiZSBkZWZpbmVkIHNvbWV3aGVy
ZS4uLgorICAgICAgICBzd2l0Y2ggKCpmb250UmF3LT52YXJpYW50Q2FwcykgeworICAgICAgICBj
YXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6U21hbGwpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxTbWFsbENhcHM6CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVBldGl0ZUNhcHM6CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpQ
ZXRpdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxQZXRp
dGVDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRW
YXJpYW50Q2Fwczo6QWxsUGV0aXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1ZhbHVlVW5pY2FzZToKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50
Q2FwcyhGb250VmFyaWFudENhcHM6OlVuaWNhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlRpdGxpbmcpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRm9udCB3
ZWlnaHQKKyAgICBpZiAoZm9udFJhdy0+d2VpZ2h0KSB7CisgICAgICAgIGF1dG8gd2VpZ2h0ID0g
c3dpdGNoT24oKmZvbnRSYXctPndlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFs
OgorICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOworICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUJvbGQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJvbGRXZWlnaHRW
YWx1ZSgpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0KGZvbnREZXNjcmlw
dGlvbi53ZWlnaHQoKSk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGlnaHRlcjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodChm
b250RGVzY3JpcHRpb24ud2VpZ2h0KCkpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9y
bWFsV2VpZ2h0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgWyZdIChkb3VibGUg
d2VpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlOjpjbGFtcEZs
b2F0KHdlaWdodCk7CisgICAgICAgIH0pOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2Vp
Z2h0KHdlaWdodCk7CisgICAgfQorCisgICAgLy8gRm9udCBzaXplCisgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKKyAgICBm
bG9hdCBzaXplID0gc3dpdGNoT24oZm9udFJhdy0+c2l6ZSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50
KSB7CisgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21h
bGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVT
bWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUxhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgorICAgICAgICBjYXNlIENTU1Zh
bHVlWHhMYXJnZToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQp
OworICAgICAgICAgICAgcmV0dXJuIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZv
bnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50KTsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4y
ZjsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CisgICAgICAgICAgICByZXR1cm4gcGFy
ZW50U2l6ZSAvIDEuMmY7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMC5m
OworICAgICAgICB9CisgICAgfSwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
Okxlbmd0aE9yUGVyY2VudCYgbGVuZ3RoT3JQZXJjZW50KSB7CisgICAgICAgIHJldHVybiBzd2l0
Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpMZW5ndGgmIGxlbmd0aCkgeworICAgICAgICAgICAgLy8gRklYTUU6IFBhcmVudCBzdHlsZSBp
cyBvbmx5IHVzZWQgZm9yIGxpbmUtaGVpZ2h0IC0gZG8gd2UgbmVlZCB0byBzcGVjaWZ5IGl0IGhl
cmU/CisgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRh
IHsgbmV3U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclN0eWxlKCksIG51bGxwdHIsIGRvY3Vt
ZW50LnJlbmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlGb250U2l6ZSB9OworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5v
bkNhbGNMZW5ndGhEb3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0aC50eXBlLCBsZW5ndGgudmFs
dWUpKTsKKyAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAg
cmV0dXJuIChwYXJlbnRTaXplICogcGVyY2VudGFnZSkgLyAxMDAuZjsKKyAgICAgICAgfSk7Cisg
ICAgfSk7CisKKyAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoc2l6ZSk7CisgICAgfQorCisgICAgLy8gTGluZSBoZWlnaHQKKyAgICBpZiAoZm9udFJh
dy0+bGluZUhlaWdodCkgeworICAgICAgICBPcHRpb25hbDxMZW5ndGg+IGxpbmVIZWlnaHQgPSBz
d2l0Y2hPbigqZm9udFJhdy0+bGluZUhlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7Cisg
ICAgICAgICAgICBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkp
OworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oV1RGOjpudWxsb3B0KTsKKyAg
ICAgICAgfSwgWyZdIChkb3VibGUgbnVtYmVyKSB7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8TGVuZ3RoPihMZW5ndGgobnVtYmVyICogMTAwLjAsIFBlcmNlbnQpKTsKKyAgICAgICAgfSwg
WyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudCYgbGVu
Z3RoT3JQZXJjZW50KSB7CisgICAgICAgICAgICByZXR1cm4gc3dpdGNoT24obGVuZ3RoT3JQZXJj
ZW50LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoJiBsZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25E
YXRhIHsgbmV3U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclN0eWxlKCksIG51bGxwdHIsIGRv
Y3VtZW50LnJlbmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0IH07CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+
KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShjb252ZXJzaW9u
RGF0YSwgbGVuZ3RoLnR5cGUsIGxlbmd0aC52YWx1ZSksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBt
YXhWYWx1ZUZvckNzc0xlbmd0aCksIEZpeGVkKSk7CisgICAgICAgICAgICB9LCBbJl0gKGRvdWJs
ZSBwZXJjZW50YWdlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4o
TGVuZ3RoKChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzdGF0aWNfY2FzdDxpbnQ+
KHBlcmNlbnRhZ2UpKSAvIDEwMCwgRml4ZWQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKworICAgICAgICBpZiAobGluZUhlaWdodCkKKyAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRM
aW5lSGVpZ2h0KFdURk1vdmUobGluZUhlaWdodC52YWx1ZSgpKSk7CisgICAgfQorCisgICAgbmV3
U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAg
IG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkp
OworI2lmIDAKICAgICBTdHlsZTo6TWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgYXV0byBw
YXJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgqbmV3U3R5bGUpOwogICAgIFN0eWxlOjpC
dWlsZGVyIHN0eWxlQnVpbGRlcigqbmV3U3R5bGUsIHsgZG9jdW1lbnQsIHBhcmVudFN0eWxlIH0s
IG1hdGNoUmVzdWx0LCB7IH0pOwotCiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOwogICAgIHN0eWxlQnVpbGRlci5hcHBseVBy
b3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVy
LmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgp
KTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFdl
aWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2Vp
Z2h0KS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTaXplKS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOworI2VuZGlmCiAKICAgICBtb2RpZmlhYmxlU3Rh
dGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpuZXdTdHlsZSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20u
aCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IGI2M2Q1
ZmRmOWMxNWUyYjNkNjYwZGZiODAyMDc3N2U1MTc4MWUyM2IuLjVlOGQxOGNiY2I1ZDYzMjdkMGZm
ZmU4M2I5YTQ4YjYxODUwMzZlOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0dyaWRUZW1wbGF0ZUFy
ZWFzVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNs
dWRlICJDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NTaGFkb3dW
YWx1ZS5oIgogI2luY2x1ZGUgIkNvdW50ZXIuaCIKQEAgLTk4OCw0MCArOTg5LDExIEBAIGlubGlu
ZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KEJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlLCBDU1NWCiAgICAgICAgICAgICAvLyBJZiB0aGUgZmFtaWx5IG5hbWUgd2Fz
IHJlc29sdmVkIGJ5IHRoZSBDU1MgcGFyc2VyIGZyb20gYSBzeXN0ZW0gZm9udCBJRCwgdGhlbiBp
dCBpcyBnZW5lcmljLgogICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gZm9udEZhbWlseS5m
cm9tU3lzdGVtRm9udElEOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoIChj
b250ZW50VmFsdWUudmFsdWVJRCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0
Qm9keToKKyAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVl
V2Via2l0Qm9keSkgewogICAgICAgICAgICAgICAgIGZhbWlseSA9IGJ1aWxkZXJTdGF0ZS5kb2N1
bWVudCgpLnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5ID0gc2VyaWZGYW1pbHk7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlU2Fuc1NlcmlmOgotICAgICAgICAgICAgICAgIGZhbWlseSA9
IHNhbnNTZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNp
dmU6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAg
ICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0g
ZmFudGFzeUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFj
ZToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAg
ICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgotICAgICAgICAgICAgICAg
IGZhbWlseSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFt
aWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVTeXN0ZW1VaToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzeXN0ZW1VaUZhbWlseTsK
LSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBmYW1pbHkgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNG
b250RmFtaWx5RnJvbVZhbHVlSUQoY29udGVudFZhbHVlLnZhbHVlSUQoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAo=
</data>
<flag name="commit-queue"
          id="425296"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409553</attachid>
            <date>2020-09-24 04:36:43 -0700</date>
            <delta_ts>2020-09-24 04:55:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200924123641.patch</filename>
            <type>text/plain</type>
            <size>49558</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKaW5kZXggNmM2MmQ0YjJlMzk3ZWFlNmU4YTNiYTYwNzA0YTZhMjQyZWE3ZWRhZi4u
ZjJhZDEyYzA5ZmY0ZDZmYTUwNzc1ZTJmOTgyMDRhY2ZhOWY5MWJlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTM4LDYgKzEzOCwxNSBAQCBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsK
IH0KIAorT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKK30KKwogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IDllMDEwNGFmOTZkOTUzYjQwNzdmMzJi
MWE3NzkxZmNhM2QwZDI5MGIuLjkyNTg5YmY2OTU3ODBhYjc5NzUyOTg3YTQ0NGRiYTc5OTIwNWM3
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtNDMsNiArNDMsMTAg
QEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3Mg
QnVpbGRlclN0YXRlOwogfQpAQCAtOTEsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcp
OwogCisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dz4gcGFyc2VGb250V29ya2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRN
TFN0YW5kYXJkTW9kZSk7CisKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCmluZGV4IGU0MDRkNDhlZjhmZmYyZWI5Zjk2Mzg3OWZjNjFlZDIyODVmZTAz
ZjkuLmQ3N2U3MGQxYzlhNmIwNWFlMzY4MzIzNWI0NmZkZDRkYTJmNWIxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNT
U1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgpAQCAtODYxLDE2ICs4NjAsMTUgQEAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmEKICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBD
U1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NW
YWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKLX0KLQog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gc3dpdGNo
T24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQp
OworICAgICAgICB9LCBbXSAoZG91YmxlIHdlaWdodE51bWJlcikgeworICAgICAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUod2VpZ2h0TnVtYmVyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dEFic29sdXRlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtOTA3
LDcgKzkwNSw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIAogc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVVbHRy
YUNvbmRlbnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENT
U1ZhbHVlU2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVk
LCBDU1NWYWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFF
eHBhbmRlZD4ocmFuZ2UpOworICAgIGlmIChhdXRvIHZhbHVlSUQgPSBjb25zdW1lRm9udFN0cmV0
Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTk2MiwyNiArOTYy
LDE1IEBAIHN0YXRpYyBib29sIGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoZmxvYXQgb2JsaXF1ZSkK
IAogc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewot
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5nZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1
ZUlEID0gcmVzdWx0LT52YWx1ZUlEKCk7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYykKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRT
dHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCkpOwotICAgIEFTU0VSVChyZXN1bHQtPnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU9ibGlxdWUpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1l
QW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZm9udFN0eWxl
SXNXaXRoaW5SYW5nZShhbmdsZS0+dmFsdWU8ZmxvYXQ+KENTU1VuaXRUeXBlOjpDU1NfREVHKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVl
KSwgV1RGTW92ZShhbmdsZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlKQorICAgICAgICAgICAgcmV0
dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT5hbmdsZS52YWx1ZSwgcmVzdWx0LT5hbmdsZS50eXBlKSk7CiAjZW5k
aWYKLSAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAg
ICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE1
LDMzICsxMDA0LDExIEBAIHN0YXRpYyBSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29u
c3VtZUZvbnRTdHlsZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmCiB9CiAjZW5kaWYKIAotc3Rh
dGljIFN0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJvb2wgYWRkZWRTcGFjZSA9
IGZhbHNlOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVl
aygpOwotICAgIHdoaWxlIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKLSAgICAgICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKSk7Ci0gICAgfQotICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZp
cnN0VG9rZW4uaWQoKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFt
aWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0cmluZygpKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5
cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTdHJpbmcg
ZmFtaWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7Ci0gICAgaWYgKGZhbWls
eU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsK
KyAgICBpZiAoYXV0byBmYW1pbHlOYW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpKQor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5
VmFsdWUoKmZhbWlseU5hbWUpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJpY0ZhbWlseShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTExNDksMTMgKzExMTYsMTkgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUZvbnRTaXplKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2QKIAog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxpbmVIZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAg
ICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgIHJldHVy
biBjb25zdW1lSWRlbnQocmFuZ2UpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0ID0gY29uc3VtZU51bWJlcihyYW5nZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
LSAgICBpZiAobGluZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGxpbmVIZWlnaHQ7Ci0gICAgcmV0
dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSk7CisgICAgaWYgKGF1dG8gbGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVp
Z2h0UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24oKmxpbmVIZWlnaHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZUlEKTsKKyAgICAgICAgfSwgW10gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVIpOworICAgICAgICB9LCBbXSAoTGVuZ3RoT3JQZXJjZW50IGxlbmd0aE9y
UGVyY2VudCkgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obGVuZ3RoT3JQZXJj
ZW50LCBbXSAoQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGggbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
bGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAgICAgICAgICB9LCBbXSAoZG91YmxlIHBl
cmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0Up
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oCmluZGV4IGI3ZTE5ZmJkNjRhNzhjMGY3ZDU5YzcxNDg3ZDc5
NjZlN2EwYjA5OWUuLjA3OTE3MzVhYWRlYWViNTE4MGEwYTM0NTU1MDg2ZGU1YTA3YmMwNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
CmluZGV4IDY5NThhNjYyNzhjOTU4ZGQxZTYyOTM0ZThkMDkzNWJhNGViZDNiOWMuLjFjZmYzYWFh
MDI2NGQyYmQyNWRlMjE1NWJlYTM3NDlkMzFkYTBhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTEyOCwx
MCArMTI4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
T3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdygpCisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUGVyY2VudFJhdyhib29sIGFsbG93UGVyY2VudE9mID0gZmFsc2UpCiAgICAgewot
ICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCisgICAgICAgIGlmICghbV9jYWxjVmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGNhdGVnb3J5ID0g
bV9jYWxjVmFsdWUtPmNhdGVnb3J5KCk7CisgICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50KSB7CisgICAgICAgICAgICBpZiAoIWFsbG93UGVyY2VudE9m
IHx8CisgICAgICAgICAgICAgICAgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnRMZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgfQogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKICAgICAg
ICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOwogICAgIH0KQEAgLTE0NCw2ICsx
NTEsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRp
dmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKICAgICB9CiAKKyAgICBP
cHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5ndGhSYXcoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBt
X3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKKyAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+
cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CisgICAgfQor
CiBwcml2YXRlOgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBtX3JhbmdlOwpAQCAtMTc3LDEwICsxOTIsMTIgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBjb25zdW1lSW50ZWdlcihyYW5nZSwgMSk7CiB9CiAK
LWJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91Ymxl
JiByZXN1bHQpCitib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pIHsKKyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5n
ZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTg4LDcgKzIwNSw3IEBAIGJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgZG91YmxlJiByZXN1bHQpCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlv
blRva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7Cisg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIsIHZhbHVlUmFuZ2UpOwogICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXco
cmVzdWx0KTsKIH0KIApAQCAtMTk2LDIyICsyMTMsMTkgQEAgYm9vbCBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7
Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tl
bi5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdG9rZW4udW5pdFR5cGUo
KSk7Ci0gICAgfQotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2Vy
IGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGNWYWx1ZSA9IGNhbGNQYXJz
ZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1Zh
bHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgIGlmIChjYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwogICAg
IH0KIAorICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2Us
IG51bWJlciwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5pdFR5cGUoKSk7CisKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIApAQCAtMjIyLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBk
aXZpc2libGVCeTEwMChkb3VibGUgdmFsdWUpCiB9CiAjZW5kaWYKIAotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVh
bCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMu
CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CkBAIC0yMzAsMTEgKzI0NCwxNSBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQogI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogICAgICAg
ICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZp
c2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFsdWUoKSkKICNlbmRpZgotICAgICkKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXIocmFuZ2UsIFZhbHVlUmFuZ2VBbGwpOworICAgICkgeworICAg
ICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2Vu
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFu
IGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0
YXJnZXQgY29udGV4dC4iCiAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2VBbGwpOwpAQCAtMjQ1LDkgKzI2MywxNiBA
QCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KHJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6
bmV4dGFmdGVyKDEwMDAuLCAwLikpOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yNTksMTQgKzI4NCwxNCBAQCBpbmxp
bmUgYm9vbCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLAogICAgICAgICB8fCAoY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVp
cmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyk7CiB9CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5ndGhS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewogICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9r
ZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAgICAgICAgIHN3aXRjaCAodG9rZW4udW5p
dFR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKICAg
ICAgICAgICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VNUzoKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CkBAIC0yODcsMjggKzMx
MiwzOSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZAogICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICB9CiAgICAgICAgIGlmICgodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUg
JiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKSB8fCBzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNW
YWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgdG9rZW4udW5pdFR5
cGUoKSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9
IH07CiAgICAgfQogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKICAgICAg
ICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCBj
c3NQYXJzZXJNb2RlLCB1bml0bGVzcykKICAgICAgICAgICAgIHx8ICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQ1NTVW5pdFR5cGUgdW5pdFR5cGUgPSBDU1NVbml0
VHlwZTo6Q1NTX1BYOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1
ZSgpLCB1bml0VHlwZSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwogICAgIH0KIAogICAgIGlmICh0b2tlbi50
eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNhbGNQ
YXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1l
VmFsdWUoKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoUmF3KCk7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjYWxjUGFyc2Vy
LnZhbHVlKCkgJiYgY2FsY1BhcnNlci52YWx1ZSgpLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVW
YWx1ZSgpOworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmVzdWx0LT52YWx1ZSwg
cmVzdWx0LT50eXBlKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzMzLDcgKzM2OSw3
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwogICAg
ICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFs
dWUoKSkgewogICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJz
ZXIuY29uc3VtZVZhbHVlKCk7CkBAIC0zNjEsMjIgKzM5Nyw1NiBAQCBzdGF0aWMgYm9vbCBjYW5D
b25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENTU1BhcnNlck1v
ZGUgY3NzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0aE9yUGVyY2VudD4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51
bWJlclRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2Vy
TW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVy
Y2VudGFnZVRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVl
UmFuZ2UpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4u
dHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkK
KyAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsK
KyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25U
b2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CiAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2Fs
Y3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbkNvbnN1bWVD
YWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGlmIChjYW5D
b25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJNb2RlKSkg
eworICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNh
bGNQYXJzZXIuY29uc3VtZUxlbmd0aFJhdygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyAqcmVzdWx0IH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNhbGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcodHJ1ZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4p
IHsKKyAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVl
KiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNh
bkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZh
bHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtd
IChMZW5ndGggbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAg
ICAgICAgICB9LCBbXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NV
bml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgfSk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKQEAgLTUwMiwxMSArNTcyLDI1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJl
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlm
IChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQg
dXBwZXIpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVl
aygpLmlkKCkgPiB1cHBlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gY29uc3VtZUlkZW50UmF3KHJhbmdlKTsKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJ
RCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKQEAgLTE4MDMsNiArMTg4NywyMjUgQEAgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlckNvbnRleHQgY29udGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NT
VmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NT
VmFsdWVTbWFsbENhcHM+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7
CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xk
LCBDU1NWYWx1ZUJvbGRlciwgQ1NTVmFsdWVMaWdodGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFs
PEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29y
ZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAg
cmV0dXJuIHsgKnJlc3VsdCB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlv
bmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1Zh
bHVlVWx0cmFDb25kZW5zZWQsIENTU1ZhbHVlRXh0cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVu
c2VkLCBDU1NWYWx1ZVNlbWlDb25kZW5zZWQsIENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlF
eHBhbmRlZCwgQ1NTVmFsdWVFeHBhbmRlZCwgQ1NTVmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1
ZVVsdHJhRXhwYW5kZWQ+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sK
KyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxp
YywgQ1NTVmFsdWVPYmxpcXVlPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4g
Y29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHls
ZUtleXdvcmRWYWx1ZVJhdyhyYW5nZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGlkZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRl
bnQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWRlbnQgPT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAg
IHJldHVybiB7IHsgaWRlbnQsIHsgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIDAuMCB9IH0gfTsKKyAg
ICBBU1NFUlQoaWRlbnQgPT0gQ1NTVmFsdWVPYmxpcXVlKTsKKyNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQorICAgIGlmICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBpZiAoYXV0byBhbmds
ZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8gYW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMo
YW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7CisgICAgICAgICAgICBpZiAoZm9udFN0eWxlSXNX
aXRoaW5SYW5nZShhbmdsZUluRGVncmVlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NWYWx1ZU9ibGlxdWUsICphbmdsZSB9IH07CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2Vy
TW9kZSk7CisjZW5kaWYKKyAgICByZXR1cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgeyBDU1NVbml0
VHlwZTo6Q1NTX0RFRywgMC4wIH0gfSB9OworfQorCitTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlO
YW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKKyAgICBjb25zdCBDU1NQYXJzZXJU
b2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB3aGlsZSAocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBhZGRlZFNw
YWNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZChyYW5nZS5jb25z
dW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWFkZGVk
U3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlkKCkpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworT3B0aW9u
YWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKKyAgICAg
ICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0
cmluZygpOworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25jYXRl
bmF0ZUZhbWlseU5hbWUocmFuZ2UpOworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmYW1pbHlOYW1lOworfQorCitP
cHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmFuZ2VSYXcocmFuZ2Us
IENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlV2Via2l0Qm9keSk7Cit9CisKK09wdGlvbmFsPFdURjo6
VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBjb25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICBXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3PiBsaXN0Owor
ICAgIGRvIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lR2VuZXJpY0ZhbWlseVJh
dyhyYW5nZSkpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh7ICppZGVudCB9KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byBzdHJpbmcgPSBjb25zdW1lRmFtaWx5TmFtZVJh
dyhyYW5nZSkpCisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqc3RyaW5nIH0pOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIH0KKyAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdl
KSk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK09wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1l
Rm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBpZiAocmFuZ2UucGVl
aygpLmlkKCkgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIHJhbmdlLnBlZWsoKS5pZCgpIDw9IENTU1Zh
bHVlTGFyZ2VyKSB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3KHJh
bmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7ICppZGVudCB9OworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhP
clBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSwg
dW5pdGxlc3MpKQorICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdo
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewor
ICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBkb3VibGUgbnVtYmVyOworICAgIGlmIChjb25zdW1lTnVtYmVyUmF3KHJhbmdl
LCBudW1iZXIsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB7IG51bWJl
ciB9OworCisgICAgaWYgKGF1dG8gbGVuZ3RoT3JQZXJjZW50ID0gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkKKyAg
ICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OworCisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKworT3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7Cisg
ICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNvbWV3
aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgorICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5
ID0gcmFuZ2U7CisgICAgd2hpbGUgKCFyYW5nZUNvcHkuYXRFbmQoKSkgeworICAgICAgICBDU1NW
YWx1ZUlEIGlkID0gcmFuZ2VDb3B5LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUluaXRp
YWwpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIEZvbnRS
YXcgcmVzdWx0OworCisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CisgICAgICAgIENTU1Zh
bHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuaWQoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc3R5bGUp
IHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0eWxlID0gY29uc3VtZUZvbnRTdHlsZVJhdyhy
YW5nZSwgY3NzUGFyc2VyTW9kZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmICghcmVzdWx0LnZhcmlhbnRDYXBzICYmIChpZCA9PSBDU1NWYWx1ZU5v
cm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcykpIHsKKyAgICAgICAgICAgIC8vIEZvbnQg
dmFyaWFudCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhcnRpY3VsYXIsIGl0IG9ubHkgYWNjZXB0cyBu
b3JtYWwgb3Igc21hbGwtY2Fwcy4KKyAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2RyYWZ0cy5j
c3N3Zy5vcmcvY3NzLWZvbnRzLyNwcm9wZGVmLWZvbnQKKyAgICAgICAgICAgIGlmICgocmVzdWx0
LnZhcmlhbnRDYXBzID0gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcocmFuZ2UpKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdC53ZWln
aHQpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LndlaWdodCA9IGNvbnN1bWVGb250V2VpZ2h0
UmF3KHJhbmdlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFyZXN1bHQuc3RyZXRjaCkgeworICAgICAgICAgICAgaWYgKChyZXN1bHQuc3RyZXRj
aCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhyYW5nZSkpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
Ly8gTm93IGEgZm9udCBzaXplIF9tdXN0XyBjb21lLgorICAgIGlmIChhdXRvIHNpemUgPSBjb25z
dW1lRm9udFNpemVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICByZXN1bHQuc2l6
ZSA9ICpzaXplOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
aWYgKGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKSB7CisgICAgICAgIGlm
ICghKHJlc3VsdC5saW5lSGVpZ2h0ID0gY29uc3VtZUxpbmVIZWlnaHRSYXcocmFuZ2UsIGNzc1Bh
cnNlck1vZGUpKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KKyAgICBpZiAoYXV0byBmYW1pbHkgPSBj
b25zdW1lRm9udEZhbWlseVJhdyhyYW5nZSkpCisgICAgICAgIHJlc3VsdC5mYW1pbHkgPSAqZmFt
aWx5OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0F0b21TdHJpbmcgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChD
U1NWYWx1ZUlEIGlkZW50KQoreworICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICBjYXNlIENTU1Zh
bHVlU2VyaWY6CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVl
U2Fuc1NlcmlmOgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NT
VmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseTsKKyAgICBjYXNlIENT
U1ZhbHVlRmFudGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHk7CisgICAgY2FzZSBD
U1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKKyAgICBj
YXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhG
YW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVN5c3RlbVVpOgorICAgICAgICByZXR1cm4gc3lzdGVt
VWlGYW1pbHk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVycwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaAppbmRleCBhODdiZDIwYWEyYTUyMzYxNGJkMzgzYmMwODM1NzQ0ODRm
YTQwNmJiLi43ZGJlODY1MzA0NzYzOGJlYmRlNjUwNjhlZGJjODI3ODY3ZjA4NDJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmgKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRl
ICJMZW5ndGguaCIgLy8gRm9yIFZhbHVlUmFuZ2UKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMjMgKzYyLDM2IEBAIHN0cnVjdCBBbmdsZSB7CiAg
ICAgZG91YmxlIHZhbHVlOwogfTsKIAorc3RydWN0IExlbmd0aCB7CisgICAgQ1NTVW5pdFR5cGUg
dHlwZTsKKyAgICBkb3VibGUgdmFsdWU7Cit9OworCit1c2luZyBMZW5ndGhPclBlcmNlbnQgPSBX
VEY6OlZhcmlhbnQ8TGVuZ3RoLCBkb3VibGU+OworCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUgbWluaW11bVZhbHVl
ID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwogUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
LWJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1
bHQpOworYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUm
IHJlc3VsdCwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpOwogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsK
K09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5n
dGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVu
aXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIE9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworT3B0aW9uYWw8
TGVuZ3RoT3JQZXJjZW50PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0
aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7Ci1PcHRpb25hbDxBbmds
ZT4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrKTsKK09wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1
aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWly
ayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBBbGxvd1hSZXNvbHV0aW9uVW5p
dCA9IEFsbG93WFJlc29sdXRpb25Vbml0OjpGb3JiaWQpOwogCitPcHRpb25hbDxDU1NWYWx1ZUlE
PiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8
Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBs
b3dlciwgQ1NTVmFsdWVJRCB1cHBlcik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlE
Li4uPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7Cit0ZW1wbGF0ZTxD
U1NWYWx1ZUlELi4uIGFsbG93ZWRJZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJ
ZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFs
bG93ZWRJZGVudHM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ3Vz
dG9tSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpAQCAtMTE1LDYgKzEzMCw0MCBAQCBlbnVt
IGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
RmlsdGVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQWxs
b3dlZEZpbHRlckZ1bmN0aW9ucyk7CiBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5n
bGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWxsb3dJ
bnNldCwgYm9vbCBhbGxvd1NwcmVhZCk7CiAKK3N0cnVjdCBGb250U3R5bGVSYXcgeworICAgIENT
U1ZhbHVlSUQgc3R5bGU7CisgICAgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZSBhbmds
ZTsKK307Cit1c2luZyBGb250V2VpZ2h0UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRv
dWJsZT47Cit1c2luZyBGb250U2l6ZVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudD47Cit1c2luZyBMaW5lSGVpZ2h0
UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRvdWJsZSwgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpMZW5ndGhPclBlcmNlbnQ+OwordXNpbmcgRm9udEZhbWlseVJhdyA9IFdURjo6VmFy
aWFudDxDU1NWYWx1ZUlELCBTdHJpbmc+OworCitzdHJ1Y3QgRm9udFJhdyB7CisgICAgT3B0aW9u
YWw8Rm9udFN0eWxlUmF3PiBzdHlsZTsKKyAgICBPcHRpb25hbDxDU1NWYWx1ZUlEPiB2YXJpYW50
Q2FwczsKKyAgICBPcHRpb25hbDxGb250V2VpZ2h0UmF3PiB3ZWlnaHQ7CisgICAgT3B0aW9uYWw8
Q1NTVmFsdWVJRD4gc3RyZXRjaDsKKyAgICBGb250U2l6ZVJhdyBzaXplOworICAgIE9wdGlvbmFs
PExpbmVIZWlnaHRSYXc+IGxpbmVIZWlnaHQ7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWlseVJh
dz4gZmFtaWx5OworfTsKKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50
Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29u
c3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0
aW9uYWw8Rm9udFdlaWdodFJhdz4gY29uc3VtZUZvbnRXZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZh
bHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1
bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9u
YWw8Rm9udFN0eWxlUmF3PiBjb25zdW1lRm9udFN0eWxlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJNb2RlKTsKK1N0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYpOworT3B0aW9uYWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0Zh
bWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxXVEY6OlZlY3RvcjxGb250
RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwor
T3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcyA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCk7CitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitPcHRpb25hbDxGb250UmF3
PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUpOworQXRvbVN0cmluZyBnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQp
OworCiAvLyBUZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGF0IHRoZSBib3R0b20gb2YgdGhl
IGZpbGUgZm9yIHJlYWRhYmlsaXR5LgogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBlbXB0eUJhc2VD
YXNlPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCkgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTEyMyw2ICsxNzIsMTMgQEAgdGVtcGxhdGU8Q1NTVmFsdWVJRCBoZWFkLCBDU1NWYWx1
ZUlELi4uIHRhaWw+IGlubGluZSBib29sIGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUkKICAgICByZXR1
cm4gaWQgPT0gaGVhZCB8fCBpZGVudE1hdGNoZXM8dGFpbC4uLj4oaWQpOwogfQogCit0ZW1wbGF0
ZTxDU1NWYWx1ZUlELi4uIG5hbWVzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50
eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVr
KCkuaWQoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKK30KKwogdGVtcGxhdGU8Q1NTVmFs
dWVJRC4uLiBuYW1lcz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkg
IT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQo
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAppbmRleCA4OTE4MDI3OWFmMmI3Zjc2NTZiY2RkZjhlZWMwODMzM2I2
NWM2MTQ4Li41NmIzY2U1OGNjYTI0M2RiNjA1MDA4ODQwZjdiY2JhMTJmODMwYmMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisj
aW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgpAQCAt
NDQsNyArNDUsOSBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKKyNpbmNsdWRl
ICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgi
CiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC0xMzQs
NiArMTM3LDExIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0
IFN0cmluZyYgbmV3Rm9udCkKICAgICBpZiAobmV3Rm9udCA9PSBzdGF0ZSgpLnVucGFyc2VkRm9u
dCAmJiBzdGF0ZSgpLmZvbnQucmVhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0
byBmb250UmF3ID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKG5ld0ZvbnQsIHN0cmlj
dFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOworICAg
IGlmICghZm9udFJhdykKKyAgICAgICAgcmV0dXJuOworCisjaWYgMAogICAgIGF1dG8gcGFyc2Vk
U3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUocGFyc2VkU3R5bGUsIENTU1Byb3BlcnR5Rm9udCwgbmV3Rm9udCwgdHJ1ZSwg
c3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7
CiAgICAgaWYgKHBhcnNlZFN0eWxlLT5pc0VtcHR5KCkpCkBAIC0xNDUsNyArMTUzLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250
KQogICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25v
cmVkLgogICAgIGlmIChmb250VmFsdWUgPT0gImluaGVyaXQiIHx8IGZvbnRWYWx1ZSA9PSAiaW5p
dGlhbCIpCiAgICAgICAgIHJldHVybjsKLQorI2VuZGlmCiAgICAgLy8gVGhlIHBhcnNlIHN1Y2Nl
ZWRlZC4KICAgICBTdHJpbmcgbmV3Rm9udFNhZmVDb3B5KG5ld0ZvbnQpOyAvLyBDcmVhdGUgYSBz
dHJpbmcgY29weSBzaW5jZSBuZXdGb250IGNhbiBiZSBkZWxldGVkIGluc2lkZSByZWFsaXplU2F2
ZXMuCiAgICAgcmVhbGl6ZVNhdmVzKCk7CkBAIC0xNTgsMzEgKzE2NiwyMDIgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZhcygpLmRvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQu
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCisgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb247CiAgICAgaWYgKGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBjYW52YXMoKS5jb21w
dXRlZFN0eWxlKCkpCi0gICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oRm9udENh
c2NhZGVEZXNjcmlwdGlvbiB7IGNvbXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpIH0pOwor
ICAgICAgICBmb250RGVzY3JpcHRpb24gPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsgY29tcHV0
ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgfTsKICAgICBlbHNlIHsKLSAgICAgICAgRm9udENh
c2NhZGVEZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOwotICAgICAgICBkZWZhdWx0
Rm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShEZWZhdWx0Rm9udEZhbWlseSk7Ci0gICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShEZWZhdWx0Rm9udFNpemUp
OwotICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShEZWZhdWx0
Rm9udFNpemUpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KERlZmF1bHRG
b250RmFtaWx5KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVm
YXVsdEZvbnRTaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShE
ZWZhdWx0Rm9udFNpemUpOworICAgIH0KIAotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZGVmYXVsdEZvbnREZXNjcmlwdGlvbikpOworICAgIC8vIE5vdyBtYXAg
dGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIGZsb2F0IHBh
cmVudFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOworCisgICAgLy8gRm9u
dCBmYW1pbHkKKyAgICAvLyBGSVhNRTogTW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5CisgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4g
YSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBm
YW1pbHkuCisgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCk7CisKKyAgICBWZWN0b3I8QXRvbVN0cmluZz4g
ZmFtaWxpZXM7CisgICAgZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LT5m
YW1pbHkuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgaXRlbSA6IGZvbnRSYXctPmZhbWlseSkg
eworICAgICAgICBBdG9tU3RyaW5nIGZhbWlseTsKKyAgICAgICAgYm9vbCBpc0dlbmVyaWNGYW1p
bHkgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50
KSB7CisgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtp
dEJvZHk7CisgICAgICAgICAgICBmYW1pbHkgPSBpc0dlbmVyaWNGYW1pbHkgPworICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFs
dWVJRChpZGVudCkgOgorICAgICAgICAgICAgICAgIGRvY3VtZW50LnNldHRpbmdzKCkuc3RhbmRh
cmRGb250RmFtaWx5KCk7CisgICAgICAgIH0sIFsmXSAoY29uc3QgU3RyaW5nJiBmYW1pbHlTdHJp
bmcpIHsKKyAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseVN0cmluZzsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc1NwZWNpZmllZEZvbnQoIWlzR2VuZXJpY0ZhbWlseSk7CisgICAgICAgIGZhbWlsaWVz
LnVuY2hlY2tlZEFwcGVuZChmYW1pbHkpOwogICAgIH0KIAotICAgIG5ld1N0eWxlLT5mb250Q2Fz
Y2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworICAgIGlmIChmYW1pbGll
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFt
aWxpZXMoZmFtaWxpZXMpOwogCi0gICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25n
aGFuZHMgaW50byB0aGUgc3R5bGUuCisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERl
ZmF1bHRTaXplKCkgIT0gb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKKyAgICAgICAg
aWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNp
emVBc0lkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgYXV0byBzaXplID0gU3R5bGU6OmZvbnRT
aXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRT
aXplLCBkb2N1bWVudCk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVk
U2l6ZShzaXplKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
U3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3Jp
cHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZmFsc2UsIG5ld1N0eWxlLmdldCgpLCBkb2N1bWVudCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRm9udCBzdHlsZQorICAgIC8vIEZJWE1FOiBN
b3N0bHkgZHVwbGljYXRlZCBmcm9tIEJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5bGVG
cm9tVmFsdWUKKyAgICBpZiAoZm9udFJhdy0+c3R5bGUpIHsKKyAgICAgICAgc3dpdGNoIChmb250
UmF3LT5zdHlsZS0+c3R5bGUpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGl0YWxpY1ZhbHVlKCkpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU9ibGlxdWU6CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRTZWxlY3Rpb25WYWx1ZShzdGF0aWNfY2FzdDxmbG9h
dD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGZvbnRSYXctPnN0eWxlLT5hbmds
ZS50eXBlLCBmb250UmF3LT5zdHlsZS0+YW5nbGUudmFsdWUpKSkpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTdHlsZUF4aXMoKGZvbnRSYXctPnN0eWxlICYmIGZvbnRSYXctPnN0eWxlLT5z
dHlsZSA9PSBDU1NWYWx1ZUl0YWxpYykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxl
QXhpczo6c2xudCk7CisKKyAgICAvLyBGb250IHZhcmlhbnQgY2FwcworICAgIGlmIChmb250UmF3
LT52YXJpYW50Q2FwcykgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBtdXN0IGJlIGRlZmluZWQg
c29tZXdoZXJlLi4uCisgICAgICAgIHN3aXRjaCAoKmZvbnRSYXctPnZhcmlhbnRDYXBzKSB7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpTbWFsbCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2FwczoKKyAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OkFsbFNt
YWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlUGV0aXRlQ2Fw
czoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFu
dENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUFsbFBldGl0ZUNhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENh
cHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRpdGxpbmdDYXBzOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBGb250IHdlaWdodAorICAgIGlmIChmb250UmF3LT53ZWlnaHQpIHsKKyAgICAgICAgYXV0byB3
ZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy0+d2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbFdlaWdodFZhbHVlKCk7Cisg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYm9s
ZFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgorICAgICAg
ICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpib2xkZXJXZWlnaHQoZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVy
OgorICAgICAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVy
V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSk7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9LCBbJl0g
KGRvdWJsZSB3ZWlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWU6
OmNsYW1wRmxvYXQod2VpZ2h0KTsKKyAgICAgICAgfSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRXZWlnaHQod2VpZ2h0KTsKKyAgICB9CisKKyAgICAvLyBGb250IHNpemUKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQp
OworICAgIGZsb2F0IHNpemUgPSBzd2l0Y2hPbihmb250UmF3LT5zaXplLCBbJl0gKENTU1ZhbHVl
SUQgaWRlbnQpIHsKKyAgICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICBjYXNlIENTU1Zh
bHVlWHhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZVNtYWxsOgorICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICBjYXNl
IENTU1ZhbHVlTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVYeExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6
CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmll
cihpZGVudCk7CisgICAgICAgICAgICByZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChp
ZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1lbnQpOwor
ICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgorICAgICAgICAgICAgcmV0dXJuIHBhcmVudFNp
emUgKiAxLjJmOworICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgIHJl
dHVybiBwYXJlbnRTaXplIC8gMS4yZjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiAwLmY7CisgICAgICAgIH0KKyAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TGVuZ3RoT3JQZXJjZW50JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAgICAgcmV0
dXJuIHN3aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6Okxlbmd0aCYgbGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUGFyZW50
IHN0eWxlIGlzIG9ubHkgdXNlZCBmb3IgbGluZS1oZWlnaHQgLSBkbyB3ZSBuZWVkIHRvIHNwZWNp
ZnkgaXQgaGVyZT8KKyAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVy
c2lvbkRhdGEgeyBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgbnVsbHB0
ciwgZG9jdW1lbnQucmVuZGVyVmlldygpLCAxLjBmLCBDU1NQcm9wZXJ0eUZvbnRTaXplIH07Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpj
b21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSwgbGVuZ3RoLnR5cGUsIGxl
bmd0aC52YWx1ZSkpOworICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAg
ICAgICAgICByZXR1cm4gKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC5mOworICAgICAg
ICB9KTsKKyAgICB9KTsKKworICAgIGlmIChzaXplID4gMCkgeworICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShzaXplKTsKKyAgICB9CisKKyAgICAvLyBMaW5lIGhlaWdodAorICAgIGlm
IChmb250UmF3LT5saW5lSGVpZ2h0KSB7CisgICAgICAgIE9wdGlvbmFsPExlbmd0aD4gbGluZUhl
aWdodCA9IHN3aXRjaE9uKCpmb250UmF3LT5saW5lSGVpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRl
bnQpIHsKKyAgICAgICAgICAgIGlmIChpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihXVEY6Om51bGxv
cHQpOworICAgICAgICB9LCBbJl0gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBPcHRpb25hbDxMZW5ndGg+KExlbmd0aChudW1iZXIgKiAxMDAuMCwgUGVyY2VudCkpOworICAg
ICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJj
ZW50JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5n
dGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGgm
IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29u
dmVyc2lvbkRhdGEgeyBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgbnVs
bHB0ciwgZG9jdW1lbnQucmVuZGVyVmlldygpLCAxLjBmLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQg
fTsKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgoY2xhbXBU
bzxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKGNv
bnZlcnNpb25EYXRhLCBsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlKSwgbWluVmFsdWVGb3JDc3NM
ZW5ndGgsIG1heFZhbHVlRm9yQ3NzTGVuZ3RoKSwgRml4ZWQpKTsKKyAgICAgICAgICAgIH0sIFsm
XSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8
TGVuZ3RoPihMZW5ndGgoKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHN0YXRpY19j
YXN0PGludD4ocGVyY2VudGFnZSkpIC8gMTAwLCBGaXhlZCkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIGlmIChsaW5lSGVpZ2h0KQorICAgICAgICAgICAgbmV3U3R5
bGUtPnNldExpbmVIZWlnaHQoV1RGTW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkpKTsKKyAgICB9CisK
KyAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7CisgICAgbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2Vs
ZWN0b3IoKSk7CisjaWYgMAogICAgIFN0eWxlOjpNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAg
ICBhdXRvIHBhcmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCpuZXdTdHlsZSk7CiAgICAg
U3R5bGU6OkJ1aWxkZXIgc3R5bGVCdWlsZGVyKCpuZXdTdHlsZSwgeyBkb2N1bWVudCwgcGFyZW50
U3R5bGUgfSwgbWF0Y2hSZXN1bHQsIHsgfSk7Ci0KICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9w
ZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVy
LmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKICAgICBzdHls
ZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBw
YXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2Fw
cykuZ2V0KCkpOwogICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVy
dHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQpLmdldCgpKTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVl
KENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0
eVZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisjZW5kaWYKIAogICAgIG1vZGlm
aWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKm5l
d1N0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5k
ZXggYjYzZDVmZGY5YzE1ZTJiM2Q2NjBkZmI4MDIwNzc3ZTUxNzgxZTIzYi4uNWU4ZDE4Y2JjYjVk
NjMyN2QwZmZmZTgzYjlhNDhiNjE4NTAzNmU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NGb250VmFs
dWUuaCIKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTR3JpZFRl
bXBsYXRlQXJlYXNWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
IgogI2luY2x1ZGUgIkNTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNT
U1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgpAQCAtOTg4LDQwICs5ODksMTEg
QEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1YKICAgICAgICAgICAgIC8vIElmIHRoZSBmYW1pbHkg
bmFtZSB3YXMgcmVzb2x2ZWQgYnkgdGhlIENTUyBwYXJzZXIgZnJvbSBhIHN5c3RlbSBmb250IElE
LCB0aGVuIGl0IGlzIGdlbmVyaWMuCiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBmb250
RmFtaWx5LmZyb21TeXN0ZW1Gb250SUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRCb2R5OgorICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVXZWJraXRCb2R5KSB7CiAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYnVpbGRlclN0
YXRlLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKLSAgICAgICAg
ICAgICAgICBmYW1pbHkgPSBzZXJpZkZhbWlseTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5ID0gc2Fuc1NlcmlmRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWls
eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Zh
bHVlQ3Vyc2l2ZToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBjdXJzaXZlRmFtaWx5OwotICAg
ICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICBm
YW1pbHkgPSBmYW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
TW9ub3NwYWNlOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IG1vbm9zcGFjZUZhbWlseTsKLSAg
ICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6Ci0gICAgICAg
ICAgICAgICAgZmFtaWx5ID0gcGljdG9ncmFwaEZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dl
bmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVN5c3RlbVVpOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHN5c3RlbVVp
RmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGZhbWlseSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Z2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChjb250ZW50VmFsdWUudmFsdWVJRCgpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCg==
</data>
<flag name="commit-queue"
          id="425302"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409557</attachid>
            <date>2020-09-24 04:53:27 -0700</date>
            <delta_ts>2020-09-24 06:42:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200924125326.patch</filename>
            <type>text/plain</type>
            <size>49651</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKaW5kZXggNmM2MmQ0YjJlMzk3ZWFlNmU4YTNiYTYwNzA0YTZhMjQyZWE3ZWRhZi4u
ZjJhZDEyYzA5ZmY0ZDZmYTUwNzc1ZTJmOTgyMDRhY2ZhOWY5MWJlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTM4LDYgKzEzOCwxNSBAQCBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsK
IH0KIAorT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKK30KKwogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IDllMDEwNGFmOTZkOTUzYjQwNzdmMzJi
MWE3NzkxZmNhM2QwZDI5MGIuLjkyNTg5YmY2OTU3ODBhYjc5NzUyOTg3YTQ0NGRiYTc5OTIwNWM3
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtNDMsNiArNDMsMTAg
QEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3Mg
QnVpbGRlclN0YXRlOwogfQpAQCAtOTEsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcp
OwogCisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dz4gcGFyc2VGb250V29ya2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRN
TFN0YW5kYXJkTW9kZSk7CisKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCmluZGV4IGU0MDRkNDhlZjhmZmYyZWI5Zjk2Mzg3OWZjNjFlZDIyODVmZTAz
ZjkuLmQ3N2U3MGQxYzlhNmIwNWFlMzY4MzIzNWI0NmZkZDRkYTJmNWIxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNT
U1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgpAQCAtODYxLDE2ICs4NjAsMTUgQEAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmEKICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBD
U1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NW
YWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKLX0KLQog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gc3dpdGNo
T24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQp
OworICAgICAgICB9LCBbXSAoZG91YmxlIHdlaWdodE51bWJlcikgeworICAgICAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUod2VpZ2h0TnVtYmVyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dEFic29sdXRlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtOTA3
LDcgKzkwNSw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIAogc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVVbHRy
YUNvbmRlbnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENT
U1ZhbHVlU2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVk
LCBDU1NWYWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFF
eHBhbmRlZD4ocmFuZ2UpOworICAgIGlmIChhdXRvIHZhbHVlSUQgPSBjb25zdW1lRm9udFN0cmV0
Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTk2MiwyNiArOTYy
LDE1IEBAIHN0YXRpYyBib29sIGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoZmxvYXQgb2JsaXF1ZSkK
IAogc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewot
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5nZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1
ZUlEID0gcmVzdWx0LT52YWx1ZUlEKCk7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYykKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRT
dHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCkpOwotICAgIEFTU0VSVChyZXN1bHQtPnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU9ibGlxdWUpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1l
QW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZm9udFN0eWxl
SXNXaXRoaW5SYW5nZShhbmdsZS0+dmFsdWU8ZmxvYXQ+KENTU1VuaXRUeXBlOjpDU1NfREVHKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVl
KSwgV1RGTW92ZShhbmdsZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlKQorICAgICAgICAgICAgcmV0
dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT5hbmdsZS52YWx1ZSwgcmVzdWx0LT5hbmdsZS50eXBlKSk7CiAjZW5k
aWYKLSAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAg
ICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE1
LDMzICsxMDA0LDExIEBAIHN0YXRpYyBSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29u
c3VtZUZvbnRTdHlsZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmCiB9CiAjZW5kaWYKIAotc3Rh
dGljIFN0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJvb2wgYWRkZWRTcGFjZSA9
IGZhbHNlOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVl
aygpOwotICAgIHdoaWxlIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKLSAgICAgICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKSk7Ci0gICAgfQotICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZp
cnN0VG9rZW4uaWQoKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFt
aWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0cmluZygpKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5
cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTdHJpbmcg
ZmFtaWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7Ci0gICAgaWYgKGZhbWls
eU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsK
KyAgICBpZiAoYXV0byBmYW1pbHlOYW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpKQor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5
VmFsdWUoKmZhbWlseU5hbWUpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJpY0ZhbWlseShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTExNDksMTMgKzExMTYsMTkgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUZvbnRTaXplKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2QKIAog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxpbmVIZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAg
ICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgIHJldHVy
biBjb25zdW1lSWRlbnQocmFuZ2UpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0ID0gY29uc3VtZU51bWJlcihyYW5nZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
LSAgICBpZiAobGluZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGxpbmVIZWlnaHQ7Ci0gICAgcmV0
dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSk7CisgICAgaWYgKGF1dG8gbGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVp
Z2h0UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24oKmxpbmVIZWlnaHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZUlEKTsKKyAgICAgICAgfSwgW10gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVIpOworICAgICAgICB9LCBbXSAoTGVuZ3RoT3JQZXJjZW50IGxlbmd0aE9y
UGVyY2VudCkgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obGVuZ3RoT3JQZXJj
ZW50LCBbXSAoQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGggbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUo
bGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAgICAgICAgICB9LCBbXSAoZG91YmxlIHBl
cmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0Up
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oCmluZGV4IGI3ZTE5ZmJkNjRhNzhjMGY3ZDU5YzcxNDg3ZDc5
NjZlN2EwYjA5OWUuLjA3OTE3MzVhYWRlYWViNTE4MGEwYTM0NTU1MDg2ZGU1YTA3YmMwNDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKQEAgLTIy
LDYgKzIyLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
CmluZGV4IDY5NThhNjYyNzhjOTU4ZGQxZTYyOTM0ZThkMDkzNWJhNGViZDNiOWMuLjFjZmYzYWFh
MDI2NGQyYmQyNWRlMjE1NWJlYTM3NDlkMzFkYTBhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTEyOCwx
MCArMTI4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
T3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdygpCisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBjb25zdW1lUGVyY2VudFJhdyhib29sIGFsbG93UGVyY2VudE9mID0gZmFsc2UpCiAgICAgewot
ICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCisgICAgICAgIGlmICghbV9jYWxjVmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBhdXRvIGNhdGVnb3J5ID0g
bV9jYWxjVmFsdWUtPmNhdGVnb3J5KCk7CisgICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50KSB7CisgICAgICAgICAgICBpZiAoIWFsbG93UGVyY2VudE9m
IHx8CisgICAgICAgICAgICAgICAgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnRMZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgfQogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKICAgICAg
ICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOwogICAgIH0KQEAgLTE0NCw2ICsx
NTEsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRp
dmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKICAgICB9CiAKKyAgICBP
cHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5ndGhSYXcoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBt
X3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKKyAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+
cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CisgICAgfQor
CiBwcml2YXRlOgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBtX3JhbmdlOwpAQCAtMTc3LDEwICsxOTIsMTIgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBjb25zdW1lSW50ZWdlcihyYW5nZSwgMSk7CiB9CiAK
LWJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91Ymxl
JiByZXN1bHQpCitib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pIHsKKyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5n
ZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTg4LDcgKzIwNSw3IEBAIGJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgZG91YmxlJiByZXN1bHQpCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlv
blRva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7Cisg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIsIHZhbHVlUmFuZ2UpOwogICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXco
cmVzdWx0KTsKIH0KIApAQCAtMTk2LDIyICsyMTMsMTkgQEAgYm9vbCBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7
Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tl
bi5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdG9rZW4udW5pdFR5cGUo
KSk7Ci0gICAgfQotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2Vy
IGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGNWYWx1ZSA9IGNhbGNQYXJz
ZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1Zh
bHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgIGlmIChjYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwogICAg
IH0KIAorICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2Us
IG51bWJlciwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5pdFR5cGUoKSk7CisKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIApAQCAtMjIyLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBk
aXZpc2libGVCeTEwMChkb3VibGUgdmFsdWUpCiB9CiAjZW5kaWYKIAotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVh
bCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMu
CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CkBAIC0yMzAsMTEgKzI0NCwxNSBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQogI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogICAgICAg
ICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZp
c2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFsdWUoKSkKICNlbmRpZgotICAgICkKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXIocmFuZ2UsIFZhbHVlUmFuZ2VBbGwpOworICAgICkgeworICAg
ICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2Vu
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFu
IGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0
YXJnZXQgY29udGV4dC4iCiAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2VBbGwpOwpAQCAtMjQ1LDkgKzI2MywxNiBA
QCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KHJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6
bmV4dGFmdGVyKDEwMDAuLCAwLikpOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yNTksMTQgKzI4NCwxNCBAQCBpbmxp
bmUgYm9vbCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLAogICAgICAgICB8fCAoY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVp
cmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyk7CiB9CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5ndGhS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9k
ZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewogICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9r
ZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAgICAgICAgIHN3aXRjaCAodG9rZW4udW5p
dFR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKICAg
ICAgICAgICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VNUzoKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CkBAIC0yODcsMjggKzMx
MiwzOSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZAogICAgICAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
ICAgICB9CiAgICAgICAgIGlmICgodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUg
JiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKSB8fCBzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNW
YWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgdG9rZW4udW5pdFR5
cGUoKSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9
IH07CiAgICAgfQogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKICAgICAg
ICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCBj
c3NQYXJzZXJNb2RlLCB1bml0bGVzcykKICAgICAgICAgICAgIHx8ICh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQ1NTVW5pdFR5cGUgdW5pdFR5cGUgPSBDU1NVbml0
VHlwZTo6Q1NTX1BYOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1
ZSgpLCB1bml0VHlwZSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwogICAgIH0KIAogICAgIGlmICh0b2tlbi50
eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNhbGNQ
YXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1l
VmFsdWUoKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoUmF3KCk7Cit9CisK
K1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9r
ZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rp
b25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjYWxjUGFyc2Vy
LnZhbHVlKCkgJiYgY2FsY1BhcnNlci52YWx1ZSgpLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVW
YWx1ZSgpOworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmVzdWx0LT52YWx1ZSwg
cmVzdWx0LT50eXBlKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzMzLDcgKzM2OSw3
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRv
a2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwogICAg
ICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFs
dWUoKSkgewogICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJz
ZXIuY29uc3VtZVZhbHVlKCk7CkBAIC0zNjEsMjIgKzM5Nyw1NiBAQCBzdGF0aWMgYm9vbCBjYW5D
b25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENTU1BhcnNlck1v
ZGUgY3NzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0aE9yUGVyY2VudD4gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51
bWJlclRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2Vy
TW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVy
Y2VudGFnZVRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVl
UmFuZ2UpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4u
dHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkK
KyAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsK
KyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVl
UmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25U
b2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CiAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2Fs
Y3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbkNvbnN1bWVD
YWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGlmIChjYW5D
b25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJNb2RlKSkg
eworICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNh
bGNQYXJzZXIuY29uc3VtZUxlbmd0aFJhdygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyAqcmVzdWx0IH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNhbGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcodHJ1ZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4p
IHsKKyAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVl
KiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNh
bkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZh
bHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtd
IChMZW5ndGggbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAg
ICAgICAgICB9LCBbXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NV
bml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgfSk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKQEAgLTUwMiwxMSArNTcyLDI1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJl
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlm
IChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQg
dXBwZXIpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVl
aygpLmlkKCkgPiB1cHBlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gY29uc3VtZUlkZW50UmF3KHJhbmdlKTsKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJ
RCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKQEAgLTE4MDMsNiArMTg4NywyMjUgQEAgUmVmUHRy
PENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1Bh
cnNlckNvbnRleHQgY29udGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NT
VmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NT
VmFsdWVTbWFsbENhcHM+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7
CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xk
LCBDU1NWYWx1ZUJvbGRlciwgQ1NTVmFsdWVMaWdodGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFs
PEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29y
ZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAg
cmV0dXJuIHsgKnJlc3VsdCB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlv
bmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1Zh
bHVlVWx0cmFDb25kZW5zZWQsIENTU1ZhbHVlRXh0cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVu
c2VkLCBDU1NWYWx1ZVNlbWlDb25kZW5zZWQsIENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlF
eHBhbmRlZCwgQ1NTVmFsdWVFeHBhbmRlZCwgQ1NTVmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1
ZVVsdHJhRXhwYW5kZWQ+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sK
KyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxp
YywgQ1NTVmFsdWVPYmxpcXVlPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4g
Y29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHls
ZUtleXdvcmRWYWx1ZVJhdyhyYW5nZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGlkZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRl
bnQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWRlbnQgPT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAg
IHJldHVybiB7IHsgaWRlbnQsIHsgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIDAuMCB9IH0gfTsKKyAg
ICBBU1NFUlQoaWRlbnQgPT0gQ1NTVmFsdWVPYmxpcXVlKTsKKyNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQorICAgIGlmICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBpZiAoYXV0byBhbmds
ZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8gYW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMo
YW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7CisgICAgICAgICAgICBpZiAoZm9udFN0eWxlSXNX
aXRoaW5SYW5nZShhbmdsZUluRGVncmVlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBD
U1NWYWx1ZU9ibGlxdWUsICphbmdsZSB9IH07CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2Vy
TW9kZSk7CisjZW5kaWYKKyAgICByZXR1cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgeyBDU1NVbml0
VHlwZTo6Q1NTX0RFRywgMC4wIH0gfSB9OworfQorCitTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlO
YW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKKyAgICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKKyAgICBjb25zdCBDU1NQYXJzZXJU
b2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB3aGlsZSAocmFuZ2UucGVlaygp
LnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBhZGRlZFNw
YWNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZChyYW5nZS5jb25z
dW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWFkZGVk
U3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlkKCkpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworT3B0aW9u
YWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKKyAgICAg
ICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0
cmluZygpOworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25jYXRl
bmF0ZUZhbWlseU5hbWUocmFuZ2UpOworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmYW1pbHlOYW1lOworfQorCitP
cHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmFuZ2VSYXcocmFuZ2Us
IENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlV2Via2l0Qm9keSk7Cit9CisKK09wdGlvbmFsPFdURjo6
VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBjb25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICBXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3PiBsaXN0Owor
ICAgIGRvIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lR2VuZXJpY0ZhbWlseVJh
dyhyYW5nZSkpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh7ICppZGVudCB9KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byBzdHJpbmcgPSBjb25zdW1lRmFtaWx5TmFtZVJh
dyhyYW5nZSkpCisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqc3RyaW5nIH0pOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgIH0KKyAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdl
KSk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK09wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1l
Rm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBpZiAocmFuZ2UucGVl
aygpLmlkKCkgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIHJhbmdlLnBlZWsoKS5pZCgpIDw9IENTU1Zh
bHVlTGFyZ2VyKSB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3KHJh
bmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7ICppZGVudCB9OworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhP
clBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSwg
dW5pdGxlc3MpKQorICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworfQorCitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdo
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewor
ICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAg
ICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBkb3VibGUgbnVtYmVyOworICAgIGlmIChjb25zdW1lTnVtYmVyUmF3KHJhbmdl
LCBudW1iZXIsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB7IG51bWJl
ciB9OworCisgICAgaWYgKGF1dG8gbGVuZ3RoT3JQZXJjZW50ID0gY29uc3VtZUxlbmd0aE9yUGVy
Y2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkKKyAg
ICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OworCisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKK30KKworT3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7Cisg
ICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNvbWV3
aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgorICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VDb3B5
ID0gcmFuZ2U7CisgICAgd2hpbGUgKCFyYW5nZUNvcHkuYXRFbmQoKSkgeworICAgICAgICBDU1NW
YWx1ZUlEIGlkID0gcmFuZ2VDb3B5LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsK
KyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUluaXRp
YWwpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIEZvbnRS
YXcgcmVzdWx0OworCisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CisgICAgICAgIENTU1Zh
bHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuaWQoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc3R5bGUp
IHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0eWxlID0gY29uc3VtZUZvbnRTdHlsZVJhdyhy
YW5nZSwgY3NzUGFyc2VyTW9kZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmICghcmVzdWx0LnZhcmlhbnRDYXBzICYmIChpZCA9PSBDU1NWYWx1ZU5v
cm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcykpIHsKKyAgICAgICAgICAgIC8vIEZvbnQg
dmFyaWFudCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhcnRpY3VsYXIsIGl0IG9ubHkgYWNjZXB0cyBu
b3JtYWwgb3Igc21hbGwtY2Fwcy4KKyAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2RyYWZ0cy5j
c3N3Zy5vcmcvY3NzLWZvbnRzLyNwcm9wZGVmLWZvbnQKKyAgICAgICAgICAgIGlmICgocmVzdWx0
LnZhcmlhbnRDYXBzID0gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcocmFuZ2UpKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdC53ZWln
aHQpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LndlaWdodCA9IGNvbnN1bWVGb250V2VpZ2h0
UmF3KHJhbmdlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFyZXN1bHQuc3RyZXRjaCkgeworICAgICAgICAgICAgaWYgKChyZXN1bHQuc3RyZXRj
aCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhyYW5nZSkpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
Ly8gTm93IGEgZm9udCBzaXplIF9tdXN0XyBjb21lLgorICAgIGlmIChhdXRvIHNpemUgPSBjb25z
dW1lRm9udFNpemVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICByZXN1bHQuc2l6
ZSA9ICpzaXplOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
aWYgKGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKSB7CisgICAgICAgIGlm
ICghKHJlc3VsdC5saW5lSGVpZ2h0ID0gY29uc3VtZUxpbmVIZWlnaHRSYXcocmFuZ2UsIGNzc1Bh
cnNlck1vZGUpKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisg
ICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KKyAgICBpZiAoYXV0byBmYW1pbHkgPSBj
b25zdW1lRm9udEZhbWlseVJhdyhyYW5nZSkpCisgICAgICAgIHJlc3VsdC5mYW1pbHkgPSAqZmFt
aWx5OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK0F0b21TdHJpbmcgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChD
U1NWYWx1ZUlEIGlkZW50KQoreworICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICBjYXNlIENTU1Zh
bHVlU2VyaWY6CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVl
U2Fuc1NlcmlmOgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2UgQ1NT
VmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseTsKKyAgICBjYXNlIENT
U1ZhbHVlRmFudGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHk7CisgICAgY2FzZSBD
U1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKKyAgICBj
YXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhG
YW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVN5c3RlbVVpOgorICAgICAgICByZXR1cm4gc3lzdGVt
VWlGYW1pbHk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVycwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaAppbmRleCBhODdiZDIwYWEyYTUyMzYxNGJkMzgzYmMwODM1NzQ0ODRm
YTQwNmJiLi43ZGJlODY1MzA0NzYzOGJlYmRlNjUwNjhlZGJjODI3ODY3ZjA4NDJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmgKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRl
ICJMZW5ndGguaCIgLy8gRm9yIFZhbHVlUmFuZ2UKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMjMgKzYyLDM2IEBAIHN0cnVjdCBBbmdsZSB7CiAg
ICAgZG91YmxlIHZhbHVlOwogfTsKIAorc3RydWN0IExlbmd0aCB7CisgICAgQ1NTVW5pdFR5cGUg
dHlwZTsKKyAgICBkb3VibGUgdmFsdWU7Cit9OworCit1c2luZyBMZW5ndGhPclBlcmNlbnQgPSBX
VEY6OlZhcmlhbnQ8TGVuZ3RoLCBkb3VibGU+OworCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUgbWluaW11bVZhbHVl
ID0gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwogUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
LWJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1
bHQpOworYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUm
IHJlc3VsdCwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpOwogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsK
K09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxMZW5ndGg+IGNvbnN1bWVMZW5n
dGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVu
aXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIE9w
dGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZh
bHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworT3B0aW9uYWw8
TGVuZ3RoT3JQZXJjZW50PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0
aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7Ci1PcHRpb25hbDxBbmds
ZT4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrKTsKK09wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJr
OjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1
aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWly
ayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBBbGxvd1hSZXNvbHV0aW9uVW5p
dCA9IEFsbG93WFJlc29sdXRpb25Vbml0OjpGb3JiaWQpOwogCitPcHRpb25hbDxDU1NWYWx1ZUlE
PiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8
Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBs
b3dlciwgQ1NTVmFsdWVJRCB1cHBlcik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlE
Li4uPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7Cit0ZW1wbGF0ZTxD
U1NWYWx1ZUlELi4uIGFsbG93ZWRJZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJ
ZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFs
bG93ZWRJZGVudHM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1Bh
cnNlclRva2VuUmFuZ2UmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ3Vz
dG9tSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpAQCAtMTE1LDYgKzEzMCw0MCBAQCBlbnVt
IGNsYXNzIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1l
RmlsdGVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQWxs
b3dlZEZpbHRlckZ1bmN0aW9ucyk7CiBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5n
bGVTaGFkb3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWxsb3dJ
bnNldCwgYm9vbCBhbGxvd1NwcmVhZCk7CiAKK3N0cnVjdCBGb250U3R5bGVSYXcgeworICAgIENT
U1ZhbHVlSUQgc3R5bGU7CisgICAgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpBbmdsZSBhbmds
ZTsKK307Cit1c2luZyBGb250V2VpZ2h0UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRv
dWJsZT47Cit1c2luZyBGb250U2l6ZVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudD47Cit1c2luZyBMaW5lSGVpZ2h0
UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRvdWJsZSwgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpMZW5ndGhPclBlcmNlbnQ+OwordXNpbmcgRm9udEZhbWlseVJhdyA9IFdURjo6VmFy
aWFudDxDU1NWYWx1ZUlELCBTdHJpbmc+OworCitzdHJ1Y3QgRm9udFJhdyB7CisgICAgT3B0aW9u
YWw8Rm9udFN0eWxlUmF3PiBzdHlsZTsKKyAgICBPcHRpb25hbDxDU1NWYWx1ZUlEPiB2YXJpYW50
Q2FwczsKKyAgICBPcHRpb25hbDxGb250V2VpZ2h0UmF3PiB3ZWlnaHQ7CisgICAgT3B0aW9uYWw8
Q1NTVmFsdWVJRD4gc3RyZXRjaDsKKyAgICBGb250U2l6ZVJhdyBzaXplOworICAgIE9wdGlvbmFs
PExpbmVIZWlnaHRSYXc+IGxpbmVIZWlnaHQ7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWlseVJh
dz4gZmFtaWx5OworfTsKKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50
Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29u
c3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0
aW9uYWw8Rm9udFdlaWdodFJhdz4gY29uc3VtZUZvbnRXZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZh
bHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1
bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9u
YWw8Rm9udFN0eWxlUmF3PiBjb25zdW1lRm9udFN0eWxlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NQYXJzZXJNb2RlKTsKK1N0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYpOworT3B0aW9uYWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0Zh
bWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxXVEY6OlZlY3RvcjxGb250
RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwor
T3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcyA9IFVuaXRsZXNzUXVp
cms6OkZvcmJpZCk7CitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitPcHRpb25hbDxGb250UmF3
PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUpOworQXRvbVN0cmluZyBnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQp
OworCiAvLyBUZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGF0IHRoZSBib3R0b20gb2YgdGhl
IGZpbGUgZm9yIHJlYWRhYmlsaXR5LgogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBlbXB0eUJhc2VD
YXNlPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCkgeyByZXR1cm4gZmFsc2U7
IH0KQEAgLTEyMyw2ICsxNzIsMTMgQEAgdGVtcGxhdGU8Q1NTVmFsdWVJRCBoZWFkLCBDU1NWYWx1
ZUlELi4uIHRhaWw+IGlubGluZSBib29sIGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUkKICAgICByZXR1
cm4gaWQgPT0gaGVhZCB8fCBpZGVudE1hdGNoZXM8dGFpbC4uLj4oaWQpOwogfQogCit0ZW1wbGF0
ZTxDU1NWYWx1ZUlELi4uIG5hbWVzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRS
YXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50
eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVr
KCkuaWQoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKK30KKwogdGVtcGxhdGU8Q1NTVmFs
dWVJRC4uLiBuYW1lcz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkg
IT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQo
KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAppbmRleCA4OTE4MDI3OWFmMmI3Zjc2NTZiY2RkZjhlZWMwODMzM2I2
NWM2MTQ4Li5jYWNiOWEyODVjODlkZWRhM2MwYWI3NDIwODI4NWRjMGNmYzdmZmIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKQEAgLTM2LDE1ICszNiwyMCBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5o
IgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlICJQYXRoMkQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJp
Y3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC0xMzQsNiArMTM5LDExIEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAg
ICBpZiAobmV3Rm9udCA9PSBzdGF0ZSgpLnVucGFyc2VkRm9udCAmJiBzdGF0ZSgpLmZvbnQucmVh
bGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBmb250UmF3ID0gQ1NTUGFyc2Vy
OjpwYXJzZUZvbnRXb3JrZXJTYWZlKG5ld0ZvbnQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91
c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOworICAgIGlmICghZm9udFJhdykKKyAgICAg
ICAgcmV0dXJuOworCisjaWYgMAogICAgIGF1dG8gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBDU1NQYXJzZXI6OnBhcnNlVmFsdWUocGFyc2VkU3R5
bGUsIENTU1Byb3BlcnR5Rm9udCwgbmV3Rm9udCwgdHJ1ZSwgc3RyaWN0VG9DU1NQYXJzZXJNb2Rl
KCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CiAgICAgaWYgKHBhcnNlZFN0eWxl
LT5pc0VtcHR5KCkpCkBAIC0xNDUsNyArMTU1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAgIC8vIHRoZSAiaW5oZXJp
dCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLgogICAgIGlmIChmb250VmFs
dWUgPT0gImluaGVyaXQiIHx8IGZvbnRWYWx1ZSA9PSAiaW5pdGlhbCIpCiAgICAgICAgIHJldHVy
bjsKLQorI2VuZGlmCiAgICAgLy8gVGhlIHBhcnNlIHN1Y2NlZWRlZC4KICAgICBTdHJpbmcgbmV3
Rm9udFNhZmVDb3B5KG5ld0ZvbnQpOyAvLyBDcmVhdGUgYSBzdHJpbmcgY29weSBzaW5jZSBuZXdG
b250IGNhbiBiZSBkZWxldGVkIGluc2lkZSByZWFsaXplU2F2ZXMuCiAgICAgcmVhbGl6ZVNhdmVz
KCk7CkBAIC0xNTgsMzEgKzE2OCwyMDIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IGNhbnZhcygpLmRvY3VtZW50KCk7CiAgICAgZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogCisgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgaWYg
KGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBjYW52YXMoKS5jb21wdXRlZFN0eWxlKCkpCi0gICAgICAg
IG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNv
bXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpIH0pOworICAgICAgICBmb250RGVzY3JpcHRp
b24gPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsgY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0
aW9uKCkgfTsKICAgICBlbHNlIHsKLSAgICAgICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBkZWZh
dWx0Rm9udERlc2NyaXB0aW9uOwotICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldE9u
ZUZhbWlseShEZWZhdWx0Rm9udEZhbWlseSk7Ci0gICAgICAgIGRlZmF1bHRGb250RGVzY3JpcHRp
b24uc2V0U3BlY2lmaWVkU2l6ZShEZWZhdWx0Rm9udFNpemUpOwotICAgICAgICBkZWZhdWx0Rm9u
dERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShEZWZhdWx0Rm9udFNpemUpOworICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKKyAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShEZWZhdWx0Rm9udFNpemUpOworICAg
IH0KIAotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVmYXVs
dEZvbnREZXNjcmlwdGlvbikpOworICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9u
Z2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpOworCisgICAgLy8gRm9udCBmYW1pbHkKKyAgICAvLyBGSVhN
RTogTW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVG
b250RmFtaWx5CisgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJv
cGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCisgICAgYm9vbCBvbGRG
YW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1
bHRTaXplKCk7CisKKyAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFtaWxpZXM7CisgICAgZmFtaWxp
ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LT5mYW1pbHkuc2l6ZSgpKTsKKworICAg
IGZvciAoYXV0byYgaXRlbSA6IGZvbnRSYXctPmZhbWlseSkgeworICAgICAgICBBdG9tU3RyaW5n
IGZhbWlseTsKKyAgICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkgPSBmYWxzZTsKKyAgICAgICAg
c3dpdGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBpc0dl
bmVyaWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7CisgICAgICAgICAgICBm
YW1pbHkgPSBpc0dlbmVyaWNGYW1pbHkgPworICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChpZGVudCkgOgorICAgICAg
ICAgICAgICAgIGRvY3VtZW50LnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAg
ICAgIH0sIFsmXSAoY29uc3QgU3RyaW5nJiBmYW1pbHlTdHJpbmcpIHsKKyAgICAgICAgICAgIGZh
bWlseSA9IGZhbWlseVN0cmluZzsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKGZhbWlseS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGZhbWlsaWVzLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQo
IWlzR2VuZXJpY0ZhbWlseSk7CisgICAgICAgIGZhbWlsaWVzLnVuY2hlY2tlZEFwcGVuZChmYW1p
bHkpOwogICAgIH0KIAotICAgIG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1l
bnQuZm9udFNlbGVjdG9yKCkpOworICAgIGlmIChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMoZmFtaWxpZXMpOwogCi0g
ICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUu
CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFt
aWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKKyAgICAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlk
ZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkgewor
ICAgICAgICAgICAgYXV0byBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRl
bnRpZmllciwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplLCBkb2N1bWVudCk7CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoU3R5bGU6OmNvbXB1dGVkRm9udFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShzaXplLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUo
KSwgZmFsc2UsIG5ld1N0eWxlLmdldCgpLCBkb2N1bWVudCkpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRm9udCBzdHlsZQorICAgIC8vIEZJWE1FOiBNb3N0bHkgZHVwbGljYXRlZCBmcm9t
IEJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5bGVGcm9tVmFsdWUKKyAgICBpZiAoZm9u
dFJhdy0+c3R5bGUpIHsKKyAgICAgICAgc3dpdGNoIChmb250UmF3LT5zdHlsZS0+c3R5bGUpIHsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
SXRhbGljKGl0YWxpY1ZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU9ibGlxdWU6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGlj
KEZvbnRTZWxlY3Rpb25WYWx1ZShzdGF0aWNfY2FzdDxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVEZWdyZWVzKGZvbnRSYXctPnN0eWxlLT5hbmdsZS50eXBlLCBmb250UmF3LT5zdHls
ZS0+YW5nbGUudmFsdWUpKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMo
KGZvbnRSYXctPnN0eWxlICYmIGZvbnRSYXctPnN0eWxlLT5zdHlsZSA9PSBDU1NWYWx1ZUl0YWxp
YykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6c2xudCk7CisKKyAgICAv
LyBGb250IHZhcmlhbnQgY2FwcworICAgIGlmIChmb250UmF3LT52YXJpYW50Q2FwcykgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBtdXN0IGJlIGRlZmluZWQgc29tZXdoZXJlLi4uCisgICAgICAg
IHN3aXRjaCAoKmZvbnRSYXctPnZhcmlhbnRDYXBzKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b3JtYWw6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZh
cmlhbnRDYXBzOjpOb3JtYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVTbWFsbENhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENh
cHMoRm9udFZhcmlhbnRDYXBzOjpTbWFsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OkFsbFNtYWxsKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpB
bGxQZXRpdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmlj
YXNlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJp
YW50Q2Fwczo6VW5pY2FzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZVRpdGxpbmdDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRD
YXBzKEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGb250IHdlaWdodAorICAgIGlm
IChmb250UmF3LT53ZWlnaHQpIHsKKyAgICAgICAgYXV0byB3ZWlnaHQgPSBzd2l0Y2hPbigqZm9u
dFJhdy0+d2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoaWRlbnQpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vcm1hbFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlQm9sZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYm9sZFdlaWdodFZhbHVlKCk7CisgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBGb250
Q2FzY2FkZURlc2NyaXB0aW9uOjpib2xkZXJXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgp
KTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgorICAgICAgICAgICAgICAgIHJl
dHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KGZvbnREZXNjcmlwdGlv
bi53ZWlnaHQoKSk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9LCBbJl0gKGRvdWJsZSB3ZWlnaHQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWU6OmNsYW1wRmxvYXQod2VpZ2h0KTsK
KyAgICAgICAgfSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQod2VpZ2h0KTsK
KyAgICB9CisKKyAgICAvLyBGb250IHNpemUKKyAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29y
ZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQpOworICAgIGZsb2F0IHNpemUgPSBz
d2l0Y2hPbihmb250UmF3LT5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAg
c3dpdGNoIChpZGVudCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAg
ICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgor
ICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihpZGVudCk7CisgICAgICAgICAg
ICByZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1lbnQpOworICAgICAgICBjYXNlIENTU1ZhbHVl
TGFyZ2VyOgorICAgICAgICAgICAgcmV0dXJuIHBhcmVudFNpemUgKiAxLjJmOworICAgICAgICBj
YXNlIENTU1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplIC8gMS4y
ZjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwLmY7CisgICAgICAgIH0K
KyAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJj
ZW50JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9y
UGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aCYgbGVu
Z3RoKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUGFyZW50IHN0eWxlIGlzIG9ubHkgdXNlZCBm
b3IgbGluZS1oZWlnaHQgLSBkbyB3ZSBuZWVkIHRvIHNwZWNpZnkgaXQgaGVyZT8KKyAgICAgICAg
ICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBuZXdTdHlsZS5n
ZXQoKSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgbnVsbHB0ciwgZG9jdW1lbnQucmVuZGVyVmll
dygpLCAxLjBmLCBDU1NQcm9wZXJ0eUZvbnRTaXplIH07CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERv
dWJsZShjb252ZXJzaW9uRGF0YSwgbGVuZ3RoLnR5cGUsIGxlbmd0aC52YWx1ZSkpOworICAgICAg
ICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAgICAgICAgICByZXR1cm4gKHBhcmVu
dFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC5mOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAg
IGlmIChzaXplID4gMCkgeworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6
ZShzaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICAvLyBMaW5lIGhlaWdodAorICAgIGlmIChmb250UmF3LT5saW5lSGVpZ2h0
KSB7CisgICAgICAgIE9wdGlvbmFsPExlbmd0aD4gbGluZUhlaWdodCA9IHN3aXRjaE9uKCpmb250
UmF3LT5saW5lSGVpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAgIGlm
IChpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8TGVuZ3RoPihSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgICAg
ICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihXVEY6Om51bGxvcHQpOworICAgICAgICB9LCBbJl0g
KGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxMZW5ndGg+KExl
bmd0aChudW1iZXIgKiAxMDAuMCwgUGVyY2VudCkpOworICAgICAgICB9LCBbJl0gKGNvbnN0IENT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50JiBsZW5ndGhPclBlcmNlbnQp
IHsKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29u
c3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGgmIGxlbmd0aCkgeworICAgICAgICAg
ICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBuZXdTdHls
ZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgbnVsbHB0ciwgZG9jdW1lbnQucmVuZGVy
VmlldygpLCAxLjBmLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQgfTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgoY2xhbXBUbzxmbG9hdD4oQ1NTUHJpbWl0aXZl
VmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKGNvbnZlcnNpb25EYXRhLCBsZW5ndGgu
dHlwZSwgbGVuZ3RoLnZhbHVlKSwgbWluVmFsdWVGb3JDc3NMZW5ndGgsIG1heFZhbHVlRm9yQ3Nz
TGVuZ3RoKSwgRml4ZWQpKTsKKyAgICAgICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2Up
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgoKGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHN0YXRpY19jYXN0PGludD4ocGVyY2VudGFnZSkp
IC8gMTAwLCBGaXhlZCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChsaW5lSGVpZ2h0KQorICAgICAgICAgICAgbmV3U3R5bGUtPnNldExpbmVIZWlnaHQoV1RG
TW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkpKTsKKyAgICB9CisKKyAgICBuZXdTdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgbmV3U3R5bGUtPmZv
bnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisjaWYgMAogICAg
IFN0eWxlOjpNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBhdXRvIHBhcmVudFN0eWxlID0g
UmVuZGVyU3R5bGU6OmNsb25lKCpuZXdTdHlsZSk7CiAgICAgU3R5bGU6OkJ1aWxkZXIgc3R5bGVC
dWlsZGVyKCpuZXdTdHlsZSwgeyBkb2N1bWVudCwgcGFyZW50U3R5bGUgfSwgbWF0Y2hSZXN1bHQs
IHsgfSk7Ci0KICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5
Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250RmFtaWx5KS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0
eVZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcykuZ2V0KCkpOwogICAgIHN0eWxl
QnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsK
ICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUs
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdl
dCgpKTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5TGlu
ZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0KS5nZXQoKSk7CisjZW5kaWYKIAogICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZvbnQuaW5p
dGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKm5ld1N0eWxlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggYjYzZDVmZGY5YzE1ZTJiM2Q2
NjBkZmI4MDIwNzc3ZTUxNzgxZTIzYi4uNWU4ZDE4Y2JjYjVkNjMyN2QwZmZmZTgzYjlhNDhiNjE4
NTAzNmU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3Vz
dG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NGb250VmFsdWUuaCIKICNpbmNsdWRlICJDU1NH
cmFkaWVudFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIgor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5j
bHVkZSAiQ291bnRlci5oIgpAQCAtOTg4LDQwICs5ODksMTEgQEAgaW5saW5lIHZvaWQgQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUs
IENTU1YKICAgICAgICAgICAgIC8vIElmIHRoZSBmYW1pbHkgbmFtZSB3YXMgcmVzb2x2ZWQgYnkg
dGhlIENTUyBwYXJzZXIgZnJvbSBhIHN5c3RlbSBmb250IElELCB0aGVuIGl0IGlzIGdlbmVyaWMu
CiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBmb250RmFtaWx5LmZyb21TeXN0ZW1Gb250
SUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52
YWx1ZUlEKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgorICAgICAg
ICAgICAgaWYgKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRCb2R5KSB7
CiAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGlu
Z3MoKS5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzZXJp
ZkZhbWlseTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaXNHZW5lcmlj
RmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc2Fuc1NlcmlmRmFt
aWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAg
ICAgICAgICBmYW1pbHkgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJp
Y0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBmYW50YXN5RmFtaWx5
OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IG1vbm9zcGFjZUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVy
aWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gcGlj
dG9ncmFwaEZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN5c3RlbVVp
OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHN5c3RlbVVpRmFtaWx5OwotICAgICAgICAgICAg
ICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGZhbWlseSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9t
VmFsdWVJRChjb250ZW50VmFsdWUudmFsdWVJRCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCg==
</data>
<flag name="commit-queue"
          id="425311"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409567</attachid>
            <date>2020-09-24 06:37:33 -0700</date>
            <delta_ts>2020-09-28 03:56:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200924143732.patch</filename>
            <type>text/plain</type>
            <size>50372</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKaW5kZXggNmM2MmQ0YjJlMzk3ZWFlNmU4YTNiYTYwNzA0YTZhMjQyZWE3ZWRhZi4u
ZjJhZDEyYzA5ZmY0ZDZmYTUwNzc1ZTJmOTgyMDRhY2ZhOWY5MWJlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTM4LDYgKzEzOCwxNSBAQCBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsK
IH0KIAorT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKK30KKwogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IDllMDEwNGFmOTZkOTUzYjQwNzdmMzJi
MWE3NzkxZmNhM2QwZDI5MGIuLjkyNTg5YmY2OTU3ODBhYjc5NzUyOTg3YTQ0NGRiYTc5OTIwNWM3
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtNDMsNiArNDMsMTAg
QEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3Mg
QnVpbGRlclN0YXRlOwogfQpAQCAtOTEsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcp
OwogCisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dz4gcGFyc2VGb250V29ya2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRN
TFN0YW5kYXJkTW9kZSk7CisKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCmluZGV4IGU0MDRkNDhlZjhmZmYyZWI5Zjk2Mzg3OWZjNjFlZDIyODVmZTAz
ZjkuLjhjZTM4ZWM4MTM3ZTI5NmZlZmRkOTQwMDZmNjdkOGE3ZTVhOTQwMjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNT
U1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgpAQCAtODYxLDE2ICs4NjAsMTUgQEAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmEKICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBD
U1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NW
YWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKLX0KLQog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gc3dpdGNo
T24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQp
OworICAgICAgICB9LCBbXSAoZG91YmxlIHdlaWdodE51bWJlcikgeworICAgICAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUod2VpZ2h0TnVtYmVyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dEFic29sdXRlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtOTA3
LDcgKzkwNSw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIAogc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVVbHRy
YUNvbmRlbnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENT
U1ZhbHVlU2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVk
LCBDU1NWYWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFF
eHBhbmRlZD4ocmFuZ2UpOworICAgIGlmIChhdXRvIHZhbHVlSUQgPSBjb25zdW1lRm9udFN0cmV0
Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTk2MiwyNiArOTYy
LDE1IEBAIHN0YXRpYyBib29sIGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoZmxvYXQgb2JsaXF1ZSkK
IAogc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewot
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5nZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1
ZUlEID0gcmVzdWx0LT52YWx1ZUlEKCk7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYykKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRT
dHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCkpOwotICAgIEFTU0VSVChyZXN1bHQtPnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU9ibGlxdWUpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1l
QW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZm9udFN0eWxl
SXNXaXRoaW5SYW5nZShhbmdsZS0+dmFsdWU8ZmxvYXQ+KENTU1VuaXRUeXBlOjpDU1NfREVHKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVl
KSwgV1RGTW92ZShhbmdsZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlKQorICAgICAgICAgICAgcmV0
dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT5hbmdsZS52YWx1ZSwgcmVzdWx0LT5hbmdsZS50eXBlKSk7CiAjZW5k
aWYKLSAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAg
ICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE1
LDMzICsxMDA0LDExIEBAIHN0YXRpYyBSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29u
c3VtZUZvbnRTdHlsZVJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmCiB9CiAjZW5kaWYKIAotc3Rh
dGljIFN0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJvb2wgYWRkZWRTcGFjZSA9
IGZhbHNlOwotICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVl
aygpOwotICAgIHdoaWxlIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAg
ICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJyAnKTsKLSAgICAgICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKSk7Ci0gICAgfQotICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZp
cnN0VG9rZW4uaWQoKSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFt
aWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkudmFsdWUoKS50b1N0cmluZygpKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5
cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTdHJpbmcg
ZmFtaWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7Ci0gICAgaWYgKGZhbWls
eU5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsK
KyAgICBpZiAoYXV0byBmYW1pbHlOYW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpKQor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5
VmFsdWUoKmZhbWlseU5hbWUpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBjb25zdW1lR2VuZXJpY0ZhbWlseShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKQEAgLTExNDksMTMgKzExMTYsMTkgQEAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUZvbnRTaXplKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2QKIAog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxpbmVIZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAg
ICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgIHJldHVy
biBjb25zdW1lSWRlbnQocmFuZ2UpOwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBs
aW5lSGVpZ2h0ID0gY29uc3VtZU51bWJlcihyYW5nZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKTsK
LSAgICBpZiAobGluZUhlaWdodCkKLSAgICAgICAgcmV0dXJuIGxpbmVIZWlnaHQ7Ci0gICAgcmV0
dXJuIGNvbnN1bWVMZW5ndGhPclBlcmNlbnQocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2VOb25OZWdhdGl2ZSk7CisgICAgaWYgKGF1dG8gbGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVp
Z2h0UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24oKmxpbmVIZWlnaHQsIFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZUlEKTsKKyAgICAgICAgfSwgW10gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVIpOworICAgICAgICB9LCBbXSAoTGVuZ3RoT3JQZXJjZW50UmF3IGxlbmd0
aE9yUGVyY2VudCkgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obGVuZ3RoT3JQ
ZXJjZW50LCBbXSAoTGVuZ3RoUmF3IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGxlbmd0aC52YWx1ZSwgbGVuZ3Ro
LnR5cGUpOworICAgICAgICAgICAgfSwgW10gKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVy
Y2VudGFnZSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIu
aAppbmRleCBiN2UxOWZiZDY0YTc4YzBmN2Q1OWM3MTQ4N2Q3OTY2ZTdhMGIwOTllLi4wNzkxNzM1
YWFkZWFlYjUxODBhMGEzNDU1NTA4NmRlNWEwN2JjMDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCkBAIC0yMiw2ICsyMiw3IEBACiAKICNwcmFn
bWEgb25jZQogCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA2OTU4YTY2Mjc4Yzk1
OGRkMWU2MjkzNGU4ZDA5MzViYTRlYmQzYjljLi4xZDk1MDEzNTU5MWNmZGY3ODcyNjBjMTFmZmQw
NmMyMzIwMTcwNTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCkBAIC0xMjgsMTUgKzEyOCwyMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIE9wdGlvbmFsPGRvdWJsZT4gY29u
c3VtZVBlcmNlbnRSYXcoKQorICAgIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXco
Ym9vbCBhbGxvd1BlcmNlbnRPZiA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNW
YWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50KQorICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRlZ29y
eSgpOworICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dCkgeworICAgICAgICAgICAgaWYgKCFhbGxvd1BlcmNlbnRPZiB8fAorICAgICAgICAgICAgICAg
IChjYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoICYmCisgICAg
ICAgICAgICAgICAgIGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1i
ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KICAg
ICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7CiAgICAgICAgIHJldHVybiBtX2NhbGNWYWx1
ZS0+ZG91YmxlVmFsdWUoKTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxBbmdsZT4gY29uc3VtZUFu
Z2xlUmF3KCkKKyAgICBPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KCkKICAgICB7
CiAgICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwpAQCAtMTQ0LDYgKzE1MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB7IHsgbV9j
YWxjVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9
OwogICAgIH0KIAorICAgIE9wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdygpCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgp
ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOworICAgICAgICByZXR1
cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVW
YWx1ZSgpIH0gfTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
bV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7CkBAIC0xNzcs
MTAgKzE5MiwxMiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUlu
dGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIGNvbnN1bWVJbnRl
Z2VyKHJhbmdlLCAxKTsKIH0KIAotYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKK2Jvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1bHQsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSkKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7
CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgeworICAgICAgICBpZiAodmFs
dWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkg
PCAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXN1bHQgPSByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0xODgsNyArMjA1LDcgQEAgYm9vbCBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKICAgICBpZiAodG9r
ZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
LCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7CiAgICAgcmV0dXJuIGNhbGNQYXJz
ZXIuY29uc3VtZU51bWJlclJhdyhyZXN1bHQpOwogfQogCkBAIC0xOTYsMjIgKzIxMywxOSBAQCBi
b29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSYg
cmVzdWx0KQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pIHsKLSAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5n
ZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1
ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW4udHlwZSgpICE9
IEZ1bmN0aW9uVG9rZW4pCisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7
CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSog
Y2FsY1ZhbHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoY2FsY1Zh
bHVlLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICAgICAgfQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKLSAgICBpZiAoY29uc3Qg
Q1NTQ2FsY1ZhbHVlKiBjYWxjVmFsdWUgPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAg
aWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIu
Y29uc3VtZVZhbHVlKCk7CiAgICAgfQogCisgICAgZG91YmxlIG51bWJlcjsKKyAgICBpZiAoY29u
c3VtZU51bWJlclJhdyhyYW5nZSwgbnVtYmVyLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobnVtYmVyLCB0b2tlbi51bml0
VHlwZSgpKTsKKwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yMjIsNyArMjM2LDcgQEAg
c3RhdGljIGlubGluZSBib29sIGRpdmlzaWJsZUJ5MTAwKGRvdWJsZSB2YWx1ZSkKIH0KICNlbmRp
ZgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdl
aWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICAvLyBWYWx1
ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEw
MDAgYXJlIHBhcnNlIGVycm9ycy4KICAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKQEAg
LTIzMCwxMSArMjQ0LDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAjaWYgIUVOQUJMRShWQVJJ
QVRJT05fRk9OVFMpCiAgICAgICAgICYmIHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSA9PSBJbnRl
Z2VyVmFsdWVUeXBlICYmIGRpdmlzaWJsZUJ5MTAwKHRva2VuLm51bWVyaWNWYWx1ZSgpKQogI2Vu
ZGlmCi0gICAgKQotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlcihyYW5nZSwgVmFsdWVSYW5n
ZUFsbCk7CisgICAgKSB7CisgICAgICAgIGRvdWJsZSByZXN1bHQ7CisgICAgICAgIGlmIChjb25z
dW1lTnVtYmVyUmF3KHJhbmdlLCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CiAKICAgICBpZiAodG9rZW4udHlw
ZSgpICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gIltGb3IgY2FsYygpXSwgdGhlIHVzZWQgdmFs
dWUgcmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNsYW1wZWQgdG8gdGhlIHJh
bmdlIGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKICAgICBDYWxjUGFyc2VyIGNhbGNQ
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7
CkBAIC0yNDUsOSArMjYzLDE2IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAjZW5kaWYKICAgICAp
IHsKICAgICAgICAgcmVzdWx0ID0gc3RkOjptaW4oc3RkOjptYXgocmVzdWx0LCBzdGQ6Om5leHRh
ZnRlcigwLiwgMS4pKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4sIDAuKSk7Ci0gICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJlc3VsdCwgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYg
KGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcocmFuZ2UpKQorICAgICAg
ICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgqcmVzdWx0LCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTI1
OSwxNCArMjg0LDE0IEBAIGlubGluZSBib29sIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUoZG91
YmxlIHZhbHVlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsCiAgICAgICAgIHx8IChjc3NQ
YXJzZXJNb2RlID09IEhUTUxRdWlya3NNb2RlICYmIHVuaXRsZXNzID09IFVuaXRsZXNzUXVpcms6
OkFsbG93KTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK09wdGlvbmFsPExl
bmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFu
Z2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pIHsKICAg
ICAgICAgc3dpdGNoICh0b2tlbi51bml0VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19RVUlSS1lfRU1TOgogICAgICAgICAgICAgaWYgKGNzc1BhcnNlck1vZGUgIT0gVUFT
aGVldE1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUkVNUzoKQEAgLTI4NywyOCArMzEyLDM5IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kCiAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApIHx8IHN0
ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1ZhbHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHRva2Vu
LnVuaXRUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
cmV0dXJuIHsgeyB0b2tlbi51bml0VHlwZSgpLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKICAgICB9CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9
PSBOdW1iZXJUb2tlbikgewogICAgICAgICBpZiAoIXNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUo
dG9rZW4ubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzKQogICAgICAgICAg
ICAgfHwgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVy
aWNWYWx1ZSgpIDwgMCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChzdGQ6OmlzaW5mKHRva2VuLm51bWVy
aWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBDU1NVbml0
VHlwZSB1bml0VHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfUFg7Ci0gICAgICAgIHJldHVybiBDU1NW
YWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdX
aGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXRUeXBlKTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgQ1NTVW5pdFR5cGU6OkNTU19QWCwg
cmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07CiAg
ICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIENhbGNQ
YXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1
ZVJhbmdlKTsKLSAgICBpZiAoY2FsY1BhcnNlci52YWx1ZSgpICYmIGNhbGNQYXJzZXIudmFsdWUo
KS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAgIHJldHVybiBjYWxjUGFyc2VyLmNv
bnN1bWVMZW5ndGhSYXcoKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sK
KyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2Fs
Y1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsK
KyAgICAgICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVlKCktPmNh
dGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwg
dW5pdGxlc3MpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVWYWx1ZShyZXN1bHQtPnZhbHVlLCByZXN1bHQtPnR5cGUpOwogCiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkBAIC0zMzMsNyArMzY5LDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZQogewogICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9r
ZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKLSAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgdmFsdWVSYW5nZSk7CisgICAg
ICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudCwgdmFsdWVSYW5nZSk7CiAgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGN1
bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CiAgICAgICAgICAgICBpZiAoY2FsY3VsYXRp
b24tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKQEAgLTM2MSwyNiArMzk3
LDYwIEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1S
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5n
ZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorT3B0aW9uYWw8TGVuZ3RoT3JQ
ZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5n
ZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25U
b2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pCi0gICAgICAgIHJldHVybiBjb25z
dW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB2YWx1ZVJhbmdlLCB1bml0bGVzcyk7Ci0g
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pCi0gICAgICAgIHJldHVybiBj
b25zdW1lUGVyY2VudChyYW5nZSwgdmFsdWVSYW5nZSk7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9
PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKKyAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9k
ZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBpZiAodG9rZW4udHlw
ZSgpID09IFBlcmNlbnRhZ2VUb2tlbikgeworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBjb25z
dW1lUGVyY2VudFJhdyhyYW5nZSwgdmFsdWVSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4geyAq
cmVzdWx0IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYg
KHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIENhbGNQYXJzZXIgY2FsY1BhcnNl
cihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKICAgICBp
ZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkg
ewotICAgICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnko
KSwgY3NzUGFyc2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1l
VmFsdWUoKTsKKyAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNh
dGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAgICBpZiAoY2FsY3VsYXRpb24t
PmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoUmF3KCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2FsY1BhcnNlci5jb25zdW1l
UGVyY2VudFJhdyh0cnVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2Vu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tl
bi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAg
ICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1
ZSgpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+
Y2F0ZWdvcnkoKSwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICBy
ZXR1cm4gc3dpdGNoT24oKnJlc3VsdCwgW10gKExlbmd0aFJhdyBsZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShsZW5n
dGgudmFsdWUsIGxlbmd0aC50eXBlKTsKKyAgICAgICAgICAgIH0sIFtdIChkb3VibGUgcGVyY2Vu
dGFnZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZVZhbHVlKHBlcmNlbnRhZ2UsIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7Cisg
ICAgICAgICAgICB9KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotT3B0aW9uYWw8QW5nbGU+
IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorT3B0aW9uYWw8QW5nbGVS
YXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewogICAgIGNvbnN0
IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlw
ZSgpID09IERpbWVuc2lvblRva2VuKSB7CkBAIC01MDIsMTEgKzU3MiwyNSBAQCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBBbGxvd1hSZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK09wdGlv
bmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5p
ZCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnJlc3VsdCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJ
ZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZUlEIGxvd2Vy
LCBDU1NWYWx1ZUlEIHVwcGVyKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA8IGxvd2Vy
IHx8IHJhbmdlLnBlZWsoKS5pZCgpID4gdXBwZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdyhyYW5nZSk7CiB9CiAKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpCkBAIC0xODAzLDYgKzE4ODcs
MjI1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNvbnRlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
K09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRSYXc8Q1NTVmFs
dWVOb3JtYWwsIENTU1ZhbHVlU21hbGxDYXBzPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRSYXc8Q1NTVmFsdWVOb3JtYWws
IENTU1ZhbHVlQm9sZCwgQ1NTVmFsdWVCb2xkZXIsIENTU1ZhbHVlTGlnaHRlcj4ocmFuZ2UpOwor
fQorCitPcHRpb25hbDxGb250V2VpZ2h0UmF3PiBjb25zdW1lRm9udFdlaWdodFJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9u
dFdlaWdodEtleXdvcmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiB7ICpyZXN1bHQg
fTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhyYW5n
ZSkpCisgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworfQorCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFs
dWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJ
ZGVudFJhdzxDU1NWYWx1ZVVsdHJhQ29uZGVuc2VkLCBDU1NWYWx1ZUV4dHJhQ29uZGVuc2VkLCBD
U1NWYWx1ZUNvbmRlbnNlZCwgQ1NTVmFsdWVTZW1pQ29uZGVuc2VkLCBDU1NWYWx1ZU5vcm1hbCwg
Q1NTVmFsdWVTZW1pRXhwYW5kZWQsIENTU1ZhbHVlRXhwYW5kZWQsIENTU1ZhbHVlRXh0cmFFeHBh
bmRlZCwgQ1NTVmFsdWVVbHRyYUV4cGFuZGVkPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwg
Q1NTVmFsdWVJdGFsaWMsIENTU1ZhbHVlT2JsaXF1ZT4ocmFuZ2UpOworfQorCitPcHRpb25hbDxG
b250U3R5bGVSYXc+IGNvbnN1bWVGb250U3R5bGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGNv
bnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcocmFuZ2UpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBpZGVudCA9ICpyZXN1bHQ7
CisgICAgaWYgKGlkZW50ID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkZW50ID09IENTU1ZhbHVlSXRh
bGljKQorICAgICAgICByZXR1cm4geyB7IGlkZW50LCB7IENTU1VuaXRUeXBlOjpDU1NfREVHLCAw
LjAgfSB9IH07CisgICAgQVNTRVJUKGlkZW50ID09IENTU1ZhbHVlT2JsaXF1ZSk7CisjaWYgRU5B
QkxFKFZBUklBVElPTl9GT05UUykKKyAgICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAg
aWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7
CisgICAgICAgICAgICBhdXRvIGFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworICAgICAgICAgICAgaWYg
KGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoYW5nbGVJbkRlZ3JlZXMpKQorICAgICAgICAgICAgICAg
IHJldHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCAqYW5nbGUgfSB9OworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGNzc1BhcnNlck1vZGUpOworI2VuZGlmCisgICAgcmV0dXJuIHsgeyBDU1NWYWx1ZU9ibGlx
dWUsIHsgQ1NTVW5pdFR5cGU6OkNTU19ERUcsIDAuMCB9IH0gfTsKK30KKworU3RyaW5nIGNvbmNh
dGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7CisgICAgY29u
c3QgQ1NTUGFyc2VyVG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgd2hpbGUg
KHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBpZiAoIWJ1aWxk
ZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAg
ICAgICAgYWRkZWRTcGFjZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBl
bmQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgaWYgKCFhZGRlZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tlbi5pZCgpKSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK09wdGlvbmFsPFN0cmluZz4gY29uc3VtZUZhbWlseU5hbWVSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5n
VG9rZW4pCisgICAgICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgp
LnZhbHVlKCkudG9TdHJpbmcoKTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVu
dFRva2VuKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIFN0cmluZyBmYW1pbHlO
YW1lID0gY29uY2F0ZW5hdGVGYW1pbHlOYW1lKHJhbmdlKTsKKyAgICBpZiAoZmFtaWx5TmFtZS5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmFtaWx5
TmFtZTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVyaWNGYW1pbHlSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJh
bmdlUmF3KHJhbmdlLCBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVdlYmtpdEJvZHkpOworfQorCitP
cHRpb25hbDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWls
eVJhdz4gbGlzdDsKKyAgICBkbyB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUdl
bmVyaWNGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqaWRlbnQg
fSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGF1dG8gc3RyaW5nID0gY29uc3Vt
ZUZhbWlseU5hbWVSYXcocmFuZ2UpKQorICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKHsgKnN0
cmluZyB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICB9CisgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hp
dGVzcGFjZShyYW5nZSkpOworICAgIHJldHVybiBsaXN0OworfQorCitPcHRpb25hbDxGb250U2l6
ZVJhdz4gY29uc3VtZUZvbnRTaXplUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQ
YXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAg
aWYgKHJhbmdlLnBlZWsoKS5pZCgpID49IENTU1ZhbHVlWHhTbWFsbCAmJiByYW5nZS5wZWVrKCku
aWQoKSA8PSBDU1NWYWx1ZUxhcmdlcikgeworICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1
bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYXV0byByZXN1bHQgPSBj
b25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
Tm9uTmVnYXRpdmUsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworCisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29u
c3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFs
dWVOb3JtYWwpIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lSWRlbnRSYXcocmFu
Z2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKmlkZW50IH07CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgZG91YmxlIG51bWJlcjsKKyAgICBpZiAoY29uc3VtZU51
bWJlclJhdyhyYW5nZSwgbnVtYmVyLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpKQorICAgICAgICBy
ZXR1cm4geyBudW1iZXIgfTsKKworICAgIGlmIChhdXRvIGxlbmd0aE9yUGVyY2VudCA9IGNvbnN1
bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25O
ZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB7ICpsZW5ndGhPclBlcmNlbnQgfTsKKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29y
a2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlKQoreworICAgIC8vIExldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluaGVyaXQgb3Ig
aW5pdGlhbCBzb21ld2hlcmUgaW4gdGhlIHNob3J0aGFuZC4KKyAgICBDU1NQYXJzZXJUb2tlblJh
bmdlIHJhbmdlQ29weSA9IHJhbmdlOworICAgIHdoaWxlICghcmFuZ2VDb3B5LmF0RW5kKCkpIHsK
KyAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlQ29weS5jb25zdW1lSW5jbHVkaW5nV2hpdGVz
cGFjZSgpLmlkKCk7CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQgfHwgaWQgPT0g
Q1NTVmFsdWVJbml0aWFsKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBGb250UmF3IHJlc3VsdDsKKworICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewor
ICAgICAgICBDU1NWYWx1ZUlEIGlkID0gcmFuZ2UucGVlaygpLmlkKCk7CisgICAgICAgIGlmICgh
cmVzdWx0LnN0eWxlKSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC5zdHlsZSA9IGNvbnN1bWVG
b250U3R5bGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdC52YXJpYW50Q2FwcyAmJiAoaWQg
PT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpKSB7CisgICAgICAg
ICAgICAvLyBGb250IHZhcmlhbnQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXJ0aWN1bGFyLCBpdCBv
bmx5IGFjY2VwdHMgbm9ybWFsIG9yIHNtYWxsLWNhcHMuCisgICAgICAgICAgICAvLyBTZWUgaHR0
cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mb250cy8jcHJvcGRlZi1mb250CisgICAgICAgICAg
ICBpZiAoKHJlc3VsdC52YXJpYW50Q2FwcyA9IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KHJh
bmdlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFyZXN1bHQud2VpZ2h0KSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC53ZWlnaHQgPSBjb25z
dW1lRm9udFdlaWdodFJhdyhyYW5nZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LnN0cmV0Y2gpIHsKKyAgICAgICAgICAgIGlmICgo
cmVzdWx0LnN0cmV0Y2ggPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2Up
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KKyAgICBpZiAoYXV0
byBzaXplID0gY29uc3VtZUZvbnRTaXplUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAg
ICAgcmVzdWx0LnNpemUgPSAqc2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGlmIChjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkg
eworICAgICAgICBpZiAoIShyZXN1bHQubGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVpZ2h0UmF3
KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIH0KKworICAgIC8vIEZvbnQgZmFtaWx5IG11c3QgY29tZSBub3cuCisgICAgaWYgKGF1
dG8gZmFtaWx5ID0gY29uc3VtZUZvbnRGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICByZXN1bHQu
ZmFtaWx5ID0gKmZhbWlseTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBdG9tU3RyaW5nIGdlbmVyaWNGb250RmFtaWx5
RnJvbVZhbHVlSUQoQ1NTVmFsdWVJRCBpZGVudCkKK3sKKyAgICBzd2l0Y2ggKGlkZW50KSB7Cisg
ICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgorICAgICAgICByZXR1cm4gc2VyaWZGYW1pbHk7CisgICAg
Y2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNhbnNTZXJpZkZhbWlseTsK
KyAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKKyAgICAgICAgcmV0dXJuIGN1cnNpdmVGYW1pbHk7
CisgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6CisgICAgICAgIHJldHVybiBmYW50YXN5RmFtaWx5
OworICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgIHJldHVybiBtb25vc3BhY2VG
YW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgIHJldHVy
biBwaWN0b2dyYXBoRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTeXN0ZW1VaToKKyAgICAgICAg
cmV0dXJuIHN5c3RlbVVpRmFtaWx5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKaW5kZXggYTg3YmQyMGFhMmE1MjM2MTRiZDM4
M2JjMDgzNTc0NDg0ZmE0MDZiYi4uMWNiM2U0MGM3ZGZkYjNkYzVjYmNlNDYyYTRlNzdlMDI5ODcy
ZGY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VySGVscGVycy5oCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29s
LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiIC8vIEZvciBWYWx1ZVJhbmdlCiAjaW5jbHVkZSA8d3Rm
L09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDI4ICs1Nyw0MSBAQCBDU1NQ
YXJzZXJUb2tlblJhbmdlIGNvbnN1bWVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBl
bnVtIGNsYXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07CiBlbnVtIGNsYXNzIEFs
bG93WFJlc29sdXRpb25Vbml0IHsgQWxsb3csIEZvcmJpZCB9OwogCi1zdHJ1Y3QgQW5nbGUgewor
c3RydWN0IEFuZ2xlUmF3IHsKICAgICBDU1NVbml0VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1
ZTsKIH07CiAKK3N0cnVjdCBMZW5ndGhSYXcgeworICAgIENTU1VuaXRUeXBlIHR5cGU7CisgICAg
ZG91YmxlIHZhbHVlOworfTsKKwordXNpbmcgTGVuZ3RoT3JQZXJjZW50UmF3ID0gV1RGOjpWYXJp
YW50PExlbmd0aFJhdywgZG91YmxlPjsKKwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1z
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1ib29s
IGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0KTsK
K2Jvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1
bHQsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CitPcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3Ro
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0
bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwg
VmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1
ZVJhbmdlID0gVmFsdWVSYW5nZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKK09wdGlvbmFsPExl
bmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotT3B0aW9uYWw8QW5n
bGU+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwg
VW5pdGxlc3NRdWlyayk7CitPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NR
dWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb25zdW1lUmVzb2x1dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQWxsb3dYUmVzb2x1dGlv
blVuaXQgPSBBbGxvd1hSZXNvbHV0aW9uVW5pdDo6Rm9yYmlkKTsKIAorT3B0aW9uYWw8Q1NTVmFs
dWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlv
bmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
LCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKTsKIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUlkZW50UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVl
SUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFs
dWVJRC4uLj4gaW5saW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQgaWQpOwordGVtcGxh
dGU8Q1NTVmFsdWVJRC4uLiBhbGxvd2VkSWRlbnRzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25z
dW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4u
LiBhbGxvd2VkSWRlbnRzPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChD
U1NQYXJzZXJUb2tlblJhbmdlJik7CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUN1c3RvbUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTExNSw2ICsxMzAsNDAgQEAg
ZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUZpbHRlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYs
IEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMpOwogUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1l
U2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFs
bG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOwogCitzdHJ1Y3QgRm9udFN0eWxlUmF3IHsKKyAg
ICBDU1NWYWx1ZUlEIHN0eWxlOworICAgIEFuZ2xlUmF3IGFuZ2xlOworfTsKK3VzaW5nIEZvbnRX
ZWlnaHRSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NTVmFsdWVJRCwgZG91YmxlPjsKK3VzaW5nIEZvbnRT
aXplUmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIENTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6TGVuZ3RoT3JQZXJjZW50UmF3PjsKK3VzaW5nIExpbmVIZWlnaHRSYXcgPSBXVEY6OlZhcmlh
bnQ8Q1NTVmFsdWVJRCwgZG91YmxlLCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9y
UGVyY2VudFJhdz47Cit1c2luZyBGb250RmFtaWx5UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVl
SUQsIFN0cmluZz47CisKK3N0cnVjdCBGb250UmF3IHsKKyAgICBPcHRpb25hbDxGb250U3R5bGVS
YXc+IHN0eWxlOworICAgIE9wdGlvbmFsPENTU1ZhbHVlSUQ+IHZhcmlhbnRDYXBzOworICAgIE9w
dGlvbmFsPEZvbnRXZWlnaHRSYXc+IHdlaWdodDsKKyAgICBPcHRpb25hbDxDU1NWYWx1ZUlEPiBz
dHJldGNoOworICAgIEZvbnRTaXplUmF3IHNpemU7CisgICAgT3B0aW9uYWw8TGluZUhlaWdodFJh
dz4gbGluZUhlaWdodDsKKyAgICBXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3PiBmYW1pbHk7Cit9
OworCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFdlaWdo
dEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxGb250V2Vp
Z2h0UmF3PiBjb25zdW1lRm9udFdlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRp
b25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHlsZUtl
eXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxGb250U3R5bGVS
YXc+IGNvbnN1bWVGb250U3R5bGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUpOworU3RyaW5nIGNvbmNhdGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJik7
CitPcHRpb25hbDxTdHJpbmc+IGNvbnN1bWVGYW1pbHlOYW1lUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVHZW5lcmljRmFtaWx5UmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPFdURjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBj
b25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxGb250
U2l6ZVJhdz4gY29uc3VtZUZvbnRTaXplUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsK
K09wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250
V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitBdG9tU3Ry
aW5nIGdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoQ1NTVmFsdWVJRCk7CisKIC8vIFRlbXBs
YXRlIGltcGxlbWVudGF0aW9ucyBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSBmb3IgcmVh
ZGFiaWxpdHkuCiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIGVtcHR5QmFzZUNhc2U+IGlubGluZSBi
b29sIGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUlEKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTIzLDYg
KzE3MiwxMyBAQCB0ZW1wbGF0ZTxDU1NWYWx1ZUlEIGhlYWQsIENTU1ZhbHVlSUQuLi4gdGFpbD4g
aW5saW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSQogICAgIHJldHVybiBpZCA9PSBoZWFk
IHx8IGlkZW50TWF0Y2hlczx0YWlsLi4uPihpZCk7CiB9CiAKK3RlbXBsYXRlPENTU1ZhbHVlSUQu
Li4gbmFtZXM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVu
dFRva2VuIHx8ICFpZGVudE1hdGNoZXM8bmFtZXMuLi4+KHJhbmdlLnBlZWsoKS5pZCgpKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKS5pZCgpOworfQorCiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIG5hbWVz
PiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2Vu
IHx8ICFpZGVudE1hdGNoZXM8bmFtZXMuLi4+KHJhbmdlLnBlZWsoKS5pZCgpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCmluZGV4IDg5MTgwMjc5YWYyYjdmNzY1NmJjZGRmOGVlYzA4MzMzYjY1YzYxNDguLjJlYTc1
OTc3N2M5ZTIwMjMyMDcwNTBhZDBmMThmYzE3MjQ1MDc5ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MzYsMTUgKzM2LDE5IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJQYXRoMkQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCisjaW5j
bHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAt
MTM0LDYgKzEzOCwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
b25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51bnBhcnNl
ZEZvbnQgJiYgc3RhdGUoKS5mb250LnJlYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGF1dG8gZm9udFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBz
dHJpY3RUb0NTU1BhcnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsK
KyAgICBpZiAoIWZvbnRSYXcpCisgICAgICAgIHJldHVybjsKKworI2lmIDAKICAgICBhdXRvIHBh
cnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLCBDU1NQcm9wZXJ0eUZvbnQsIG5ld0ZvbnQsIHRy
dWUsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9k
ZSkpOwogICAgIGlmIChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQpAQCAtMTQ1LDcgKzE1NCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3
Rm9udCkKICAgICAvLyB0aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUg
aWdub3JlZC4KICAgICBpZiAoZm9udFZhbHVlID09ICJpbmhlcml0IiB8fCBmb250VmFsdWUgPT0g
ImluaXRpYWwiKQogICAgICAgICByZXR1cm47Ci0KKyNlbmRpZgogICAgIC8vIFRoZSBwYXJzZSBz
dWNjZWVkZWQuCiAgICAgU3RyaW5nIG5ld0ZvbnRTYWZlQ29weShuZXdGb250KTsgLy8gQ3JlYXRl
IGEgc3RyaW5nIGNvcHkgc2luY2UgbmV3Rm9udCBjYW4gYmUgZGVsZXRlZCBpbnNpZGUgcmVhbGl6
ZVNhdmVzLgogICAgIHJlYWxpemVTYXZlcygpOwpAQCAtMTU4LDMxICsxNjcsMjAyIEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkK
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS5kb2N1bWVudCgpOwogICAgIGRvY3Vt
ZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAorICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uOwogICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gY2FudmFzKCku
Y29tcHV0ZWRTdHlsZSgpKQotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSB9
KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNv
bXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpIH07CiAgICAgZWxzZSB7Ci0gICAgICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgZGVm
YXVsdEZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOwotICAg
ICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRT
aXplKTsKLSAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoRGVm
YXVsdEZvbnRTaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShEZWZh
dWx0Rm9udEZhbWlseSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KERlZmF1bHRGb250U2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoRGVmYXVsdEZvbnRTaXplKTsKKyAgICB9CiAKLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihXVEZNb3ZlKGRlZmF1bHRGb250RGVzY3JpcHRpb24pKTsKKyAgICAvLyBOb3cg
bWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KKyAgICBmbG9h
dCBwYXJlbnRTaXplID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKKworICAgIC8v
IEZvbnQgZmFtaWx5CisgICAgLy8gRklYTUU6IE1vc3RseSBkdXBsaWNhdGVkIGZyb20gU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseQorICAgIC8vIEJlZm9yZSBtYXBwaW5n
IGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVy
aWMgZmFtaWx5LgorICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOworCisgICAgVmVjdG9yPEF0b21TdHJp
bmc+IGZhbWlsaWVzOworICAgIGZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFJh
dy0+ZmFtaWx5LnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmb250UmF3LT5mYW1p
bHkpIHsKKyAgICAgICAgQXRvbVN0cmluZyBmYW1pbHk7CisgICAgICAgIGJvb2wgaXNHZW5lcmlj
RmFtaWx5ID0gZmFsc2U7CisgICAgICAgIHN3aXRjaE9uKGl0ZW0sIFsmXSAoQ1NTVmFsdWVJRCBp
ZGVudCkgeworICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gaWRlbnQgIT0gQ1NTVmFsdWVX
ZWJraXRCb2R5OworICAgICAgICAgICAgZmFtaWx5ID0gaXNHZW5lcmljRmFtaWx5ID8KKyAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJv
bVZhbHVlSUQoaWRlbnQpIDoKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5zZXR0aW5ncygpLnN0
YW5kYXJkRm9udEZhbWlseSgpOworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5
U3RyaW5nKSB7CisgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlTdHJpbmc7CisgICAgICAgIH0p
OworCisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNTcGVjaWZpZWRGb250KCFpc0dlbmVyaWNGYW1pbHkpOworICAgICAgICBmYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5KTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKyAgICBpZiAoZmFt
aWxpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dEZhbWlsaWVzKGZhbWlsaWVzKTsKIAotICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkg
bG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CisgICAg
ICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplQXNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gc2l6ZSA9IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRT
aXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZhbHNlLCBuZXdTdHlsZS5nZXQoKSwgZG9jdW1l
bnQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvbnQgc3R5bGUKKyAgICAvLyBGSVhN
RTogTW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN0
eWxlRnJvbVZhbHVlCisgICAgaWYgKGZvbnRSYXctPnN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAo
Zm9udFJhdy0+c3R5bGUtPnN0eWxlKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIENTU1ZhbHVlSXRhbGljOgorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhpdGFsaWNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1NTVmFsdWVPYmxpcXVlOgorICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250U2VsZWN0aW9uVmFsdWUoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhmb250UmF3LT5zdHlsZS0+
YW5nbGUudHlwZSwgZm9udFJhdy0+c3R5bGUtPmFuZ2xlLnZhbHVlKSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKChmb250UmF3LT5zdHlsZSAmJiBmb250UmF3LT5zdHls
ZS0+c3R5bGUgPT0gQ1NTVmFsdWVJdGFsaWMpID8gRm9udFN0eWxlQXhpczo6aXRhbCA6IEZvbnRT
dHlsZUF4aXM6OnNsbnQpOworCisgICAgLy8gRm9udCB2YXJpYW50IGNhcHMKKyAgICBpZiAoZm9u
dFJhdy0+dmFyaWFudENhcHMpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbXVzdCBiZSBkZWZp
bmVkIHNvbWV3aGVyZS4uLgorICAgICAgICBzd2l0Y2ggKCpmb250UmF3LT52YXJpYW50Q2Fwcykg
eworICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6Tm9ybWFsKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXBzOgorICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6U21hbGwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBbGxTbWFsbENhcHM6CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpB
bGxTbWFsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVBldGl0
ZUNhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZh
cmlhbnRDYXBzOjpQZXRpdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVBbGxQZXRpdGVDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1ZhbHVlVW5pY2FzZToKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlVuaWNhc2UpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaXRsaW5nQ2FwczoKKyAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlRpdGxpbmcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gRm9udCB3ZWlnaHQKKyAgICBpZiAoZm9udFJhdy0+d2VpZ2h0KSB7CisgICAgICAgIGF1
dG8gd2VpZ2h0ID0gc3dpdGNoT24oKmZvbnRSYXctPndlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlk
ZW50KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgp
OworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJvbGRXZWlnaHRWYWx1ZSgpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0
KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGln
aHRlcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGln
aHRlcldlaWdodChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbm9ybWFsV2VpZ2h0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwg
WyZdIChkb3VibGUgd2VpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZh
bHVlOjpjbGFtcEZsb2F0KHdlaWdodCk7CisgICAgICAgIH0pOworICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0V2VpZ2h0KHdlaWdodCk7CisgICAgfQorCisgICAgLy8gRm9udCBzaXplCisgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZh
bGlkKTsKKyAgICBmbG9hdCBzaXplID0gc3dpdGNoT24oZm9udFJhdy0+c2l6ZSwgWyZdIChDU1NW
YWx1ZUlEIGlkZW50KSB7CisgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZVh4U21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUxhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgorICAgICAg
ICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExh
cmdlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50
aWZpZXIoaWRlbnQpOworICAgICAgICAgICAgcmV0dXJuIFN0eWxlOjpmb250U2l6ZUZvcktleXdv
cmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50
KTsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJl
bnRTaXplICogMS4yZjsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CisgICAgICAgICAg
ICByZXR1cm4gcGFyZW50U2l6ZSAvIDEuMmY7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gMC5mOworICAgICAgICB9CisgICAgfSwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYgbGVuZ3RoT3JQZXJjZW50KSB7CisgICAg
ICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgeworICAgICAgICAgICAgLy8gRklY
TUU6IFBhcmVudCBzdHlsZSBpcyBvbmx5IHVzZWQgZm9yIGxpbmUtaGVpZ2h0IC0gZG8gd2UgbmVl
ZCB0byBzcGVjaWZ5IGl0IGhlcmU/CisgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIGNvbnZlcnNpb25EYXRhIHsgbmV3U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclN0eWxl
KCksIG51bGxwdHIsIGRvY3VtZW50LnJlbmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlGb250
U2l6ZSB9OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhEb3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0
aC50eXBlLCBsZW5ndGgudmFsdWUpKTsKKyAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFn
ZSkgeworICAgICAgICAgICAgcmV0dXJuIChwYXJlbnRTaXplICogcGVyY2VudGFnZSkgLyAxMDAu
ZjsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CisgICAgfQorCisgICAgLy8gTGluZSBoZWln
aHQKKyAgICBpZiAoZm9udFJhdy0+bGluZUhlaWdodCkgeworICAgICAgICBPcHRpb25hbDxMZW5n
dGg+IGxpbmVIZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy0+bGluZUhlaWdodCwgWyZdIChDU1NW
YWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwp
CisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4o
V1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSwgWyZdIChkb3VibGUgbnVtYmVyKSB7CisgICAgICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgobnVtYmVyICogMTAwLjAsIFBlcmNl
bnQpKTsKKyAgICAgICAgfSwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxl
bmd0aE9yUGVyY2VudFJhdyYgbGVuZ3RoT3JQZXJjZW50KSB7CisgICAgICAgICAgICByZXR1cm4g
c3dpdGNoT24obGVuZ3RoT3JQZXJjZW50LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6TGVuZ3RoUmF3JiBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhIHsgbmV3U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJl
bmRlclN0eWxlKCksIG51bGxwdHIsIGRvY3VtZW50LnJlbmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0IH07CisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0
aD4oTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2Fs
Y0xlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSwgbGVuZ3RoLnR5cGUsIGxlbmd0aC52YWx1ZSks
IG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0aCksIEZpeGVkKSk7Cisg
ICAgICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKChmb250RGVzY3JpcHRpb24uY29tcHV0ZWRT
aXplKCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHBlcmNlbnRhZ2UpKSAvIDEwMCwgRml4ZWQpKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBpZiAobGluZUhlaWdodCkKKyAg
ICAgICAgICAgIG5ld1N0eWxlLT5zZXRMaW5lSGVpZ2h0KFdURk1vdmUobGluZUhlaWdodC52YWx1
ZSgpKSk7CisgICAgfQorCisgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KGZvbnREZXNjcmlwdGlvbikpOworICAgIG5ld1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgm
ZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworI2lmIDAKICAgICBTdHlsZTo6TWF0Y2hSZXN1bHQg
bWF0Y2hSZXN1bHQ7CiAgICAgYXV0byBwYXJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgq
bmV3U3R5bGUpOwogICAgIFN0eWxlOjpCdWlsZGVyIHN0eWxlQnVpbGRlcigqbmV3U3R5bGUsIHsg
ZG9jdW1lbnQsIHBhcmVudFN0eWxlIH0sIG1hdGNoUmVzdWx0LCB7IH0pOwotCiAgICAgc3R5bGVC
dWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOwog
ICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUs
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5n
ZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0
eVZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFw
cGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7CiAgICAgc3R5bGVCdWls
ZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOworI2Vu
ZGlmCiAKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9u
dFNlbGVjdG9yKCksICpuZXdTdHlsZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVp
bGRlckN1c3RvbS5oCmluZGV4IGI2M2Q1ZmRmOWMxNWUyYjNkNjYwZGZiODAyMDc3N2U1MTc4MWUy
M2IuLjVlOGQxOGNiY2I1ZDYzMjdkMGZmZmU4M2I5YTQ4YjYxODUwMzZlOGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQ1NTRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHku
aCIKICNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkNvdW50ZXIuaCIKQEAg
LTk4OCw0MCArOTg5LDExIEBAIGlubGluZSB2b2lkIEJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVG
b250RmFtaWx5KEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWCiAgICAgICAgICAgICAv
LyBJZiB0aGUgZmFtaWx5IG5hbWUgd2FzIHJlc29sdmVkIGJ5IHRoZSBDU1MgcGFyc2VyIGZyb20g
YSBzeXN0ZW0gZm9udCBJRCwgdGhlbiBpdCBpcyBnZW5lcmljLgogICAgICAgICAgICAgaXNHZW5l
cmljRmFtaWx5ID0gZm9udEZhbWlseS5mcm9tU3lzdGVtRm9udElEOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUudmFsdWVJRCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Qm9keToKKyAgICAgICAgICAgIGlmIChjb250ZW50VmFs
dWUudmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0Qm9keSkgewogICAgICAgICAgICAgICAgIGZh
bWlseSA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFt
aWx5KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVl
U2VyaWY6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc2VyaWZGYW1pbHk7CisgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2Fuc1NlcmlmOgot
ICAgICAgICAgICAgICAgIGZhbWlseSA9IHNhbnNTZXJpZkZhbWlseTsKLSAgICAgICAgICAgICAg
ICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gY3Vy
c2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0g
ICAgICAgICAgICAgICAgZmFtaWx5ID0gZmFudGFzeUZhbWlseTsKLSAgICAgICAgICAgICAgICBp
c0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBtb25v
c3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0
b2dyYXBoOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAg
ICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTeXN0ZW1VaToKLSAgICAgICAgICAgICAgICBm
YW1pbHkgPSBzeXN0ZW1VaUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBDU1NQcm9wZXJ0
eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoY29udGVudFZhbHVl
LnZhbHVlSUQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409882</attachid>
            <date>2020-09-28 03:56:42 -0700</date>
            <delta_ts>2020-09-28 08:56:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200928115640.patch</filename>
            <type>text/plain</type>
            <size>49285</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKaW5kZXggNmM2MmQ0YjJlMzk3ZWFlNmU4YTNiYTYwNzA0YTZhMjQyZWE3ZWRhZi4u
ZjJhZDEyYzA5ZmY0ZDZmYTUwNzc1ZTJmOTgyMDRhY2ZhOWY5MWJlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTM4LDYgKzEzOCwxNSBAQCBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsK
IH0KIAorT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKK30KKwogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IDllMDEwNGFmOTZkOTUzYjQwNzdmMzJi
MWE3NzkxZmNhM2QwZDI5MGIuLjkyNTg5YmY2OTU3ODBhYjc5NzUyOTg3YTQ0NGRiYTc5OTIwNWM3
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtNDMsNiArNDMsMTAg
QEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3Mg
QnVpbGRlclN0YXRlOwogfQpAQCAtOTEsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcp
OwogCisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dz4gcGFyc2VGb250V29ya2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRN
TFN0YW5kYXJkTW9kZSk7CisKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCmluZGV4IGU0MDRkNDhlZjhmZmYyZWI5Zjk2Mzg3OWZjNjFlZDIyODVmZTAz
ZjkuLmNkNTcwYzMzNGE4ODcyNmQ3OWQ5NzNjNjhjODM5NzYzODMyZTRmNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNT
U1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgpAQCAtODYxLDE2ICs4NjAsMTUgQEAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmEKICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBD
U1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NW
YWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKLX0KLQog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gc3dpdGNo
T24oKnJlc3VsdCwgW10gKENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICAgICAgcmV0dXJu
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQp
OworICAgICAgICB9LCBbXSAoZG91YmxlIHdlaWdodE51bWJlcikgeworICAgICAgICAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUod2VpZ2h0TnVtYmVyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAgIH0pOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdo
dEFic29sdXRlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQpAQCAtOTA3
LDcgKzkwNSw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIAogc3RhdGljIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVVbHRy
YUNvbmRlbnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENT
U1ZhbHVlU2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVk
LCBDU1NWYWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFF
eHBhbmRlZD4ocmFuZ2UpOworICAgIGlmIChhdXRvIHZhbHVlSUQgPSBjb25zdW1lRm9udFN0cmV0
Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAgIHJldHVybiBu
dWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTk2MiwyNiArOTYy
LDE1IEBAIHN0YXRpYyBib29sIGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoZmxvYXQgb2JsaXF1ZSkK
IAogc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogewot
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShyYW5nZSk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byB2YWx1
ZUlEID0gcmVzdWx0LT52YWx1ZUlEKCk7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVOb3Jt
YWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYykKLSAgICAgICAgcmV0dXJuIENTU0ZvbnRT
dHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCkpOwotICAgIEFTU0VSVChyZXN1bHQtPnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU9ibGlxdWUpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAg
ICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1l
QW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZm9udFN0eWxl
SXNXaXRoaW5SYW5nZShhbmdsZS0+dmFsdWU8ZmxvYXQ+KENTU1VuaXRUeXBlOjpDU1NfREVHKSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVl
KSwgV1RGTW92ZShhbmdsZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUp
CisgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQtPmFuZ2xlLT52YWx1ZSwgcmVzdWx0LT5h
bmdsZS0+dHlwZSkpOwogI2VuZGlmCi0gICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVPYmxpcXVlKSk7CisgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJlc3VsdC0+c3R5
bGUpKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQpAQCAtMTAxNSwzMyArMTAwNCwxMSBAQCBzdGF0aWMgUmVmUHRyPENTU0ZvbnRT
dHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
JgogfQogI2VuZGlmCiAKLXN0YXRpYyBTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlOYW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgZmly
c3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICB3aGlsZSAocmFuZ2UucGVlaygpLnR5cGUoKSA9
PSBJZGVudFRva2VuKSB7Ci0gICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICBhZGRlZFNwYWNlID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLmFwcGVuZChyYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOwotICAgIH0KLSAgICBpZiAoIWFkZGVkU3BhY2UgJiYg
aXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlkKCkpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQogc3RhdGljIFJlZlB0cjxD
U1NWYWx1ZT4gY29uc3VtZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7
Ci0gICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pCi0gICAgICAgIHJl
dHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShyYW5n
ZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9TdHJpbmcoKSk7Ci0gICAg
aWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25jYXRlbmF0ZUZhbWlseU5hbWUocmFu
Z2UpOwotICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5
VmFsdWUoZmFtaWx5TmFtZSk7CisgICAgaWYgKGF1dG8gZmFtaWx5TmFtZSA9IGNvbnN1bWVGYW1p
bHlOYW1lUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKCpmYW1pbHlOYW1lKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdlbmVyaWNGYW1pbHkoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmgKaW5kZXggYjdlMTlmYmQ2NGE3OGMwZjdkNTljNzE0ODdkNzk2NmU3
YTBiMDk5ZS4uMDc5MTczNWFhZGVhZWI1MTgwYTBhMzQ1NTUwODZkZTVhMDdiYzA0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaApAQCAtMjIsNiAr
MjIsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5oIgogI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKICNpbmNsdWRlICJTdHls
ZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKaW5k
ZXggNjk1OGE2NjI3OGM5NThkZDFlNjI5MzRlOGQwOTM1YmE0ZWJkM2I5Yy4uNjExMWJhYzEzZDRl
OTUxYjNlMTYzOTQ5ZTRhY2ZiYTgxZDAzNTI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcApAQCAtMTI4LDE1ICsx
MjgsMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBPcHRp
b25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3KCkKKyAgICBPcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVQZXJjZW50UmF3KGJvb2wgYWxsb3dQZXJjZW50T2YgPSBmYWxzZSkKICAgICB7Ci0gICAg
ICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudCkKKyAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBtX2Nh
bGNWYWx1ZS0+Y2F0ZWdvcnkoKTsKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQpIHsKKyAgICAgICAgICAgIGlmICghYWxsb3dQZXJjZW50T2YgfHwK
KyAgICAgICAgICAgICAgICAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCAmJgorICAgICAgICAgICAgICAgICBjYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50TnVtYmVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICB9CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwogICAgICAgICBy
ZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8
QW5nbGU+IGNvbnN1bWVBbmdsZVJhdygpCisgICAgT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVB
bmdsZVJhdygpCiAgICAgewogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1fY2FsY1ZhbHVl
LT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE0NCw2ICsxNTEsMTQgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5k
b3VibGVWYWx1ZSgpIH0gfTsKICAgICB9CiAKKyAgICBPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1
bWVMZW5ndGhSYXcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2NhbGNW
YWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5n
ZTsKKyAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2Nh
bGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CisgICAgfQorCiBwcml2YXRlOgogICAgIENTU1Bh
cnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBt
X3JhbmdlOwpAQCAtMTc3LDEwICsxOTIsMTIgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgIHJl
dHVybiBjb25zdW1lSW50ZWdlcihyYW5nZSwgMSk7CiB9CiAKLWJvb2wgY29uc3VtZU51bWJlclJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1bHQpCitib29sIGNvbnN1
bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSYgcmVzdWx0LCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsK
KyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2Vu
Lm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
cmVzdWx0ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTg4LDcgKzIwNSw3IEBAIGJvb2wg
Y29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1
bHQpCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7CisgICAgQ2FsY1BhcnNlciBjYWxjUGFy
c2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFuZ2UpOwogICAg
IHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXcocmVzdWx0KTsKIH0KIApAQCAtMTk2
LDIyICsyMTMsMTkgQEAgYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdl
KQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAg
ICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7Ci0gICAgICAgIGlmICh2YWx1ZVJh
bmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS5udW1lcmljVmFsdWUoKSwgdG9rZW4udW5pdFR5cGUoKSk7Ci0gICAgfQotCi0gICAgaWYg
KHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjb25z
dCBDU1NDYWxjVmFsdWUqIGNhbGNWYWx1ZSA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAg
ICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDYWxjUGFyc2VyIGNh
bGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7
Ci0gICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1ZhbHVlID0gY2FsY1BhcnNlci52YWx1
ZSgpKSB7Ci0gICAgICAgIGlmIChjYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwogICAgIH0KIAorICAgIGRvdWJsZSBudW1i
ZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwgdmFsdWVSYW5nZSkp
CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51
bWJlciwgdG9rZW4udW5pdFR5cGUoKSk7CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAt
MjIyLDcgKzIzNiw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXZpc2libGVCeTEwMChkb3VibGUg
dmFsdWUpCiB9CiAjZW5kaWYKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9u
dFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK09wdGlvbmFsPGRvdWJs
ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Up
CiB7CiAgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhh
biBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMuCiAgICAgYXV0byYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CkBAIC0yMzAsMTEgKzI0NCwxNSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQog
I2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogICAgICAgICAmJiB0b2tlbi5udW1lcmljVmFs
dWVUeXBlKCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZpc2libGVCeTEwMCh0b2tlbi5udW1l
cmljVmFsdWUoKSkKICNlbmRpZgotICAgICkKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXIo
cmFuZ2UsIFZhbHVlUmFuZ2VBbGwpOworICAgICkgeworICAgICAgICBkb3VibGUgcmVzdWx0Owor
ICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwgcmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQogCiAg
ICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vICJbRm9yIGNhbGMo
KV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4cHJlc3Npb24gbXVzdCBiZSBj
bGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0YXJnZXQgY29udGV4dC4iCiAgICAg
Q2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIs
IFZhbHVlUmFuZ2VBbGwpOwpAQCAtMjQ1LDkgKzI2MywxNiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJl
c3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6bmV4dGFmdGVyKDEwMDAuLCAwLikp
OwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShy
ZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3
KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAgIHJldHVybiBudWxs
cHRyOwogfQogCkBAIC0yNTksMTQgKzI4NCwxNCBAQCBpbmxpbmUgYm9vbCBzaG91bGRBY2NlcHRV
bml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLAog
ICAgICAgICB8fCAoY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVpcmtzTW9kZSAmJiB1bml0bGVzcyA9
PSBVbml0bGVzc1F1aXJrOjpBbGxvdyk7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxl
c3MpCitPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewogICAgIGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVu
c2lvblRva2VuKSB7CiAgICAgICAgIHN3aXRjaCAodG9rZW4udW5pdFR5cGUoKSkgewogICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKICAgICAgICAgICAgIGlmIChjc3NQ
YXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBGQUxM
VEhST1VHSDsKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKICAgICAgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CkBAIC0yODcsMjggKzMxMiwzOSBAQCBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IENTU1BhcnNlck1vZAogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGlm
ICgodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJpY1Zh
bHVlKCkgPCAwKSB8fCBzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVy
aWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgdG9rZW4udW5pdFR5cGUoKSwgcmFuZ2UuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07CiAgICAgfQogICAgIGlm
ICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKICAgICAgICAgaWYgKCFzaG91bGRBY2Nl
cHRVbml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCBjc3NQYXJzZXJNb2RlLCB1bml0
bGVzcykKICAgICAgICAgICAgIHx8ICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2
ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoc3RkOjpp
c2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgQ1NTVW5pdFR5cGUgdW5pdFR5cGUgPSBDU1NVbml0VHlwZTo6Q1NTX1BYOwotICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB1bml0VHlwZSk7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyB7IENTU1Vu
aXRUeXBlOjpDU1NfUFgsIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJp
Y1ZhbHVlKCkgfSB9OwogICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25U
b2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBj
YWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoKQotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICByZXR1
cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoUmF3KCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAg
ICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjYWxjUGFyc2VyLnZhbHVlKCkgJiYgY2FsY1Bh
cnNlci52YWx1ZSgpLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkK
KyAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAgIH0KKwor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1v
ZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmVzdWx0LT52YWx1ZSwgcmVzdWx0LT50eXBlKTsKIAog
ICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzMzLDcgKzM2OSw3IEBAIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZh
bHVlUmFuZ2UKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVr
KCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENh
bGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHZh
bHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwogICAgICAgICBpZiAoY29uc3QgQ1NT
Q2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgewogICAgICAgICAg
ICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7
CkBAIC0zNjEsMjYgKzM5Nyw2MCBAQCBzdGF0aWMgYm9vbCBjYW5Db25zdW1lQ2FsY1ZhbHVlKENh
bGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENTU1BhcnNlck1vZGUgY3NzUAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK09w
dGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKQotICAg
ICAgICByZXR1cm4gY29uc3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5n
ZSwgdW5pdGxlc3MpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKQot
ICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVlUmFuZ2UpOworICAgIGlm
ICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJl
clRva2VuKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFu
Z2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgICAgIHJl
dHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9Cisg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsKKyAgICAgICAgaWYgKGF1
dG8gcmVzdWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxj
UGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFs
dWVSYW5nZSk7CiAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxj
UGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3Vs
YXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGNh
bGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGlmIChjYW5Db25zdW1lQ2FsY1ZhbHVl
KGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJNb2RlKSkgeworICAgICAgICAgICAg
aWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNhbGNQYXJzZXIuY29uc3Vt
ZUxlbmd0aFJhdygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IGNh
bGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcodHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVu
aXRsZXNzKQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWso
KTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKKyAgICAgICAgQ2Fs
Y1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIHZh
bHVlUmFuZ2UpOworICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9
IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxjVmFs
dWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRs
ZXNzKSkKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtdIChMZW5ndGhSYXcgbGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAgICAgICAgICB9LCBb
XSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NVbml0VHlwZTo6Q1NT
X1BFUkNFTlRBR0UpOworICAgICAgICAgICAgfSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LU9wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykK
K09wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVz
cykKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgewpAQCAtNTAyLDExICs1NzIs
MjUgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlvbihDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQWxsb3dYUmUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRl
bnRUb2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCkuaWQoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
cmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKK30KKworUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkK
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKCpyZXN1bHQpOworICAgIHJldHVybiBudWxscHRyOworfQorCitPcHRpb25hbDxDU1NW
YWx1ZUlEPiBjb25zdW1lSWRlbnRSYW5nZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKK3sKKyAgICBpZiAocmFuZ2UucGVl
aygpLmlkKCkgPCBsb3dlciB8fCByYW5nZS5wZWVrKCkuaWQoKSA+IHVwcGVyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBjb25zdW1lSWRlbnRSYXcocmFuZ2UpOwog
fQogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFJhbmdlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKQpA
QCAtMTgwMyw2ICsxODg3LDIyOCBAQCBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVJbWFnZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBjb250ZQogICAgIHJldHVy
biBudWxscHRyOwogfQogCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFZhcmlhbnRD
U1MyMVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3Vt
ZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOworfQor
CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZVJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3
PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxp
Z2h0ZXI+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Rm9udFdlaWdodFJhdz4gY29uc3VtZUZvbnRX
ZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4geyAqcmVzdWx0IH07CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWln
aHROdW1iZXJSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRT
dHJldGNoS2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAg
IHJldHVybiBjb25zdW1lSWRlbnRSYXc8Q1NTVmFsdWVVbHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVF
eHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENTU1ZhbHVlU2VtaUNvbmRlbnNlZCwg
Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVkLCBDU1NWYWx1ZUV4cGFuZGVkLCBD
U1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFFeHBhbmRlZD4ocmFuZ2UpOworfQor
CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRSYXc8
Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9ibGlxdWU+KHJhbmdlKTsK
K30KKworT3B0aW9uYWw8Rm9udFN0eWxlUmF3PiBjb25zdW1lRm9udFN0eWxlUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAg
YXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlUmF3KHJhbmdlKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8g
aWRlbnQgPSAqcmVzdWx0OworICAgIGlmIChpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZGVu
dCA9PSBDU1NWYWx1ZUl0YWxpYykKKyAgICAgICAgcmV0dXJuIHsgeyBpZGVudCwgV1RGOjpudWxs
b3B0IH0gfTsKKyAgICBBU1NFUlQoaWRlbnQgPT0gQ1NTVmFsdWVPYmxpcXVlKTsKKyNpZiBFTkFC
TEUoVkFSSUFUSU9OX0ZPTlRTKQorICAgIGlmICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBp
ZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsK
KyAgICAgICAgICAgIGF1dG8gYW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7CisgICAgICAgICAgICBpZiAo
Zm9udFN0eWxlSXNXaXRoaW5SYW5nZShhbmdsZUluRGVncmVlcykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgeyBDU1NWYWx1ZU9ibGlxdWUsIFdURk1vdmUoYW5nbGUpIH0gfTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyNlbmRpZgorICAgIHJldHVybiB7IHsgQ1NTVmFs
dWVPYmxpcXVlLCBXVEY6Om51bGxvcHQgfSB9OworfQorCitTdHJpbmcgY29uY2F0ZW5hdGVGYW1p
bHlOYW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKKyAgICBjb25zdCBDU1NQYXJz
ZXJUb2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB3aGlsZSAocmFuZ2UucGVl
aygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBhZGRl
ZFNwYWNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZChyYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoIWFk
ZGVkU3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlkKCkpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworT3B0
aW9uYWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdUb2tlbikKKyAg
ICAgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKS50
b1N0cmluZygpOworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25j
YXRlbmF0ZUZhbWlseU5hbWUocmFuZ2UpOworICAgIGlmIChmYW1pbHlOYW1lLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBmYW1pbHlOYW1lOworfQor
CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmFuZ2VSYXcocmFu
Z2UsIENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlV2Via2l0Qm9keSk7Cit9CisKK09wdGlvbmFsPFdU
Rjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBjb25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3PiBsaXN0
OworICAgIGRvIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lR2VuZXJpY0ZhbWls
eVJhdyhyYW5nZSkpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh7ICppZGVudCB9KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byBzdHJpbmcgPSBjb25zdW1lRmFtaWx5TmFt
ZVJhdyhyYW5nZSkpCisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqc3RyaW5nIH0pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgIH0KKyAgICB9IHdoaWxlIChjb25zdW1lQ29tbWFJbmNsdWRpbmdXaGl0ZXNwYWNlKHJh
bmdlKSk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK09wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25z
dW1lRm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUg
Y3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBpZiAocmFuZ2Uu
cGVlaygpLmlkKCkgPj0gQ1NTVmFsdWVYeFNtYWxsICYmIHJhbmdlLnBlZWsoKS5pZCgpIDw9IENT
U1ZhbHVlTGFyZ2VyKSB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3
KHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7ICppZGVudCB9OworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2
ZSwgdW5pdGxlc3MpKQorICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhl
aWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkg
eworICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAg
ICAgICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICBkb3VibGUgbnVtYmVyOworICAgIGlmIChjb25zdW1lTnVtYmVyUmF3KHJh
bmdlLCBudW1iZXIsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB7IG51
bWJlciB9OworCisgICAgaWYgKGF1dG8gbGVuZ3RoT3JQZXJjZW50ID0gY29uc3VtZUxlbmd0aE9y
UGVyY2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkK
KyAgICAgICAgcmV0dXJuIHsgKmxlbmd0aE9yUGVyY2VudCB9OworCisgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKK30KKworT3B0aW9uYWw8Rm9udFJhdz4gY29uc3VtZUZvbnRXb3JrZXJTYWZlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7
CisgICAgLy8gTGV0J3MgY2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5oZXJpdCBvciBpbml0aWFsIHNv
bWV3aGVyZSBpbiB0aGUgc2hvcnRoYW5kLgorICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2VD
b3B5ID0gcmFuZ2U7CisgICAgd2hpbGUgKCFyYW5nZUNvcHkuYXRFbmQoKSkgeworICAgICAgICBD
U1NWYWx1ZUlEIGlkID0gcmFuZ2VDb3B5LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQo
KTsKKyAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCB8fCBpZCA9PSBDU1NWYWx1ZUlu
aXRpYWwpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIEZv
bnRSYXcgcmVzdWx0OworCisgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CisgICAgICAgIENT
U1ZhbHVlSUQgaWQgPSByYW5nZS5wZWVrKCkuaWQoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc3R5
bGUpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0eWxlID0gY29uc3VtZUZvbnRTdHlsZVJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LnZhcmlhbnRDYXBzICYmIChpZCA9PSBDU1NWYWx1
ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNtYWxsQ2FwcykpIHsKKyAgICAgICAgICAgIC8vIEZv
bnQgdmFyaWFudCBpbiB0aGUgc2hvcnRoYW5kIGlzIHBhcnRpY3VsYXIsIGl0IG9ubHkgYWNjZXB0
cyBub3JtYWwgb3Igc21hbGwtY2Fwcy4KKyAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLWZvbnRzLyNwcm9wZGVmLWZvbnQKKyAgICAgICAgICAgIGlmICgocmVz
dWx0LnZhcmlhbnRDYXBzID0gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcocmFuZ2UpKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdC53
ZWlnaHQpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LndlaWdodCA9IGNvbnN1bWVGb250V2Vp
Z2h0UmF3KHJhbmdlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFyZXN1bHQuc3RyZXRjaCkgeworICAgICAgICAgICAgaWYgKChyZXN1bHQuc3Ry
ZXRjaCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhyYW5nZSkpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgLy8gTm93IGEgZm9udCBzaXplIF9tdXN0XyBjb21lLgorICAgIGlmIChhdXRvIHNpemUgPSBj
b25zdW1lRm9udFNpemVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKQorICAgICAgICByZXN1bHQu
c2l6ZSA9ICpzaXplOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGlmIChyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgaWYgKGNvbnN1bWVTbGFzaEluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKSB7CisgICAgICAg
IGlmICghKHJlc3VsdC5saW5lSGVpZ2h0ID0gY29uc3VtZUxpbmVIZWlnaHRSYXcocmFuZ2UsIGNz
c1BhcnNlck1vZGUpKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQor
CisgICAgLy8gRm9udCBmYW1pbHkgbXVzdCBjb21lIG5vdy4KKyAgICBpZiAoYXV0byBmYW1pbHkg
PSBjb25zdW1lRm9udEZhbWlseVJhdyhyYW5nZSkpCisgICAgICAgIHJlc3VsdC5mYW1pbHkgPSAq
ZmFtaWx5OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlm
ICghcmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0F0b21TdHJpbmcgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJ
RChDU1NWYWx1ZUlEIGlkZW50KQoreworICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICBjYXNlIENT
U1ZhbHVlU2VyaWY6CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseTsKKyAgICBjYXNlIENTU1Zh
bHVlU2Fuc1NlcmlmOgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5OworICAgIGNhc2Ug
Q1NTVmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseTsKKyAgICBjYXNl
IENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHk7CisgICAgY2Fz
ZSBDU1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9zcGFjZUZhbWlseTsKKyAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAgICAgICAgcmV0dXJuIHBpY3RvZ3Jh
cGhGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1ZVN5c3RlbVVpOgorICAgICAgICByZXR1cm4gc3lz
dGVtVWlGYW1pbHk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVycwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaAppbmRleCBhODdiZDIwYWEyYTUyMzYxNGJkMzgzYmMwODM1NzQ0
ODRmYTQwNmJiLi4xNWM5MWMyY2Y1ZjMwOWE0M2UwZmFmNTdhMjBjMDEzNjc1ZDcxZmJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmgKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNs
dWRlICJMZW5ndGguaCIgLy8gRm9yIFZhbHVlUmFuZ2UKICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTUsMjggKzU3LDQxIEBAIENTU1BhcnNlclRva2Vu
UmFuZ2UgY29uc3VtZUZ1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIGVudW0gY2xhc3Mg
VW5pdGxlc3NRdWlyayB7IEFsbG93LCBGb3JiaWQgfTsKIGVudW0gY2xhc3MgQWxsb3dYUmVzb2x1
dGlvblVuaXQgeyBBbGxvdywgRm9yYmlkIH07CiAKLXN0cnVjdCBBbmdsZSB7CitzdHJ1Y3QgQW5n
bGVSYXcgewogICAgIENTU1VuaXRUeXBlIHR5cGU7CiAgICAgZG91YmxlIHZhbHVlOwogfTsKIAor
c3RydWN0IExlbmd0aFJhdyB7CisgICAgQ1NTVW5pdFR5cGUgdHlwZTsKKyAgICBkb3VibGUgdmFs
dWU7Cit9OworCit1c2luZyBMZW5ndGhPclBlcmNlbnRSYXcgPSBXVEY6OlZhcmlhbnQ8TGVuZ3Ro
UmF3LCBkb3VibGU+OworCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJbnRlZ2Vy
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUgbWluaW11bVZhbHVlID0gLXN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKLWJvb2wgY29uc3VtZU51
bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1bHQpOworYm9vbCBjb25z
dW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUmIHJlc3VsdCwgVmFsdWVS
YW5nZSA9IFZhbHVlUmFuZ2VBbGwpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKK09wdGlvbmFsPGRvdWJs
ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJU
b2tlblJhbmdlJik7CitPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsg
PSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
LCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIE9wdGlvbmFsPGRvdWJs
ZT4gY29uc3VtZVBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UgPSBW
YWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworT3B0aW9uYWw8TGVuZ3RoT3JQZXJj
ZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBD
U1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6
Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2Vu
dChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7Ci1PcHRpb25hbDxBbmdsZT4gY29uc3Vt
ZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1
aXJrKTsKK09wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQW5nbGUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpG
b3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lVGltZShDU1NQYXJzZXJU
b2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVu
aXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVS
ZXNvbHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBBbGxvd1hSZXNvbHV0aW9uVW5pdCA9IEFs
bG93WFJlc29sdXRpb25Vbml0OjpGb3JiaWQpOwogCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25z
dW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFs
dWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVl
SUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwg
Q1NTVmFsdWVJRCB1cHBlcik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlELi4uPiBp
bmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCBpZCk7Cit0ZW1wbGF0ZTxDU1NWYWx1
ZUlELi4uIGFsbG93ZWRJZGVudHM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIGFsbG93ZWRJ
ZGVudHM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmKTsKIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lQ3VzdG9tSWRl
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwpAQCAtMTE1LDYgKzEzMCw0MCBAQCBlbnVtIGNsYXNz
IEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMgewogUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmlsdGVy
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiwgQWxsb3dlZEZp
bHRlckZ1bmN0aW9ucyk7CiBSZWZQdHI8Q1NTU2hhZG93VmFsdWU+IGNvbnN1bWVTaW5nbGVTaGFk
b3coQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIGJvb2wgYWxsb3dJbnNldCwg
Ym9vbCBhbGxvd1NwcmVhZCk7CiAKK3N0cnVjdCBGb250U3R5bGVSYXcgeworICAgIENTU1ZhbHVl
SUQgc3R5bGU7CisgICAgT3B0aW9uYWw8QW5nbGVSYXc+IGFuZ2xlOworfTsKK3VzaW5nIEZvbnRX
ZWlnaHRSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NTVmFsdWVJRCwgZG91YmxlPjsKK3VzaW5nIEZvbnRT
aXplUmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIENTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6TGVuZ3RoT3JQZXJjZW50UmF3PjsKK3VzaW5nIExpbmVIZWlnaHRSYXcgPSBXVEY6OlZhcmlh
bnQ8Q1NTVmFsdWVJRCwgZG91YmxlLCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9y
UGVyY2VudFJhdz47Cit1c2luZyBGb250RmFtaWx5UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVl
SUQsIFN0cmluZz47CisKK3N0cnVjdCBGb250UmF3IHsKKyAgICBPcHRpb25hbDxGb250U3R5bGVS
YXc+IHN0eWxlOworICAgIE9wdGlvbmFsPENTU1ZhbHVlSUQ+IHZhcmlhbnRDYXBzOworICAgIE9w
dGlvbmFsPEZvbnRXZWlnaHRSYXc+IHdlaWdodDsKKyAgICBPcHRpb25hbDxDU1NWYWx1ZUlEPiBz
dHJldGNoOworICAgIEZvbnRTaXplUmF3IHNpemU7CisgICAgT3B0aW9uYWw8TGluZUhlaWdodFJh
dz4gbGluZUhlaWdodDsKKyAgICBXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3PiBmYW1pbHk7Cit9
OworCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFdlaWdo
dEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxGb250V2Vp
Z2h0UmF3PiBjb25zdW1lRm9udFdlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRp
b25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHlsZUtl
eXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxGb250U3R5bGVS
YXc+IGNvbnN1bWVGb250U3R5bGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUpOworU3RyaW5nIGNvbmNhdGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJik7
CitPcHRpb25hbDxTdHJpbmc+IGNvbnN1bWVGYW1pbHlOYW1lUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVHZW5lcmljRmFtaWx5UmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPFdURjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBj
b25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxGb250
U2l6ZVJhdz4gY29uc3VtZUZvbnRTaXplUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJz
ZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsK
K09wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250
V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitBdG9tU3Ry
aW5nIGdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoQ1NTVmFsdWVJRCk7CisKIC8vIFRlbXBs
YXRlIGltcGxlbWVudGF0aW9ucyBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSBmb3IgcmVh
ZGFiaWxpdHkuCiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4uIGVtcHR5QmFzZUNhc2U+IGlubGluZSBi
b29sIGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUlEKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTIzLDYg
KzE3MiwxMyBAQCB0ZW1wbGF0ZTxDU1NWYWx1ZUlEIGhlYWQsIENTU1ZhbHVlSUQuLi4gdGFpbD4g
aW5saW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSQogICAgIHJldHVybiBpZCA9PSBoZWFk
IHx8IGlkZW50TWF0Y2hlczx0YWlsLi4uPihpZCk7CiB9CiAKK3RlbXBsYXRlPENTU1ZhbHVlSUQu
Li4gbmFtZXM+IE9wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVu
dFRva2VuIHx8ICFpZGVudE1hdGNoZXM8bmFtZXMuLi4+KHJhbmdlLnBlZWsoKS5pZCgpKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1
ZGluZ1doaXRlc3BhY2UoKS5pZCgpOworfQorCiB0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIG5hbWVz
PiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKIHsKICAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2Vu
IHx8ICFpZGVudE1hdGNoZXM8bmFtZXMuLi4+KHJhbmdlLnBlZWsoKS5pZCgpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCmluZGV4IDg5MTgwMjc5YWYyYjdmNzY1NmJjZGRmOGVlYzA4MzMzYjY1YzYxNDguLjEyYzFl
MWZhYjNjYTExZDA3NTA1NzgzZGMzMGUyNjEyODhkYzRjNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAt
MzYsMTUgKzM2LDE5IEBACiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJQYXRoMkQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyLmgiCisjaW5j
bHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGll
cy5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgpAQCAt
MTM0LDYgKzEzOCwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChj
b25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51bnBhcnNl
ZEZvbnQgJiYgc3RhdGUoKS5mb250LnJlYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGF1dG8gZm9udFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBz
dHJpY3RUb0NTU1BhcnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsK
KyAgICBpZiAoIWZvbnRSYXcpCisgICAgICAgIHJldHVybjsKKworI2lmIDAKICAgICBhdXRvIHBh
cnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLCBDU1NQcm9wZXJ0eUZvbnQsIG5ld0ZvbnQsIHRy
dWUsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9k
ZSkpOwogICAgIGlmIChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQpAQCAtMTQ1LDcgKzE1NCw3IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3
Rm9udCkKICAgICAvLyB0aGUgImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUg
aWdub3JlZC4KICAgICBpZiAoZm9udFZhbHVlID09ICJpbmhlcml0IiB8fCBmb250VmFsdWUgPT0g
ImluaXRpYWwiKQogICAgICAgICByZXR1cm47Ci0KKyNlbmRpZgogICAgIC8vIFRoZSBwYXJzZSBz
dWNjZWVkZWQuCiAgICAgU3RyaW5nIG5ld0ZvbnRTYWZlQ29weShuZXdGb250KTsgLy8gQ3JlYXRl
IGEgc3RyaW5nIGNvcHkgc2luY2UgbmV3Rm9udCBjYW4gYmUgZGVsZXRlZCBpbnNpZGUgcmVhbGl6
ZVNhdmVzLgogICAgIHJlYWxpemVTYXZlcygpOwpAQCAtMTU4LDMxICsxNjcsMjA4IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkK
ICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS5kb2N1bWVudCgpOwogICAgIGRvY3Vt
ZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAorICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uOwogICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gY2FudmFzKCku
Y29tcHV0ZWRTdHlsZSgpKQotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSB9
KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNv
bXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpIH07CiAgICAgZWxzZSB7Ci0gICAgICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgZGVm
YXVsdEZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOwotICAg
ICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRT
aXplKTsKLSAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoRGVm
YXVsdEZvbnRTaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShEZWZh
dWx0Rm9udEZhbWlseSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KERlZmF1bHRGb250U2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoRGVmYXVsdEZvbnRTaXplKTsKKyAgICB9CiAKLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihXVEZNb3ZlKGRlZmF1bHRGb250RGVzY3JpcHRpb24pKTsKKyAgICAvLyBOb3cg
bWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KKyAgICBmbG9h
dCBwYXJlbnRTaXplID0gZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKKworICAgIC8v
IEZvbnQgZmFtaWx5CisgICAgLy8gRklYTUU6IE1vc3RseSBkdXBsaWNhdGVkIGZyb20gU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseQorICAgIC8vIEJlZm9yZSBtYXBwaW5n
IGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVy
aWMgZmFtaWx5LgorICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOworCisgICAgVmVjdG9yPEF0b21TdHJp
bmc+IGZhbWlsaWVzOworICAgIGZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZm9udFJh
dy0+ZmFtaWx5LnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBmb250UmF3LT5mYW1p
bHkpIHsKKyAgICAgICAgQXRvbVN0cmluZyBmYW1pbHk7CisgICAgICAgIGJvb2wgaXNHZW5lcmlj
RmFtaWx5ID0gZmFsc2U7CisgICAgICAgIHN3aXRjaE9uKGl0ZW0sIFsmXSAoQ1NTVmFsdWVJRCBp
ZGVudCkgeworICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gaWRlbnQgIT0gQ1NTVmFsdWVX
ZWJraXRCb2R5OworICAgICAgICAgICAgZmFtaWx5ID0gaXNHZW5lcmljRmFtaWx5ID8KKyAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJv
bVZhbHVlSUQoaWRlbnQpIDoKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5zZXR0aW5ncygpLnN0
YW5kYXJkRm9udEZhbWlseSgpOworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5
U3RyaW5nKSB7CisgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlTdHJpbmc7CisgICAgICAgIH0p
OworCisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGlmIChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNTcGVjaWZpZWRGb250KCFpc0dlbmVyaWNGYW1pbHkpOworICAgICAgICBmYW1p
bGllcy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5KTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9u
dENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKyAgICBpZiAoZmFt
aWxpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dEZhbWlsaWVzKGZhbWlsaWVzKTsKIAotICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkg
bG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CisgICAg
ICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplQXNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gc2l6ZSA9IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRT
aXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZhbHNlLCBuZXdTdHlsZS5nZXQoKSwgZG9jdW1l
bnQpKTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8vIEZvbnQgc3R5bGUKKyAgICAvLyBGSVhN
RTogTW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN0
eWxlRnJvbVZhbHVlCisgICAgaWYgKGZvbnRSYXctPnN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAo
Zm9udFJhdy0+c3R5bGUtPnN0eWxlKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENTU1ZhbHVlSXRhbGljOgorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhpdGFsaWNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1NTVmFsdWVPYmxpcXVlOiB7CisgICAgICAgICAg
ICBmbG9hdCBkZWdyZWVzOworICAgICAgICAgICAgaWYgKGZvbnRSYXctPnN0eWxlLT5hbmdsZSkK
KyAgICAgICAgICAgICAgICBkZWdyZWVzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhmb250UmF3LT5zdHlsZS0+YW5nbGUtPnR5cGUsIGZvbnRS
YXctPnN0eWxlLT5hbmdsZS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBkZWdyZWVzID0gMDsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMo
Rm9udFNlbGVjdGlvblZhbHVlKGRlZ3JlZXMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9udERlc2NyaXB0
aW9uLnNldEZvbnRTdHlsZUF4aXMoKGZvbnRSYXctPnN0eWxlICYmIGZvbnRSYXctPnN0eWxlLT5z
dHlsZSA9PSBDU1NWYWx1ZUl0YWxpYykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxl
QXhpczo6c2xudCk7CisKKyAgICAvLyBGb250IHZhcmlhbnQgY2FwcworICAgIGlmIChmb250UmF3
LT52YXJpYW50Q2FwcykgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBtdXN0IGJlIGRlZmluZWQg
c29tZXdoZXJlLi4uCisgICAgICAgIHN3aXRjaCAoKmZvbnRSYXctPnZhcmlhbnRDYXBzKSB7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpTbWFsbCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2FwczoKKyAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OkFsbFNt
YWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlUGV0aXRlQ2Fw
czoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFu
dENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUFsbFBldGl0ZUNhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENh
cHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRpdGxpbmdDYXBzOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VGl0bGluZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBGb250IHdlaWdodAorICAgIGlmIChmb250UmF3LT53ZWlnaHQpIHsKKyAgICAgICAgYXV0byB3
ZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy0+d2VpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbFdlaWdodFZhbHVlKCk7Cisg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYm9s
ZFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZGVyOgorICAgICAg
ICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpib2xkZXJXZWlnaHQoZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVy
OgorICAgICAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVy
V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSk7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9LCBbJl0g
KGRvdWJsZSB3ZWlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWU6
OmNsYW1wRmxvYXQod2VpZ2h0KTsKKyAgICAgICAgfSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRXZWlnaHQod2VpZ2h0KTsKKyAgICB9CisKKyAgICAvLyBGb250IHNpemUKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQp
OworICAgIGZsb2F0IHNpemUgPSBzd2l0Y2hPbihmb250UmF3LT5zaXplLCBbJl0gKENTU1ZhbHVl
SUQgaWRlbnQpIHsKKyAgICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICBjYXNlIENTU1Zh
bHVlWHhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZVNtYWxsOgorICAgICAgICBjYXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICBjYXNl
IENTU1ZhbHVlTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVYeExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6
CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmll
cihpZGVudCk7CisgICAgICAgICAgICByZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChp
ZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1lbnQpOwor
ICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgorICAgICAgICAgICAgcmV0dXJuIHBhcmVudFNp
emUgKiAxLjJmOworICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgIHJl
dHVybiBwYXJlbnRTaXplIC8gMS4yZjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiAwLmY7CisgICAgICAgIH0KKyAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAgICAg
cmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
UGFyZW50IHN0eWxlIGlzIG9ubHkgdXNlZCBmb3IgbGluZS1oZWlnaHQgLSBkbyB3ZSBuZWVkIHRv
IHNwZWNpZnkgaXQgaGVyZT8KKyAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEg
Y29udmVyc2lvbkRhdGEgeyBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwg
bnVsbHB0ciwgZG9jdW1lbnQucmVuZGVyVmlldygpLCAxLjBmLCBDU1NQcm9wZXJ0eUZvbnRTaXpl
IH07CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSwgbGVuZ3RoLnR5
cGUsIGxlbmd0aC52YWx1ZSkpOworICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7
CisgICAgICAgICAgICByZXR1cm4gKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC5mOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGlmIChzaXplID4gMCkgeworICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShzaXplKTsKKyAgICB9CisKKyAgICAvLyBMaW5lIGhlaWdodAor
ICAgIGlmIChmb250UmF3LT5saW5lSGVpZ2h0KSB7CisgICAgICAgIE9wdGlvbmFsPExlbmd0aD4g
bGluZUhlaWdodCA9IHN3aXRjaE9uKCpmb250UmF3LT5saW5lSGVpZ2h0LCBbJl0gKENTU1ZhbHVl
SUQgaWRlbnQpIHsKKyAgICAgICAgICAgIGlmIChpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihXVEY6
Om51bGxvcHQpOworICAgICAgICB9LCBbJl0gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxMZW5ndGg+KExlbmd0aChudW1iZXIgKiAxMDAuMCwgUGVyY2VudCkp
OworICAgICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3Ro
T3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzd2l0
Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
OjpMZW5ndGhSYXcmIGxlbmd0aCkgeworICAgICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVy
U3R5bGUoKSwgbnVsbHB0ciwgZG9jdW1lbnQucmVuZGVyVmlldygpLCAxLjBmLCBDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihM
ZW5ndGgoY2xhbXBUbzxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVu
Z3RoRG91YmxlKGNvbnZlcnNpb25EYXRhLCBsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlKSwgbWlu
VmFsdWVGb3JDc3NMZW5ndGgsIG1heFZhbHVlRm9yQ3NzTGVuZ3RoKSwgRml4ZWQpKTsKKyAgICAg
ICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgoKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUo
KSAqIHN0YXRpY19jYXN0PGludD4ocGVyY2VudGFnZSkpIC8gMTAwLCBGaXhlZCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChsaW5lSGVpZ2h0KQorICAgICAg
ICAgICAgbmV3U3R5bGUtPnNldExpbmVIZWlnaHQoV1RGTW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkp
KTsKKyAgICB9CisKKyAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9u
dERlc2NyaXB0aW9uKSk7CisgICAgbmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1
bWVudC5mb250U2VsZWN0b3IoKSk7CisjaWYgMAogICAgIFN0eWxlOjpNYXRjaFJlc3VsdCBtYXRj
aFJlc3VsdDsKICAgICBhdXRvIHBhcmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKCpuZXdT
dHlsZSk7CiAgICAgU3R5bGU6OkJ1aWxkZXIgc3R5bGVCdWlsZGVyKCpuZXdTdHlsZSwgeyBkb2N1
bWVudCwgcGFyZW50U3R5bGUgfSwgbWF0Y2hSZXN1bHQsIHsgfSk7Ci0KICAgICBzdHlsZUJ1aWxk
ZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSk7CiAgICAg
c3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgp
KTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFZh
cmlhbnRDYXBzLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50Q2FwcykuZ2V0KCkpOwogICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFs
dWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpLmdldCgpKTsKICAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQ
cm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKICAgICBzdHlsZUJ1aWxkZXIu
YXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CisjZW5kaWYK
IAogICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2Vs
ZWN0b3IoKSwgKm5ld1N0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVy
Q3VzdG9tLmgKaW5kZXggYjYzZDVmZGY5YzE1ZTJiM2Q2NjBkZmI4MDIwNzc3ZTUxNzgxZTIzYi4u
NWU4ZDE4Y2JjYjVkNjMyN2QwZmZmZTgzYjlhNDhiNjE4NTAzNmU4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJDU1NGb250VmFsdWUuaCIKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFy
c2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eS5oIgog
I2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgpAQCAtOTg4
LDQwICs5ODksMTEgQEAgaW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRG
YW1pbHkoQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1YKICAgICAgICAgICAgIC8vIElm
IHRoZSBmYW1pbHkgbmFtZSB3YXMgcmVzb2x2ZWQgYnkgdGhlIENTUyBwYXJzZXIgZnJvbSBhIHN5
c3RlbSBmb250IElELCB0aGVuIGl0IGlzIGdlbmVyaWMuCiAgICAgICAgICAgICBpc0dlbmVyaWNG
YW1pbHkgPSBmb250RmFtaWx5LmZyb21TeXN0ZW1Gb250SUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgorICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRCb2R5KSB7CiAgICAgICAgICAgICAgICAgZmFtaWx5
ID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5zdGFuZGFyZEZvbnRGYW1pbHko
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTZXJp
ZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzZXJpZkZhbWlseTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5ID0gc2Fuc1NlcmlmRmFtaWx5OwotICAgICAgICAgICAgICAgIGlz
R2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBjdXJzaXZl
RmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKLSAgICAg
ICAgICAgICAgICBmYW1pbHkgPSBmYW50YXN5RmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2Vu
ZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IG1vbm9zcGFj
ZUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3Jh
cGg6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gcGljdG9ncmFwaEZhbWlseTsKLSAgICAgICAg
ICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN5c3RlbVVpOgotICAgICAgICAgICAgICAgIGZhbWls
eSA9IHN5c3RlbVVpRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZhbWlseSA9IENTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChjb250ZW50VmFsdWUudmFs
dWVJRCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409889</attachid>
            <date>2020-09-28 08:56:45 -0700</date>
            <delta_ts>2020-09-29 02:38:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200928165643.patch</filename>
            <type>text/plain</type>
            <size>49480</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKaW5kZXggNmM2MmQ0YjJlMzk3ZWFlNmU4YTNiYTYwNzA0YTZhMjQyZWE3ZWRhZi4u
ZjJhZDEyYzA5ZmY0ZDZmYTUwNzc1ZTJmOTgyMDRhY2ZhOWY5MWJlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTM4LDYgKzEzOCwxNSBAQCBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gQ1NTUGFyc2VyOjpwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQogICAgIHJldHVybiBDU1NQYXJzZXJGYXN0UGF0aHM6OnBhcnNlSGV4Q29sb3Ioc3RyaW5nKTsK
IH0KIAorT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBDU1NQYXJz
ZXI6OnBhcnNlRm9udFdvcmtlclNhZmUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIENTU1BhcnNlck1v
ZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVyKHN0cmluZyk7
CisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSh0b2tlbml6ZXIudG9rZW5SYW5nZSgpKTsK
KyAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXb3JrZXJTYWZlKHJhbmdlLCBjc3NQYXJzZXJNb2Rl
KTsKK30KKwogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU2luZ2xlVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IDllMDEwNGFmOTZkOTUzYjQwNzdmMzJi
MWE3NzkxZmNhM2QwZDI5MGIuLjkyNTg5YmY2OTU3ODBhYjc5NzUyOTg3YTQ0NGRiYTc5OTIwNWM3
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaApAQCAtNDMsNiArNDMsMTAg
QEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiB0ZW1wbGF0
ZTx0eXBlbmFtZT4gc3RydWN0IFNSR0JBOwogCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCiBuYW1lc3BhY2UgU3R5bGUgewogY2xhc3Mg
QnVpbGRlclN0YXRlOwogfQpAQCAtOTEsNiArOTUsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIE9w
dGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZU5hbWVkQ29sb3IoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBwYXJzZUhleENvbG9yKFN0cmluZ1ZpZXcp
OwogCisgICAgc3RhdGljIE9wdGlvbmFsPENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJh
dz4gcGFyc2VGb250V29ya2VyU2FmZShjb25zdCBTdHJpbmcmLCBDU1NQYXJzZXJNb2RlID0gSFRN
TFN0YW5kYXJkTW9kZSk7CisKIHByaXZhdGU6CiAgICAgUGFyc2VSZXN1bHQgcGFyc2VWYWx1ZShN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwCmluZGV4IGU0MDRkNDhlZjhmZmYyZWI5Zjk2Mzg3OWZjNjFlZDIyODVmZTAz
ZjkuLjg1ZDcwODM3NmVjZDMwZDNjMWM3NjI4YTAxMjcwYjM3NzU5OGZkZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTUGVuZGlu
Z1N1YnN0aXR1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNT
U1JlZmxlY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgpAQCAtODYxLDE2ICs4NjAsMTYgQEAgc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjEoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmEKICAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBD
U1NWYWx1ZVNtYWxsQ2Fwcz4ocmFuZ2UpOwogfQogCi1zdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKLXsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlTm9ybWFsLCBDU1NW
YWx1ZUJvbGQsIENTU1ZhbHVlQm9sZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKLX0KLQog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUocmFuZ2UpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IHJldHVybiBjb25zdW1lRm9udFdlaWdodE51bWJlcihyYW5nZSk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKSB7CisgICAgICAgIHJldHVybiBzd2l0
Y2hPbigqcmVzdWx0LCBbXSAoQ1NTVmFsdWVJRCB2YWx1ZUlEKSB7CisgICAgICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVJ
RCk7CisgICAgICAgIH0sIFtdIChkb3VibGUgd2VpZ2h0TnVtYmVyKSB7CisgICAgICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSh3ZWlnaHROdW1iZXIs
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIHJldHVy
biBudWxscHRyOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
Rm9udFdlaWdodEFic29sdXRlS2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
KQpAQCAtOTA3LDcgKzkwNiw5IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVGb250V2VpZ2h0QWJzb2x1dGUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIAogc3RhdGljIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NT
VmFsdWVVbHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25k
ZW5zZWQsIENTU1ZhbHVlU2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2Vt
aUV4cGFuZGVkLCBDU1NWYWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1Zh
bHVlVWx0cmFFeHBhbmRlZD4ocmFuZ2UpOworICAgIGlmIChhdXRvIHZhbHVlSUQgPSBjb25zdW1l
Rm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKnZhbHVlSUQpOworICAg
IHJldHVybiBudWxscHRyOwogfQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTk2
MiwyNiArOTYzLDE2IEBAIHN0YXRpYyBib29sIGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoZmxvYXQg
b2JsaXF1ZSkKIAogc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVWYWx1ZT4gY29uc3VtZUZvbnRT
dHlsZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQogewotICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZShy
YW5nZSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byB2YWx1ZUlEID0gcmVzdWx0LT52YWx1ZUlEKCk7Ci0gICAgaWYgKHZhbHVlSUQgPT0gQ1NT
VmFsdWVOb3JtYWwgfHwgdmFsdWVJRCA9PSBDU1NWYWx1ZUl0YWxpYykKLSAgICAgICAgcmV0dXJu
IENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWVJRCkpOwotICAgIEFTU0VSVChyZXN1bHQtPnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU9ibGlxdWUpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250
U3R5bGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7CiAjaWYgRU5BQkxFKFZBUklBVElPTl9G
T05UUykKLSAgICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gYW5nbGUg
PSBjb25zdW1lQW5nbGUocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Ci0gICAgICAgICAgICBpZiAo
Zm9udFN0eWxlSXNXaXRoaW5SYW5nZShhbmdsZS0+dmFsdWU8ZmxvYXQ+KENTU1VuaXRUeXBlOjpD
U1NfREVHKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVPYmxpcXVlKSwgV1RGTW92ZShhbmdsZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIGlmIChyZXN1bHQtPnN0eWxlID09IENTU1ZhbHVlT2JsaXF1ZSAmJiByZXN1bHQt
PmFuZ2xlKSB7CisgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9i
bGlxdWUpLAorICAgICAgICAgICAgICAgIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUocmVzdWx0LT5hbmdsZS0+dmFsdWUsIHJlc3VsdC0+YW5nbGUtPnR5cGUpKTsKICAgICAg
ICAgfQotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNzc1BhcnNlck1vZGUpOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpz
aW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSk7CisgICAg
ICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xl
dG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJlc3VsdC0+c3R5bGUpKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpAQCAtMTAx
NSwzMyArMTAwNiwxMSBAQCBzdGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNv
bnN1bWVGb250U3R5bGVSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJgogfQogI2VuZGlmCiAKLXN0
YXRpYyBTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBib29sIGFkZGVkU3BhY2Ug
PSBmYWxzZTsKLSAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBl
ZWsoKTsKLSAgICB3aGlsZSAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7Ci0g
ICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcgJyk7Ci0gICAgICAgICAgICBhZGRlZFNwYWNlID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBidWlsZGVyLmFwcGVuZChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZh
bHVlKCkpOwotICAgIH0KLSAgICBpZiAoIWFkZGVkU3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChm
aXJzdFRva2VuLmlkKCkpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGJ1
aWxkZXIudG9TdHJpbmcoKTsKLX0KLQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZh
bWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKHJhbmdlLnBl
ZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLnZhbHVlKCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHJhbmdlLnBlZWsoKS50
eXBlKCkgIT0gSWRlbnRUb2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgU3RyaW5n
IGZhbWlseU5hbWUgPSBjb25jYXRlbmF0ZUZhbWlseU5hbWUocmFuZ2UpOwotICAgIGlmIChmYW1p
bHlOYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoZmFtaWx5TmFtZSk7
CisgICAgaWYgKGF1dG8gZmFtaWx5TmFtZSA9IGNvbnN1bWVGYW1pbHlOYW1lUmF3KHJhbmdlKSkK
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlRm9udEZhbWls
eVZhbHVlKCpmYW1pbHlOYW1lKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIFJl
ZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUdlbmVyaWNGYW1pbHkoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgK
aW5kZXggYjdlMTlmYmQ2NGE3OGMwZjdkNTljNzE0ODdkNzk2NmU3YTBiMDk5ZS4uY2YzZDljMWJh
OWJiN2Q5Y2RmYmUzYTE1ODkxMzg3MTI0MGIxMTM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaApAQCAtMjMsNiArMjMsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKaW5kZXggNjk1OGE2NjI3OGM5NThk
ZDFlNjI5MzRlOGQwOTM1YmE0ZWJkM2I5Yy4uODI1ZTNjMmNhZjE1OTQ3ZDkzOTVlMTdmMGJiNGIw
MmE4ZTcyNmM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcApAQCAtMTI4LDE1ICsxMjgsMjEgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxkb3VibGU+IGNvbnN1
bWVQZXJjZW50UmF3KCkKKyAgICBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3KGJv
b2wgYWxsb3dQZXJjZW50T2YgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFs
dWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudCkKKyAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnko
KTsKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQp
IHsKKyAgICAgICAgICAgIGlmICghYWxsb3dQZXJjZW50T2YgfHwgKGNhdGVnb3J5ICE9IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgKKyAgICAgICAgICAgICAgICAmJiBjYXRlZ29y
eSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CiAgICAgICAgIG1fc291cmNlUmFuZ2Ug
PSBtX3JhbmdlOwogICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7CiAg
ICAgfQogCi0gICAgT3B0aW9uYWw8QW5nbGU+IGNvbnN1bWVBbmdsZVJhdygpCisgICAgT3B0aW9u
YWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdygpCiAgICAgewogICAgICAgICBpZiAoIW1fY2Fs
Y1ZhbHVlIHx8IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE0NCw2ICsxNTAs
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVU
eXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKICAgICB9CiAKKyAgICBPcHRp
b25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBt
X3NvdXJjZVJhbmdlID0gbV9yYW5nZTsKKyAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+
cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CisgICAgfQor
CiBwcml2YXRlOgogICAgIENTU1BhcnNlclRva2VuUmFuZ2UmIG1fc291cmNlUmFuZ2U7CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBtX3JhbmdlOwpAQCAtMTc3LDEwICsxOTEsMTIgQEAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUG9zaXRpdmVJbnRlZ2VyKENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlKQogICAgIHJldHVybiBjb25zdW1lSW50ZWdlcihyYW5nZSwgMSk7CiB9CiAK
LWJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91Ymxl
JiByZXN1bHQpCitib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gTnVtYmVyVG9rZW4pIHsKKyAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5n
ZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgcmVzdWx0ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTg4LDcgKzIwNCw3IEBAIGJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgZG91YmxlJiByZXN1bHQpCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlv
blRva2VuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7Cisg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIsIHZhbHVlUmFuZ2UpOwogICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVOdW1iZXJSYXco
cmVzdWx0KTsKIH0KIApAQCAtMTk2LDIyICsyMTIsMTkgQEAgYm9vbCBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
VmFsdWVSYW5nZSB2YWx1ZVJhbmdlKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKLSAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7
Ci0gICAgICAgIGlmICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tl
bi5udW1lcmljVmFsdWUoKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSwgdG9rZW4udW5pdFR5cGUo
KSk7Ci0gICAgfQotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQorICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2Vy
IGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5n
ZSk7CisgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGNWYWx1ZSA9IGNhbGNQYXJz
ZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1Zh
bHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAgIGlmIChjYWxjVmFsdWUtPmNhdGVn
b3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOwogICAg
IH0KIAorICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2Us
IG51bWJlciwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5pdFR5cGUoKSk7CisKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIApAQCAtMjIyLDcgKzIzNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBk
aXZpc2libGVCeTEwMChkb3VibGUgdmFsdWUpCiB9CiAjZW5kaWYKIAotUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKK09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVh
bCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIGFyZSBwYXJzZSBlcnJvcnMu
CiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CkBAIC0yMzAsMTEgKzI0MywxNSBAQCBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQogI2lmICFFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQogICAgICAg
ICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50ZWdlclZhbHVlVHlwZSAmJiBkaXZp
c2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFsdWUoKSkKICNlbmRpZgotICAgICkKLSAgICAgICAg
cmV0dXJuIGNvbnN1bWVOdW1iZXIocmFuZ2UsIFZhbHVlUmFuZ2VBbGwpOworICAgICkgeworICAg
ICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2Vu
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZhbHVlIHJlc3VsdGluZyBmcm9tIGFu
IGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZSBhbGxvd2VkIGluIHRoZSB0
YXJnZXQgY29udGV4dC4iCiAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2VBbGwpOwpAQCAtMjQ1LDkgKzI2MiwxNiBA
QCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHJlc3VsdCA9
IHN0ZDo6bWluKHN0ZDo6bWF4KHJlc3VsdCwgc3RkOjpuZXh0YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6
bmV4dGFmdGVyKDEwMDAuLCAwLikpOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yNTksMTQgKzI4MywxNCBAQCBpbmxp
bmUgYm9vbCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRvdWJsZSB2YWx1ZSwgQ1NTUGFyc2Vy
TW9kZSBjc3NQYXJzZXJNb2RlLAogICAgICAgICB8fCAoY3NzUGFyc2VyTW9kZSA9PSBIVE1MUXVp
cmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJrOjpBbGxvdyk7CiB9CiAKLVJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2Us
IFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxMZW5ndGhSYXc+IGNvbnN1bWVMZW5n
dGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQogewog
ICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAo
dG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAgICAgICAgIHN3aXRjaCAodG9rZW4u
dW5pdFR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoK
ICAgICAgICAgICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFVBU2hlZXRNb2RlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0VNUzoKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CkBAIC0yODcsMjgg
KzMxMSwzOSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZAogICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICB9CiAgICAgICAgIGlmICgodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRp
dmUgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKSB8fCBzdGQ6OmlzaW5mKHRva2VuLm51bWVy
aWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVk
aW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgdG9rZW4udW5p
dFR5cGUoKSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUo
KSB9IH07CiAgICAgfQogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKICAg
ICAgICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKHRva2VuLm51bWVyaWNWYWx1ZSgp
LCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcykKICAgICAgICAgICAgIHx8ICh2YWx1ZVJhbmdlID09
IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1lcmljVmFsdWUoKSkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQ1NTVW5pdFR5cGUgdW5pdFR5cGUgPSBDU1NV
bml0VHlwZTo6Q1NTX1BYOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24o
KS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpLCB1bml0VHlwZSk7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgsIHJhbmdlLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9OwogICAgIH0KIAogICAgIGlmICh0b2tl
bi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNh
bGNQYXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25z
dW1lVmFsdWUoKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoUmF3KCk7Cit9
CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVu
Y3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjYWxjUGFy
c2VyLnZhbHVlKCkgJiYgY2FsY1BhcnNlci52YWx1ZSgpLT5jYXRlZ29yeSgpID09IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1
bWVWYWx1ZSgpOworICAgIH0KKworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhS
YXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocmVzdWx0LT52YWx1
ZSwgcmVzdWx0LT50eXBlKTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpAQCAtMzMzLDcgKzM2
OCw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBlcmNlbnQoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tl
biYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlv
blRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UpOworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQ
YXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsIHZhbHVlUmFuZ2UpOwog
ICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIu
dmFsdWUoKSkgewogICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQ
YXJzZXIuY29uc3VtZVZhbHVlKCk7CkBAIC0zNjEsMjYgKzM5Niw2MSBAQCBzdGF0aWMgYm9vbCBj
YW5Db25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENTU1BhcnNl
ck1vZGUgY3NzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxl
bmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9k
ZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5p
dGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygp
OwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgp
ID09IE51bWJlclRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZUxlbmd0aChyYW5nZSwgY3Nz
UGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpOwotICAgIGlmICh0b2tlbi50eXBlKCkg
PT0gUGVyY2VudGFnZVRva2VuKQotICAgICAgICByZXR1cm4gY29uc3VtZVBlcmNlbnQocmFuZ2Us
IHZhbHVlUmFuZ2UpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4gfHwg
dG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2UsIHVuaXRs
ZXNzKSkKKyAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9r
ZW4pIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZVBlcmNlbnRSYXcocmFuZ2Us
IHZhbHVlUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVu
Y3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CiAgICAgaWYgKGNvbnN0IENTU0NhbGNWYWx1
ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbkNv
bnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKQot
ICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIGlm
IChjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJzZXJN
b2RlKSkgeworICAgICAgICAgICAgaWYgKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNhbGNQYXJzZXIuY29uc3VtZUxlbmd0aFJhdygpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4geyAqcmVzdWx0IH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChhdXRvIHJlc3VsdCA9IGNhbGNQYXJzZXIuY29uc3VtZVBlcmNlbnRSYXcodHJ1ZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJh
bmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGNvbnN0IENTU1BhcnNlclRva2Vu
JiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9u
VG9rZW4pIHsKKyAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgsIHZhbHVlUmFuZ2UpOworICAgICAgICBpZiAoY29uc3QgQ1NTQ2Fs
Y1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAg
aWYgKGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNl
ck1vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1v
ZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkgeworICAgICAgICByZXR1cm4gc3dpdGNoT24oKnJl
c3VsdCwgW10gKExlbmd0aFJhdyBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKGxlbmd0aC52YWx1ZSwgbGVuZ3RoLnR5cGUp
OworICAgICAgICB9LCBbXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHBlcmNlbnRhZ2UsIENTU1Vu
aXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIH0pOwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotT3B0aW9uYWw8QW5nbGU+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1
aXJrIHVuaXRsZXNzKQorT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CkBA
IC01MDIsMTEgKzU3MiwyNSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVSZXNv
bHV0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBBbGxvd1hSZQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVu
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICBpZiAocmFuZ2UucGVlaygp
LnR5cGUoKSAhPSBJZGVudFRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5p
ZCgpOworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lSWRl
bnRSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoKnJlc3VsdCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKQoreworICAg
IGlmIChyYW5nZS5wZWVrKCkuaWQoKSA8IGxvd2VyIHx8IHJhbmdlLnBlZWsoKS5pZCgpID4gdXBw
ZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVu
dFJhdyhyYW5nZSk7CiB9CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1Zh
bHVlSUQgdXBwZXIpCkBAIC0xODAzLDYgKzE4ODcsMjI4IEBAIFJlZlB0cjxDU1NWYWx1ZT4gY29u
c3VtZUltYWdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJDb250ZXh0IGNv
bnRlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1
bWVGb250VmFyaWFudENTUzIxUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAg
IHJldHVybiBjb25zdW1lSWRlbnRSYXc8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU21hbGxDYXBz
PihyYW5nZSk7Cit9CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250V2VpZ2h0S2V5
d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBj
b25zdW1lSWRlbnRSYXc8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlQm9sZCwgQ1NTVmFsdWVCb2xk
ZXIsIENTU1ZhbHVlTGlnaHRlcj4ocmFuZ2UpOworfQorCitPcHRpb25hbDxGb250V2VpZ2h0UmF3
PiBjb25zdW1lRm9udFdlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZVJhdyhyYW5n
ZSkpCisgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBj
b25zdW1lRm9udFdlaWdodE51bWJlclJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiB7ICpyZXN1
bHQgfTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxDU1NWYWx1ZUlE
PiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZVVsdHJhQ29uZGVu
c2VkLCBDU1NWYWx1ZUV4dHJhQ29uZGVuc2VkLCBDU1NWYWx1ZUNvbmRlbnNlZCwgQ1NTVmFsdWVT
ZW1pQ29uZGVuc2VkLCBDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTZW1pRXhwYW5kZWQsIENTU1Zh
bHVlRXhwYW5kZWQsIENTU1ZhbHVlRXh0cmFFeHBhbmRlZCwgQ1NTVmFsdWVVbHRyYUV4cGFuZGVk
PihyYW5nZSk7Cit9CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3R5bGVLZXl3
b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVJdGFsaWMsIENTU1ZhbHVlT2Js
aXF1ZT4ocmFuZ2UpOworfQorCitPcHRpb25hbDxGb250U3R5bGVSYXc+IGNvbnN1bWVGb250U3R5
bGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVS
YXcocmFuZ2UpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byBpZGVudCA9ICpyZXN1bHQ7CisgICAgaWYgKGlkZW50ID09IENTU1ZhbHVl
Tm9ybWFsIHx8IGlkZW50ID09IENTU1ZhbHVlSXRhbGljKQorICAgICAgICByZXR1cm4geyB7IGlk
ZW50LCBXVEY6Om51bGxvcHQgfSB9OworICAgIEFTU0VSVChpZGVudCA9PSBDU1NWYWx1ZU9ibGlx
dWUpOworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgaWYgKCFyYW5nZS5hdEVuZCgp
KSB7CisgICAgICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlUmF3KHJhbmdlLCBjc3NQ
YXJzZXJNb2RlKSkgeworICAgICAgICAgICAgYXV0byBhbmdsZUluRGVncmVlcyA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhhbmdsZS0+dHlwZSwgYW5nbGUtPnZhbHVlKTsKKyAg
ICAgICAgICAgIGlmIChmb250U3R5bGVJc1dpdGhpblJhbmdlKGFuZ2xlSW5EZWdyZWVzKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgV1RGTW92ZShhbmdsZSkg
fSB9OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNzc1BhcnNlck1vZGUpOworI2VuZGlmCisgICAgcmV0
dXJuIHsgeyBDU1NWYWx1ZU9ibGlxdWUsIFdURjo6bnVsbG9wdCB9IH07Cit9CisKK1N0cmluZyBj
b25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJvb2wgYWRkZWRTcGFjZSA9IGZhbHNlOworICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVlaygpOworICAgIHdo
aWxlIChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKKyAgICAgICAgaWYgKCFi
dWlsZGVyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKKyAg
ICAgICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKSk7CisgICAg
fQorICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZpcnN0VG9rZW4uaWQo
KSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworfQorCitPcHRpb25hbDxTdHJpbmc+IGNvbnN1bWVGYW1pbHlOYW1lUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0
cmluZ1Rva2VuKQorICAgICAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKS52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0g
SWRlbnRUb2tlbikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBTdHJpbmcgZmFt
aWx5TmFtZSA9IGNvbmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7CisgICAgaWYgKGZhbWlseU5h
bWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGZh
bWlseU5hbWU7Cit9CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVHZW5lcmljRmFtaWx5
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRl
bnRSYW5nZVJhdyhyYW5nZSwgQ1NTVmFsdWVTZXJpZiwgQ1NTVmFsdWVXZWJraXRCb2R5KTsKK30K
KworT3B0aW9uYWw8V1RGOjpWZWN0b3I8Rm9udEZhbWlseVJhdz4+IGNvbnN1bWVGb250RmFtaWx5
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIFdURjo6VmVjdG9yPEZvbnRG
YW1pbHlSYXc+IGxpc3Q7CisgICAgZG8geworICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1
bWVHZW5lcmljRmFtaWx5UmF3KHJhbmdlKSkKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHsgKmlk
ZW50IH0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHN0cmluZyA9IGNv
bnN1bWVGYW1pbHlOYW1lUmF3KHJhbmdlKSkKKyAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZCh7
ICpzdHJpbmcgfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGlu
Z1doaXRlc3BhY2UocmFuZ2UpKTsKKyAgICByZXR1cm4gbGlzdDsKK30KKworT3B0aW9uYWw8Rm9u
dFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorewor
ICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA+PSBDU1NWYWx1ZVh4U21hbGwgJiYgcmFuZ2UucGVl
aygpLmlkKCkgPD0gQ1NTVmFsdWVMYXJnZXIpIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBj
b25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKmlkZW50IH07Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0
ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZU5vbk5lZ2F0aXZlLCB1bml0bGVzcykpCisgICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsK
KworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPExpbmVIZWlnaHRSYXc+
IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJz
ZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENT
U1ZhbHVlTm9ybWFsKSB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3
KHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7ICppZGVudCB9OworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1
bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlKSkKKyAgICAg
ICAgcmV0dXJuIHsgbnVtYmVyIH07CisKKyAgICBpZiAoYXV0byBsZW5ndGhPclBlcmNlbnQgPSBj
b25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
Tm9uTmVnYXRpdmUpKQorICAgICAgICByZXR1cm4geyAqbGVuZ3RoT3JQZXJjZW50IH07CisKKyAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9u
dFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSkKK3sKKyAgICAvLyBMZXQncyBjaGVjayBpZiB0aGVyZSBpcyBhbiBpbmhlcml0
IG9yIGluaXRpYWwgc29tZXdoZXJlIGluIHRoZSBzaG9ydGhhbmQuCisgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsKKyAgICB3aGlsZSAoIXJhbmdlQ29weS5hdEVuZCgp
KSB7CisgICAgICAgIENTU1ZhbHVlSUQgaWQgPSByYW5nZUNvcHkuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKS5pZCgpOworICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IGlk
ID09IENTU1ZhbHVlSW5pdGlhbCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgRm9udFJhdyByZXN1bHQ7CisKKyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkp
IHsKKyAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdlLnBlZWsoKS5pZCgpOworICAgICAgICBp
ZiAoIXJlc3VsdC5zdHlsZSkgeworICAgICAgICAgICAgaWYgKChyZXN1bHQuc3R5bGUgPSBjb25z
dW1lRm9udFN0eWxlUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXN1bHQudmFyaWFudENhcHMgJiYg
KGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1ZhbHVlU21hbGxDYXBzKSkgeworICAg
ICAgICAgICAgLy8gRm9udCB2YXJpYW50IGluIHRoZSBzaG9ydGhhbmQgaXMgcGFydGljdWxhciwg
aXQgb25seSBhY2NlcHRzIG5vcm1hbCBvciBzbWFsbC1jYXBzLgorICAgICAgICAgICAgLy8gU2Vl
IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtZm9udHMvI3Byb3BkZWYtZm9udAorICAgICAg
ICAgICAgaWYgKChyZXN1bHQudmFyaWFudENhcHMgPSBjb25zdW1lRm9udFZhcmlhbnRDU1MyMVJh
dyhyYW5nZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IGlmICghcmVzdWx0LndlaWdodCkgeworICAgICAgICAgICAgaWYgKChyZXN1bHQud2VpZ2h0ID0g
Y29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3VsdC5zdHJldGNoKSB7CisgICAgICAgICAgICBp
ZiAoKHJlc3VsdC5zdHJldGNoID0gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJh
bmdlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICAvLyBOb3cgYSBmb250IHNpemUgX211c3RfIGNvbWUuCisgICAgaWYg
KGF1dG8gc2l6ZSA9IGNvbnN1bWVGb250U2l6ZVJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpCisg
ICAgICAgIHJlc3VsdC5zaXplID0gKnNpemU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgaWYgKHJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBpZiAoY29uc3VtZVNsYXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpIHsKKyAgICAgICAgaWYgKCEocmVzdWx0LmxpbmVIZWlnaHQgPSBjb25zdW1lTGluZUhlaWdo
dFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisKKyAgICAvLyBGb250IGZhbWlseSBtdXN0IGNvbWUgbm93LgorICAgIGlm
IChhdXRvIGZhbWlseSA9IGNvbnN1bWVGb250RmFtaWx5UmF3KHJhbmdlKSkKKyAgICAgICAgcmVz
dWx0LmZhbWlseSA9ICpmYW1pbHk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgaWYgKCFyYW5nZS5hdEVuZCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQXRvbVN0cmluZyBnZW5lcmljRm9udEZh
bWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQgaWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkg
eworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5Owor
ICAgIGNhc2UgQ1NTVmFsdWVTYW5zU2VyaWY6CisgICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1p
bHk7CisgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFt
aWx5OworICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gZmFudGFzeUZh
bWlseTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICByZXR1cm4gbW9ub3Nw
YWNlRmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgorICAgICAgICBy
ZXR1cm4gcGljdG9ncmFwaEZhbWlseTsKKyAgICBjYXNlIENTU1ZhbHVlU3lzdGVtVWk6CisgICAg
ICAgIHJldHVybiBzeXN0ZW1VaUZhbWlseTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCmluZGV4IGE4N2JkMjBhYTJhNTIzNjE0
YmQzODNiYzA4MzU3NDQ4NGZhNDA2YmIuLjFkZjRlNTQzODdhNTAyOGE0ZTEzMGE1YTI5Y2M5ZDRh
Njg1Y2EwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaApAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkNTU1ZhbHVl
UG9vbC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIiAvLyBGb3IgVmFsdWVSYW5nZQogI2luY2x1ZGUg
PHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NSwyOCArNTcsNDEgQEAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSBjb25zdW1lRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYp
OwogZW51bSBjbGFzcyBVbml0bGVzc1F1aXJrIHsgQWxsb3csIEZvcmJpZCB9OwogZW51bSBjbGFz
cyBBbGxvd1hSZXNvbHV0aW9uVW5pdCB7IEFsbG93LCBGb3JiaWQgfTsKIAotc3RydWN0IEFuZ2xl
IHsKK3N0cnVjdCBBbmdsZVJhdyB7CiAgICAgQ1NTVW5pdFR5cGUgdHlwZTsKICAgICBkb3VibGUg
dmFsdWU7CiB9OwogCitzdHJ1Y3QgTGVuZ3RoUmF3IHsKKyAgICBDU1NVbml0VHlwZSB0eXBlOwor
ICAgIGRvdWJsZSB2YWx1ZTsKK307CisKK3VzaW5nIExlbmd0aE9yUGVyY2VudFJhdyA9IFdURjo6
VmFyaWFudDxMZW5ndGhSYXcsIGRvdWJsZT47CisKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSBtaW5pbXVtVmFsdWUg
PSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSk7CiBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwot
Ym9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBkb3VibGUmIHJlc3Vs
dCk7Citib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYg
cmVzdWx0LCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOwor
T3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVt
YmVyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxl
bmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwog
T3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
VmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25h
bDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBV
bml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
TGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1
ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKLU9wdGlvbmFs
PEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1v
ZGUsIFVuaXRsZXNzUXVpcmspOworT3B0aW9uYWw8QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRs
ZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmds
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVu
aXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVU
aW1lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0
bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIEFsbG93WFJlc29s
dXRpb25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVuaXQ6OkZvcmJpZCk7CiAKK09wdGlvbmFsPENT
U1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJik7CitP
cHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYW5nZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcik7CiBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NW
YWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKTsKIHRlbXBsYXRlPENTU1ZhbHVlSUQsIENT
U1ZhbHVlSUQuLi4+IGlubGluZSBib29sIGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUlEIGlkKTsKK3Rl
bXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElkZW50cz4gT3B0aW9uYWw8Q1NTVmFsdWVJRD4g
Y29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIHRlbXBsYXRlPENTU1ZhbHVl
SUQuLi4gYWxsb3dlZElkZW50cz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRl
bnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bnN1bWVDdXN0b21JZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJik7CkBAIC0xMTUsNiArMTMwLDQw
IEBAIGVudW0gY2xhc3MgQWxsb3dlZEZpbHRlckZ1bmN0aW9ucyB7CiBSZWZQdHI8Q1NTVmFsdWU+
IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRl
eHQmLCBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zKTsKIFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29u
c3VtZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgYm9v
bCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFkKTsKIAorc3RydWN0IEZvbnRTdHlsZVJhdyB7
CisgICAgQ1NTVmFsdWVJRCBzdHlsZTsKKyAgICBPcHRpb25hbDxBbmdsZVJhdz4gYW5nbGU7Cit9
OwordXNpbmcgRm9udFdlaWdodFJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBkb3VibGU+
OwordXNpbmcgRm9udFNpemVSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NTVmFsdWVJRCwgQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXc+OwordXNpbmcgTGluZUhlaWdodFJh
dyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBkb3VibGUsIENTU1Byb3BlcnR5UGFyc2VySGVs
cGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3PjsKK3VzaW5nIEZvbnRGYW1pbHlSYXcgPSBXVEY6OlZh
cmlhbnQ8Q1NTVmFsdWVJRCwgU3RyaW5nPjsKKworc3RydWN0IEZvbnRSYXcgeworICAgIE9wdGlv
bmFsPEZvbnRTdHlsZVJhdz4gc3R5bGU7CisgICAgT3B0aW9uYWw8Q1NTVmFsdWVJRD4gdmFyaWFu
dENhcHM7CisgICAgT3B0aW9uYWw8Rm9udFdlaWdodFJhdz4gd2VpZ2h0OworICAgIE9wdGlvbmFs
PENTU1ZhbHVlSUQ+IHN0cmV0Y2g7CisgICAgRm9udFNpemVSYXcgc2l6ZTsKKyAgICBPcHRpb25h
bDxMaW5lSGVpZ2h0UmF3PiBsaW5lSGVpZ2h0OworICAgIFdURjo6VmVjdG9yPEZvbnRGYW1pbHlS
YXc+IGZhbWlseTsKK307CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250VmFyaWFu
dENTUzIxUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNv
bnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09w
dGlvbmFsPEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRW
YWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25z
dW1lRm9udFN0eWxlS2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlv
bmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiwgQ1NTUGFyc2VyTW9kZSk7CitTdHJpbmcgY29uY2F0ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNl
clRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPFN0cmluZz4gY29uc3VtZUZhbWlseU5hbWVSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVyaWNG
YW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8V1RGOjpWZWN0b3I8Rm9u
dEZhbWlseVJhdz4+IGNvbnN1bWVGb250RmFtaWx5UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsK
K09wdGlvbmFsPEZvbnRTaXplUmF3PiBjb25zdW1lRm9udFNpemVSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3Ji
aWQpOworT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOworT3B0aW9uYWw8Rm9udFJhdz4gY29uc3Vt
ZUZvbnRXb3JrZXJTYWZlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK0F0
b21TdHJpbmcgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1ZUlEKTsKKwogLy8g
VGVtcGxhdGUgaW1wbGVtZW50YXRpb25zIGFyZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlIGZv
ciByZWFkYWJpbGl0eS4KIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gZW1wdHlCYXNlQ2FzZT4gaW5s
aW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQpIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0x
MjMsNiArMTcyLDEzIEBAIHRlbXBsYXRlPENTU1ZhbHVlSUQgaGVhZCwgQ1NTVmFsdWVJRC4uLiB0
YWlsPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJCiAgICAgcmV0dXJuIGlkID09
IGhlYWQgfHwgaWRlbnRNYXRjaGVzPHRhaWwuLi4+KGlkKTsKIH0KIAordGVtcGxhdGU8Q1NTVmFs
dWVJRC4uLiBuYW1lcz4gT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9
IElkZW50VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1lcy4uLj4ocmFuZ2UucGVlaygpLmlkKCkp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1l
SW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4g
bmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1lcy4uLj4ocmFuZ2UucGVlaygpLmlkKCkpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKaW5kZXggODkxODAyNzlhZjJiN2Y3NjU2YmNkZGY4ZWVjMDgzMzNiNjVjNjE0OC4u
MTNmYjgzZGE2YzVmMzBlYWQyYTA0M2RlZDMwMDQ5YzUwZDIzY2E5YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CkBAIC0zNiwxNSArMzYsMTkgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUg
Ikluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5o
IgogI2luY2x1ZGUgIlBhdGgyRC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIK
KyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0aWVzLmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CkBAIC0xMzQsNiArMTM4LDExIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRG
b250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICBpZiAobmV3Rm9udCA9PSBzdGF0ZSgpLnVu
cGFyc2VkRm9udCAmJiBzdGF0ZSgpLmZvbnQucmVhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgYXV0byBmb250UmF3ID0gQ1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKG5ld0Zv
bnQsIHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9k
ZSkpOworICAgIGlmICghZm9udFJhdykKKyAgICAgICAgcmV0dXJuOworCisjaWYgMAogICAgIGF1
dG8gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICBD
U1NQYXJzZXI6OnBhcnNlVmFsdWUocGFyc2VkU3R5bGUsIENTU1Byb3BlcnR5Rm9udCwgbmV3Rm9u
dCwgdHJ1ZSwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFy
c2VNb2RlKSk7CiAgICAgaWYgKHBhcnNlZFN0eWxlLT5pc0VtcHR5KCkpCkBAIC0xNDUsNyArMTU0
LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5n
JiBuZXdGb250KQogICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVz
dCBiZSBpZ25vcmVkLgogICAgIGlmIChmb250VmFsdWUgPT0gImluaGVyaXQiIHx8IGZvbnRWYWx1
ZSA9PSAiaW5pdGlhbCIpCiAgICAgICAgIHJldHVybjsKLQorI2VuZGlmCiAgICAgLy8gVGhlIHBh
cnNlIHN1Y2NlZWRlZC4KICAgICBTdHJpbmcgbmV3Rm9udFNhZmVDb3B5KG5ld0ZvbnQpOyAvLyBD
cmVhdGUgYSBzdHJpbmcgY29weSBzaW5jZSBuZXdGb250IGNhbiBiZSBkZWxldGVkIGluc2lkZSBy
ZWFsaXplU2F2ZXMuCiAgICAgcmVhbGl6ZVNhdmVzKCk7CkBAIC0xNTgsMzEgKzE2NywyMTYgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdG
b250KQogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZhcygpLmRvY3VtZW50KCk7CiAgICAg
ZG9jdW1lbnQudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogCisgICAgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb247CiAgICAgaWYgKGF1dG8qIGNvbXB1dGVkU3R5bGUgPSBjYW52
YXMoKS5jb21wdXRlZFN0eWxlKCkpCi0gICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNvbXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpIH0pOworICAgICAgICBmb250RGVzY3JpcHRpb24gPSBGb250Q2FzY2FkZURlc2NyaXB0aW9u
IHsgY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgfTsKICAgICBlbHNlIHsKLSAgICAg
ICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBkZWZhdWx0Rm9udERlc2NyaXB0aW9uOwotICAgICAg
ICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShEZWZhdWx0Rm9udEZhbWlseSk7
Ci0gICAgICAgIGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShEZWZhdWx0
Rm9udFNpemUpOwotICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShEZWZhdWx0Rm9udFNpemUpOwotCi0gICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oV1RGTW92ZShkZWZhdWx0Rm9udERlc2NyaXB0aW9uKSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOworICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShEZWZhdWx0Rm9udFNpemUpOworICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6ZSk7CiAgICAgfQogCi0gICAg
bmV3U3R5bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7
CisgICAgYXV0byBnZXRQYXJlbnRTdHlsZSA9IFsmXSAoKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHsKKyAgICAgICAgYXV0byBwYXJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZVB0cigqbmV3U3R5bGUpOworICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSk7CisgICAgICAgIHBhcmVu
dFN0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwor
ICAgICAgICByZXR1cm4gcGFyZW50U3R5bGU7CisgICAgfTsKIAogICAgIC8vIE5vdyBtYXAgdGhl
IGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIGZsb2F0IHBhcmVu
dFNpemUgPSBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOworCisgICAgLy8gRm9udCBm
YW1pbHkKKyAgICAvLyBGSVhNRTogTW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5CisgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBu
ZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1p
bHkuCisgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlw
dGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCk7CisKKyAgICBWZWN0b3I8QXRvbVN0cmluZz4gZmFt
aWxpZXM7CisgICAgZmFtaWxpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmb250UmF3LT5mYW1p
bHkuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgaXRlbSA6IGZvbnRSYXctPmZhbWlseSkgewor
ICAgICAgICBBdG9tU3RyaW5nIGZhbWlseTsKKyAgICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkg
PSBmYWxzZTsKKyAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7
CisgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJv
ZHk7CisgICAgICAgICAgICBmYW1pbHkgPSBpc0dlbmVyaWNGYW1pbHkgPyBDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQoaWRlbnQpCisgICAgICAg
ICAgICAgICAgOiBkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOworICAg
ICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5U3RyaW5nKSB7CisgICAgICAgICAgICBm
YW1pbHkgPSBmYW1pbHlTdHJpbmc7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmYW1pbHku
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChmYW1pbGllcy5p
c0VtcHR5KCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250
KCFpc0dlbmVyaWNGYW1pbHkpOworICAgICAgICBmYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZmFt
aWx5KTsKKyAgICB9CisKKyAgICBpZiAoZmFtaWxpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKGZhbWlsaWVzKTsKKworICAgIGlm
IChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRG
aXhlZERlZmF1bHRTaXplKSB7CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVy
ID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIs
ICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNw
ZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZhbHNl
LCBuZXdTdHlsZS5nZXQoKSwgZG9jdW1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8v
IEZvbnQgc3R5bGUKKyAgICAvLyBGSVhNRTogTW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlCisgICAgaWYgKGZvbnRSYXctPnN0
eWxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9udFJhdy0+c3R5bGUtPnN0eWxlKSB7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IENTU1ZhbHVlSXRhbGljOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhp
dGFsaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1NTVmFs
dWVPYmxpcXVlOiB7CisgICAgICAgICAgICBmbG9hdCBkZWdyZWVzOworICAgICAgICAgICAgaWYg
KGZvbnRSYXctPnN0eWxlLT5hbmdsZSkKKyAgICAgICAgICAgICAgICBkZWdyZWVzID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcyhmb250UmF3LT5z
dHlsZS0+YW5nbGUtPnR5cGUsIGZvbnRSYXctPnN0eWxlLT5hbmdsZS0+dmFsdWUpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWdyZWVzID0gMDsKKyAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udFNlbGVjdGlvblZhbHVlKGRlZ3JlZXMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoKGZvbnRSYXctPnN0
eWxlICYmIGZvbnRSYXctPnN0eWxlLT5zdHlsZSA9PSBDU1NWYWx1ZUl0YWxpYykgPyBGb250U3R5
bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6c2xudCk7CisKKyAgICAvLyBGb250IHZhcmlh
bnQgY2FwcworICAgIGlmIChmb250UmF3LT52YXJpYW50Q2FwcykgeworICAgICAgICAvLyBGSVhN
RTogVGhpcyBtdXN0IGJlIGRlZmluZWQgc29tZXdoZXJlLi4uCisgICAgICAgIHN3aXRjaCAoKmZv
bnRSYXctPnZhcmlhbnRDYXBzKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpO
b3JtYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENh
cHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlh
bnRDYXBzOjpTbWFsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUFsbFNtYWxsQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2Fw
cyhGb250VmFyaWFudENhcHM6OkFsbFNtYWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VW5p
Y2FzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRpdGxpbmdD
YXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJp
YW50Q2Fwczo6VGl0bGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGb250IHdlaWdodAorICAgIGlmIChmb250UmF3LT53
ZWlnaHQpIHsKKyAgICAgICAgYXV0byB3ZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy0+d2VpZ2h0
LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaWRlbnQpIHsK
KyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vcm1hbFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQm9sZDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYm9sZFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlQm9sZGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uOjpib2xkZXJXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVMaWdodGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LCBbJl0gKGRvdWJsZSB3ZWlnaHQpIHsKKyAgICAgICAgICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWU6OmNsYW1wRmxvYXQod2VpZ2h0KTsKKyAgICAgICAgfSk7
CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQod2VpZ2h0KTsKKyAgICB9CisKKyAg
ICAvLyBGb250IHNpemUKKyAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRl
bnRpZmllcihDU1NWYWx1ZUludmFsaWQpOworICAgIGZsb2F0IHNpemUgPSBzd2l0Y2hPbihmb250
UmF3LT5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgc3dpdGNoIChpZGVu
dCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAgICBjYXNlIENTU1Zh
bHVlTWVkaXVtOgorICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVYTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgorICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihpZGVudCk7CisgICAgICAgICAgICByZXR1cm4gU3R5
bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSwgZG9jdW1lbnQpOworICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgorICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudFNpemUgKiAxLjJmOworICAgICAgICBjYXNlIENTU1ZhbHVl
U21hbGxlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplIC8gMS4yZjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwLmY7CisgICAgICAgIH0KKyAgICB9LCBbJl0g
KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5n
dGhPclBlcmNlbnQpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwg
WyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7
CisgICAgICAgICAgICBhdXRvIHBhcmVudFN0eWxlID0gZ2V0UGFyZW50U3R5bGUoKTsKKyAgICAg
ICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBwYXJlbnRT
dHlsZS5nZXQoKSwgbnVsbHB0ciwgcGFyZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclZp
ZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlGb250U2l6ZSB9OworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhE
b3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUpKTsKKyAgICAg
ICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIChwYXJl
bnRTaXplICogcGVyY2VudGFnZSkgLyAxMDAuZjsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAg
ICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUoc2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc2l6ZSk7
CisgICAgfQorCisgICAgLy8gTGluZSBoZWlnaHQKKyAgICBpZiAoZm9udFJhdy0+bGluZUhlaWdo
dCkgeworICAgICAgICBPcHRpb25hbDxMZW5ndGg+IGxpbmVIZWlnaHQgPSBzd2l0Y2hPbigqZm9u
dFJhdy0+bGluZUhlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBp
ZiAoaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlv
bmFsPExlbmd0aD4oUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSwgWyZd
IChkb3VibGUgbnVtYmVyKSB7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihM
ZW5ndGgobnVtYmVyICogMTAwLjAsIFBlcmNlbnQpKTsKKyAgICAgICAgfSwgWyZdIChjb25zdCBD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYgbGVuZ3RoT3JQZXJj
ZW50KSB7CisgICAgICAgICAgICByZXR1cm4gc3dpdGNoT24obGVuZ3RoT3JQZXJjZW50LCBbJl0g
KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoUmF3JiBsZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHBhcmVudFN0eWxlID0gZ2V0UGFyZW50U3R5bGUoKTsKKyAgICAg
ICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhIHsgcGFy
ZW50U3R5bGUuZ2V0KCksIG51bGxwdHIsIHBhcmVudFN0eWxlLmdldCgpLCBkb2N1bWVudC5yZW5k
ZXJWaWV3KCksIDEuMGYsIENTU1Byb3BlcnR5TGluZUhlaWdodCB9OworICAgICAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxMZW5ndGg+KExlbmd0aChjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhEb3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0
aC50eXBlLCBsZW5ndGgudmFsdWUpLCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JD
c3NMZW5ndGgpLCBGaXhlZCkpOworICAgICAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFn
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxMZW5ndGg+KExlbmd0aCgoZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc3RhdGljX2Nhc3Q8aW50PihwZXJjZW50YWdl
KSkgLyAxMDAsIEZpeGVkKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaWYgKGxpbmVIZWlnaHQpCisgICAgICAgICAgICBuZXdTdHlsZS0+c2V0TGluZUhlaWdodChX
VEZNb3ZlKGxpbmVIZWlnaHQudmFsdWUoKSkpOworICAgIH0KKworICAgIG5ld1N0eWxlLT5zZXRG
b250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBuZXdTdHlsZS0+
Zm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKworI2lmIDAK
ICAgICBTdHlsZTo6TWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgYXV0byBwYXJlbnRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgqbmV3U3R5bGUpOwogICAgIFN0eWxlOjpCdWlsZGVyIHN0
eWxlQnVpbGRlcigqbmV3U3R5bGUsIHsgZG9jdW1lbnQsIHBhcmVudFN0eWxlIH0sIG1hdGNoUmVz
dWx0LCB7IH0pOwotCiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udEZhbWlseSkuZ2V0KCkpOwogICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFs
dWUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKICAgICBz
dHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQo
KSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KS5nZXQoKSk7CiAgICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
TGluZUhlaWdodCkuZ2V0KCkpOworI2VuZGlmCiAKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250
LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpuZXdTdHlsZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IGI2M2Q1ZmRmOWMxNWUy
YjNkNjYwZGZiODAyMDc3N2U1MTc4MWUyM2IuLjdmNGNlNDBmM2UyZmI2NzEwYjgyNzA1YTE1YjI1
OGI3ZGNhMzM1OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5o
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTR3JhZGllbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUu
aCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NS
ZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgog
I2luY2x1ZGUgIkNvdW50ZXIuaCIKQEAgLTk4OCw0MCArOTg5LDExIEBAIGlubGluZSB2b2lkIEJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KEJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWCiAgICAgICAgICAgICAvLyBJZiB0aGUgZmFtaWx5IG5hbWUgd2FzIHJlc29sdmVk
IGJ5IHRoZSBDU1MgcGFyc2VyIGZyb20gYSBzeXN0ZW0gZm9udCBJRCwgdGhlbiBpdCBpcyBnZW5l
cmljLgogICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gZm9udEZhbWlseS5mcm9tU3lzdGVt
Rm9udElEOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFs
dWUudmFsdWVJRCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Qm9keToKKyAg
ICAgICAgICAgIGlmIChjb250ZW50VmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0Qm9k
eSkKICAgICAgICAgICAgICAgICBmYW1pbHkgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5zZXR0
aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHNl
cmlmRmFtaWx5OworICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaXNHZW5lcmlj
RmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVTYW5zU2VyaWY6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc2Fuc1NlcmlmRmFt
aWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ3Vyc2l2ZToKLSAgICAgICAg
ICAgICAgICBmYW1pbHkgPSBjdXJzaXZlRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJp
Y0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlRmFudGFzeToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBmYW50YXN5RmFtaWx5
OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IG1vbm9zcGFjZUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVy
aWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gcGlj
dG9ncmFwaEZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVN5c3RlbVVp
OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHN5c3RlbVVpRmFtaWx5OwotICAgICAgICAgICAg
ICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGZhbWlseSA9IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9t
VmFsdWVJRChjb250ZW50VmFsdWUudmFsdWVJRCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409978</attachid>
            <date>2020-09-29 02:45:19 -0700</date>
            <delta_ts>2020-10-05 06:56:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20200929104513.patch</filename>
            <type>text/plain</type>
            <size>62881</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3Njg5ZDA2MTdlOTI4
N2Q4ZjEzYzg1Yjg5N2ExMGU2MDMwNDRiMC4uN2Q0ZWMzNjBjZDZhNGQ2NTUwNDI3ZjEyM2I5NjA1
YmUyZWRmMTg5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTA5LTI5ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIENTUyBmb250IHNob3J0
aGFuZHMgcGFyc2FibGUgd2l0aGluIGEgd29ya2VyIChpLmUuIHdpdGhvdXQgQ1NTVmFsdWVQb29s
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1
bmN0aW9ucyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhcnNlIENTUyBmb250IHNob3J0aGFuZAor
ICAgICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgdXNpbmcgQ1NTIHZhbHVlcywgc28gaXQgY2FuIGJl
IGRvbmUgc2FmZWx5IG9mZiBvZgorICAgICAgICB0aGUgbWFpbiB0aHJlYWQuIFRvIHN1cHBvcnQg
YW5kIHRlc3QgdGhpcywgYWxzbyBhZGQgZnVuY3Rpb25zIHRvIG1ha2UKKyAgICAgICAgaXQgcG9z
c2libGUgdG8gcmVzb2x2ZSB0aG9zZSBwcm9wZXJ0aWVzIGludG8gYSBzdHlsZSB3aXRob3V0Cisg
ICAgICAgIFN0eWxlQnVpbGRlciBhbmQgdXNlIHRoYXQgd2l0aGluIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKToKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRXZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZUZhbWlseU5hbWUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoK
KyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1
bWVQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZUZvbnRXZWlnaHROdW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxlbmd0aE9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhbmdlUmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRWYXJpYW50
Q1NTMjFSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0UmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29y
ZFZhbHVlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250U3R5bGVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25jYXRlbmF0ZUZhbWlseU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRmFtaWx5
TmFtZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVHZW5lcmljRmFtaWx5UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUZvbnRGYW1pbHlSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFNpemVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZUhlaWdodFJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V29y
a2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Omdl
bmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhdyk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9t
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZv
bnRGYW1pbHkpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oOiBBZGRlZC4KKwogMjAyMC0wOS0x
NyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbmlmaWVkIGJ1
aWxkIGZpeCBmb3IgInJlZGVmaW5pdGlvbiBvZiAna0NNVmlkZW9Db2RlY1R5cGVfVlA5IgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA3ZmQxYTQ3YzY1MDM4MmNjN2U5ZWIwYTBkNmFiZWJmNzM2YjQ2ZGI1Li40
NTk2YzhjZjFhZGVlNzM1ZjI1MDRlMTFiZWYyYmY4OWI5MzZkOTZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjM3NSw2ICsyMzc1LDcgQEAgc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKIHN0eWxlL1N0
eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAKIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogc3R5bGUv
U3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCitzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmNwcAogc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKIHN0eWxlL1N0eWxlU2NvcGUuY3BwCiBzdHls
ZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGZiYTIwMjcwMzNjOGU2ZjIyNTdjZDVhYjVj
MTkxOTg2MWRjYzhjNi4uZjg2MDM1MjJlZGJjY2I5ZDdlYWRmYWM0OWY0MTQ0NmEwZTM3MTViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNTA2OSw2ICs1MDY5LDcgQEAKIAkJRTRDOTFBMEUxODAyMzQzMTAwQTE3RjZEIC8qIFRl
eHRQYWludFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCAqLzsgfTsK
IAkJRTRDOTFBMTYxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTE1MTgwOTk5
RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRENThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8q
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuaCAqLzsgfTsKKwkJRTRENjhFQjUxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RDY4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250
UmF3LmggKi87IH07CiAJCUU0RDU4RUI5MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oICov
OyB9OwogCQlFNEQ1OEVCQjE3QjhGMTI4MDBDQkRDQTggLyogRWxlbWVudFRyYXZlcnNhbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQkExN0I4
RjEyODAwQ0JEQ0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQ5ODhCNDE3QkZEMUY2MDA4NEZCODggLyog
VGV4dE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RDk4OEIzMTdCRkQxRjYwMDg0RkI4OCAvKiBUZXh0Tm9kZVRyYXZlcnNhbC5o
ICovOyB9OwpAQCAtMTU5OTIsNiArMTU5OTMsOCBAQAogCQlFNEM5MUExNzE4MDk5OUZCMDBBMTdG
NkQgLyogUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJUZXh0TGluZUJveGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTRENThFQjIxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3Vt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVzb2x2
ZUZvckRvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThFQjMx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDY4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNEQ2OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JGb250UmF3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAv
KiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUJBMTdCOEYxMjgw
MENCRENBOCAvKiBFbGVtZW50VHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVsZW1lbnRUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4Mzc2LDYgKzI4Mzc5LDggQEAKIAkJCQlFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyogU3R5
bGVSZWxhdGlvbnMuaCAqLywKIAkJCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuY3BwICovLAogCQkJCUU0RDU4RUIzMTdCNERCREMwMENCRENBOCAv
KiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAorCQkJCUU0RDY4RUIyMTdCNERCREMwMENC
RENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcCAqLywKKwkJCQlFNEQ2OEVCMzE3QjRE
QkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICovLAogCQkJCUUxMzk4NjYx
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLywKIAkJCQlFMTM5ODY2MjE1
NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovLAogCQkJCUU0NjFENjVDMUJCMEM3
RjAwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmNwcCAqLywKQEAgLTMzOTI0LDYgKzMzOTI5LDcgQEAK
IAkJCQlCQzIyNzI4NzBFODJFNzA3MDBFN0Y5NzUgLyogU3R5bGVSZWZsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRENjhFQjUxN0I0REJEQzAw
Q0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
Mzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNEJCRUQ0RDE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCA2
YzYyZDRiMmUzOTdlYWU2ZThhM2JhNjA3MDRhNmEyNDJlYTdlZGFmLi5mMmFkMTJjMDlmZjRkNmZh
NTA3NzVlMmY5ODIwNGFjZmE5ZjkxYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXIuY3BwCkBAIC0xMzgsNiArMTM4LDE1IEBAIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBD
U1NQYXJzZXI6OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCiAgICAgcmV0dXJuIENT
U1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihzdHJpbmcpOwogfQogCitPcHRpb25hbDxD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IENTU1BhcnNlcjo6cGFyc2VGb250V29y
a2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KQoreworICAgIENTU1Rva2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJU
b2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1
bWVXaGl0ZXNwYWNlKCk7CisKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lRm9udFdvcmtlclNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCiBSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250
ZXh0KQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyLmgKaW5kZXggOWUwMTA0YWY5NmQ5NTNiNDA3N2YzMmIxYTc3OTFmY2EzZDBkMjkw
Yi4uOTI1ODliZjY5NTc4MGFiNzk3NTI5ODdhNDQ0ZGJhNzk5MjA1YzdlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBAIC00Myw2ICs0MywxMCBAQCBjbGFzcyBTdHlsZVNo
ZWV0Q29udGVudHM7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgU1JHQkE7CiAKK25hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgeworc3RydWN0
IEZvbnRSYXc7Cit9CisKIG5hbWVzcGFjZSBTdHlsZSB7CiBjbGFzcyBCdWlsZGVyU3RhdGU7CiB9
CkBAIC05MSw2ICs5NSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWlu
dDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAKKyAgICBzdGF0aWMg
T3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBwYXJzZUZvbnRXb3Jr
ZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3RhbmRhcmRNb2RlKTsK
KwogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKaW5k
ZXggZTQwNGQ0OGVmOGZmZjJlYjlmOTYzODc5ZmM2MWVkMjI4NWZlMDNmOS4uODVkNzA4Mzc2ZWNk
MzBkM2MxYzc2MjhhMDEyNzBiMzc3NTk4ZmRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRl
ICJDU1NQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlv
blZhbHVlLmgiCkBAIC04NjEsMTYgKzg2MCwxNiBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMShDU1NQYXJzZXJUb2tlblJhbmdlJiByYQog
ICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU21hbGxDYXBz
PihyYW5nZSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVG
b250V2VpZ2h0S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAg
IHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlQm9sZCwgQ1NTVmFs
dWVCb2xkZXIsIENTU1ZhbHVlTGlnaHRlcj4ocmFuZ2UpOwotfQotCiBzdGF0aWMgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKIHsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEtleXdvcmRW
YWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyKHJhbmdlKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9u
dFdlaWdodFJhdyhyYW5nZSkpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtd
IChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICAgICAgfSwg
W10gKGRvdWJsZSB3ZWlnaHROdW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHdlaWdodE51bWJlciwgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1
dGVLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC05MDcsNyArOTA2
LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRB
YnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJgogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZVVsdHJhQ29uZGVu
c2VkLCBDU1NWYWx1ZUV4dHJhQ29uZGVuc2VkLCBDU1NWYWx1ZUNvbmRlbnNlZCwgQ1NTVmFsdWVT
ZW1pQ29uZGVuc2VkLCBDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTZW1pRXhwYW5kZWQsIENTU1Zh
bHVlRXhwYW5kZWQsIENTU1ZhbHVlRXh0cmFFeHBhbmRlZCwgQ1NTVmFsdWVVbHRyYUV4cGFuZGVk
PihyYW5nZSk7CisgICAgaWYgKGF1dG8gdmFsdWVJRCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdv
cmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqdmFsdWVJRCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpAQCAtOTYyLDI2ICs5NjMsMTYgQEAg
c3RhdGljIGJvb2wgZm9udFN0eWxlSXNXaXRoaW5SYW5nZShmbG9hdCBvYmxpcXVlKQogCiBzdGF0
aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7Ci0gICAgYXV0
byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKHJhbmdlKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlSUQgPSBy
ZXN1bHQtPnZhbHVlSUQoKTsKLSAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlSXRhbGljKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFs
dWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZUlEKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC0+dmFsdWVJRCgpID09IENTU1ZhbHVlT2Js
aXF1ZSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZVJhdyhyYW5nZSwg
Y3NzUGFyc2VyTW9kZSkpIHsKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIGlmICgh
cmFuZ2UuYXRFbmQoKSkgewotICAgICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZShy
YW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAgICAgIGlmIChmb250U3R5bGVJc1dpdGhp
blJhbmdlKGFuZ2xlLT52YWx1ZTxmbG9hdD4oQ1NTVW5pdFR5cGU6OkNTU19ERUcpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpLCBXVEZN
b3ZlKGFuZ2xlKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKHJl
c3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksCisgICAgICAg
ICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQtPmFu
Z2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwogICAgICAgICB9Ci0gICAgfQotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CiAjZW5kaWYKLSAgICByZXR1cm4g
Q1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAgICAgcmV0dXJuIENTU0Zv
bnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE1LDMzICsxMDA2LDExIEBA
IHN0YXRpYyBSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZVJh
bmdlKENTU1BhcnNlclRva2VuUmFuZ2UmCiB9CiAjZW5kaWYKIAotc3RhdGljIFN0cmluZyBjb25j
YXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJvb2wgYWRkZWRTcGFjZSA9IGZhbHNlOwotICAgIGNv
bnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIHdoaWxl
IChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAgICAgICAgaWYgKCFidWls
ZGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAg
ICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKSk7Ci0gICAgfQot
ICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZpcnN0VG9rZW4uaWQoKSkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwotfQotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFtaWx5TmFtZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBT
dHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlRm9udEZhbWlseVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKS50b1N0cmluZygpKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRv
a2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNv
bmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7Ci0gICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsKKyAgICBpZiAoYXV0byBm
YW1pbHlOYW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoKmZhbWlseU5h
bWUpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lR2VuZXJpY0ZhbWlseShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCBiN2UxOWZiZDY0
YTc4YzBmN2Q1OWM3MTQ4N2Q3OTY2ZTdhMGIwOTllLi5jZjNkOWMxYmE5YmI3ZDljZGZiZTNhMTU4
OTEzODcxMjQwYjExMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA2OTU4YTY2Mjc4Yzk1OGRkMWU2MjkzNGU4ZDA5MzVi
YTRlYmQzYjljLi44MjVlM2MyY2FmMTU5NDdkOTM5NWUxN2YwYmI0YjAyYThlNzI2YzZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCkBAIC0xMjgsMTUgKzEyOCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoKQor
ICAgIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoYm9vbCBhbGxvd1BlcmNlbnRP
ZiA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1
ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KQorICAgICAgICBp
ZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpOworICAgICAgICBpZiAo
Y2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkgeworICAgICAgICAgICAg
aWYgKCFhbGxvd1BlcmNlbnRPZiB8fCAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudExlbmd0aAorICAgICAgICAgICAgICAgICYmIGNhdGVnb3J5ICE9IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIH0KICAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7CiAgICAg
ICAgIHJldHVybiBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKICAgICB9CiAKLSAgICBPcHRp
b25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KCkKKyAgICBPcHRpb25hbDxBbmdsZVJhdz4gY29u
c3VtZUFuZ2xlUmF3KCkKICAgICB7CiAgICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxj
VmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTQ0LDYgKzE1MCwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgbV9jYWxjVmFs
dWUtPmRvdWJsZVZhbHVlKCkgfSB9OwogICAgIH0KIAorICAgIE9wdGlvbmFsPExlbmd0aFJhdz4g
Y29uc3VtZUxlbmd0aFJhdygpCisgICAgeworICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1f
Y2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIG1fc291cmNlUmFuZ2UgPSBt
X3JhbmdlOworICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVUeXBlKCks
IG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJh
bmdlIG1fcmFuZ2U7CkBAIC0xNzcsMTAgKzE5MSwxMiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAg
ICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAxKTsKIH0KIAotYm9vbCBjb25zdW1lTnVt
YmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKK2Jvb2wg
Y29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1
bHQsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tl
bikgeworICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYg
dG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXN1bHQgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xODgsNyArMjA0LDcgQEAg
Ym9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUm
IHJlc3VsdCkKICAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBDYWxjUGFyc2VyIGNh
bGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7
CiAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdyhyZXN1bHQpOwogfQogCkBA
IC0xOTYsMjIgKzIxMiwxOSBAQCBib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGRvdWJsZSYgcmVzdWx0KQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygp
OwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKLSAgICAgICAgaWYgKHZh
bHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgp
IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCisgICAgaWYgKHRva2VuLnR5cGUo
KSA9PSBGdW5jdGlvblRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYg
KGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1ZhbHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoY2FsY1ZhbHVlLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFs
dWUoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENhbGNQYXJz
ZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJh
bmdlKTsKLSAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjVmFsdWUgPSBjYWxjUGFyc2Vy
LnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CiAgICAgfQogCisgICAgZG91Ymxl
IG51bWJlcjsKKyAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwgbnVtYmVyLCB2YWx1ZVJh
bmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUobnVtYmVyLCB0b2tlbi51bml0VHlwZSgpKTsKKwogICAgIHJldHVybiBudWxscHRyOwogfQog
CkBAIC0yMjIsNyArMjM1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGRpdmlzaWJsZUJ5MTAwKGRv
dWJsZSB2YWx1ZSkKIH0KICNlbmRpZgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8
ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKIHsKICAgICAvLyBWYWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRl
ciB0aGFuIG9yIGVxdWFsIHRvIDEwMDAgYXJlIHBhcnNlIGVycm9ycy4KICAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKQEAgLTIzMCwxMSArMjQzLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCiAjaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCiAgICAgICAgICYmIHRva2VuLm51bWVy
aWNWYWx1ZVR5cGUoKSA9PSBJbnRlZ2VyVmFsdWVUeXBlICYmIGRpdmlzaWJsZUJ5MTAwKHRva2Vu
Lm51bWVyaWNWYWx1ZSgpKQogI2VuZGlmCi0gICAgKQotICAgICAgICByZXR1cm4gY29uc3VtZU51
bWJlcihyYW5nZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgKSB7CisgICAgICAgIGRvdWJsZSByZXN1
bHQ7CisgICAgICAgIGlmIChjb25zdW1lTnVtYmVyUmF3KHJhbmdlLCByZXN1bHQpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9
CiAKICAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gIltGb3Ig
Y2FsYygpXSwgdGhlIHVzZWQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0
IGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdlIGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIK
ICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlciwgVmFsdWVSYW5nZUFsbCk7CkBAIC0yNDUsOSArMjYyLDE2IEBAIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCiAjZW5kaWYKICAgICApIHsKICAgICAgICAgcmVzdWx0ID0gc3RkOjptaW4oc3RkOjpt
YXgocmVzdWx0LCBzdGQ6Om5leHRhZnRlcigwLiwgMS4pKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4s
IDAuKSk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKHJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1i
ZXJSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZSgqcmVzdWx0LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKQEAgLTI1OSwxNCArMjgzLDE0IEBAIGlubGluZSBib29sIHNob3VsZEFj
Y2VwdFVuaXRsZXNzVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUsCiAgICAgICAgIHx8IChjc3NQYXJzZXJNb2RlID09IEhUTUxRdWlya3NNb2RlICYmIHVuaXRs
ZXNzID09IFVuaXRsZXNzUXVpcms6OkFsbG93KTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcykKK09wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RGltZW5zaW9uVG9rZW4pIHsKICAgICAgICAgc3dpdGNoICh0b2tlbi51bml0VHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1TOgogICAgICAgICAgICAgaWYg
KGNzc1BhcnNlck1vZGUgIT0gVUFTaGVldE1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgICAg
IEZBTExUSFJPVUdIOwogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgogICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKQEAgLTI4NywyOCArMzExLDM5IEBAIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kCiAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1l
cmljVmFsdWUoKSA8IDApIHx8IHN0ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1ZhbHVlKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
bnVtZXJpY1ZhbHVlKCksIHRva2VuLnVuaXRUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgeyB0b2tlbi51bml0VHlwZSgpLCByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKICAgICB9CiAg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgewogICAgICAgICBpZiAoIXNob3Vs
ZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUs
IHVuaXRsZXNzKQogICAgICAgICAgICAgfHwgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5l
Z2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChz
dGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBDU1NVbml0VHlwZSB1bml0VHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfUFg7
Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXRUeXBl
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsg
Q1NTVW5pdFR5cGU6OkNTU19QWCwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5u
dW1lcmljVmFsdWUoKSB9IH07CiAgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5j
dGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKLSAgICBpZiAoY2FsY1BhcnNlci52YWx1ZSgp
ICYmIGNhbGNQYXJzZXIudmFsdWUoKS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGgpCi0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAg
IHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhSYXcoKTsKK30KKworUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Cisg
ICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBj
YWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAg
fQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFy
c2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQtPnZhbHVlLCByZXN1bHQtPnR5cGUp
OwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0zMzMsNyArMzY4LDcgQEAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgVmFsdWVSYW5nZQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKLSAgICAg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmds
ZSwgdmFsdWVSYW5nZSk7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSk7CiAgICAgICAgIGlmIChjb25z
dCBDU1NDYWxjVmFsdWUqIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CiAgICAg
ICAgICAgICBpZiAoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudCkKICAgICAgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFs
dWUoKTsKQEAgLTM2MSwyNiArMzk2LDYxIEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFs
dWUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
KQorT3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKICAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2Vu
LnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4p
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB2YWx1
ZVJhbmdlLCB1bml0bGVzcyk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9r
ZW4pCi0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudChyYW5nZSwgdmFsdWVSYW5nZSk7Cisg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0g
TnVtYmVyVG9rZW4pIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IH0KKyAgICBpZiAodG9rZW4udHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbikgeworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBjb25zdW1lUGVyY2VudFJhdyhyYW5nZSwgdmFsdWVSYW5nZSkpCisg
ICAgICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCB2YWx1ZVJhbmdlKTsKICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9
IGNhbGNQYXJzZXIudmFsdWUoKSkgewotICAgICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShj
YWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3NzUGFyc2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1
cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxj
VmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAg
ICAgICBpZiAoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2FsY1BhcnNlci5j
b25zdW1lTGVuZ3RoUmF3KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQg
fTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0
ID0gY2FsY1BhcnNlci5jb25zdW1lUGVyY2VudFJhdyh0cnVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAg
ICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGN1bGF0
aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ29uc3VtZUNh
bGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwg
dW5pdGxlc3MpKSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hPbigqcmVzdWx0LCBbXSAoTGVuZ3Ro
UmF3IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAgICAgIH0sIFtd
IChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudGFnZSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJD
RU5UQUdFKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1P
cHRpb25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitP
cHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pIHsKQEAgLTUwMiwxMSArNTcyLDI1
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q1NTVmFs
dWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpCit7CisgICAgaWYgKHJhbmdlLnBlZWso
KS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVlaygpLmlkKCkgPiB1cHBlcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3KHJhbmdlKTsKIH0K
IAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKQEAg
LTE4MDMsNiArMTg4NywyMjggQEAgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRleHQgY29udGUKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NT
MjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJ
ZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTbWFsbENhcHM+KHJhbmdlKTsKK30KKwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxD
U1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xkLCBDU1NWYWx1ZUJvbGRlciwgQ1NTVmFsdWVMaWdo
dGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2Vp
Z2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0
dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0
TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3Ry
ZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBy
ZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlVWx0cmFDb25kZW5zZWQsIENTU1ZhbHVlRXh0
cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVuc2VkLCBDU1NWYWx1ZVNlbWlDb25kZW5zZWQsIENT
U1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlFeHBhbmRlZCwgQ1NTVmFsdWVFeHBhbmRlZCwgQ1NT
VmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1ZVVsdHJhRXhwYW5kZWQ+KHJhbmdlKTsKK30KKwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENT
U1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxpYywgQ1NTVmFsdWVPYmxpcXVlPihyYW5nZSk7Cit9
CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIGF1
dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhyYW5nZSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGlk
ZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWRlbnQg
PT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAgIHJldHVybiB7IHsgaWRlbnQsIFdURjo6bnVsbG9w
dCB9IH07CisgICAgQVNTRVJUKGlkZW50ID09IENTU1ZhbHVlT2JsaXF1ZSk7CisjaWYgRU5BQkxF
KFZBUklBVElPTl9GT05UUykKKyAgICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Cisg
ICAgICAgICAgICBhdXRvIGFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworICAgICAgICAgICAgaWYgKGZv
bnRTdHlsZUlzV2l0aGluUmFuZ2UoYW5nbGVJbkRlZ3JlZXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCBXVEZNb3ZlKGFuZ2xlKSB9IH07CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CisjZW5kaWYKKyAgICByZXR1cm4geyB7IENTU1ZhbHVl
T2JsaXF1ZSwgV1RGOjpudWxsb3B0IH0gfTsKK30KKworU3RyaW5nIGNvbmNhdGVuYXRlRmFtaWx5
TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7CisgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgd2hpbGUgKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICAgICAgYWRkZWRT
cGFjZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmQocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsKKyAgICB9CisgICAgaWYgKCFhZGRl
ZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tlbi5pZCgpKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK09wdGlv
bmFsPFN0cmluZz4gY29uc3VtZUZhbWlseU5hbWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pCisgICAg
ICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9T
dHJpbmcoKTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIFN0cmluZyBmYW1pbHlOYW1lID0gY29uY2F0
ZW5hdGVGYW1pbHlOYW1lKHJhbmdlKTsKKyAgICBpZiAoZmFtaWx5TmFtZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmFtaWx5TmFtZTsKK30KKwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVyaWNGYW1pbHlSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhbmdlUmF3KHJhbmdl
LCBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVdlYmtpdEJvZHkpOworfQorCitPcHRpb25hbDxXVEY6
OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWlseVJhdz4gbGlzdDsK
KyAgICBkbyB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUdlbmVyaWNGYW1pbHlS
YXcocmFuZ2UpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqaWRlbnQgfSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaWYgKGF1dG8gc3RyaW5nID0gY29uc3VtZUZhbWlseU5hbWVS
YXcocmFuZ2UpKQorICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKHsgKnN0cmluZyB9KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICB9CisgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpOworICAgIHJldHVybiBsaXN0OworfQorCitPcHRpb25hbDxGb250U2l6ZVJhdz4gY29uc3Vt
ZUZvbnRTaXplUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgaWYgKHJhbmdlLnBl
ZWsoKS5pZCgpID49IENTU1ZhbHVlWHhTbWFsbCAmJiByYW5nZS5wZWVrKCkuaWQoKSA8PSBDU1NW
YWx1ZUxhcmdlcikgeworICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhy
YW5nZSkpCisgICAgICAgICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUs
IHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWln
aHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsK
KyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgKmlkZW50IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgZG91YmxlIG51bWJlcjsKKyAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5n
ZSwgbnVtYmVyLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpKQorICAgICAgICByZXR1cm4geyBudW1i
ZXIgfTsKKworICAgIGlmIChhdXRvIGxlbmd0aE9yUGVyY2VudCA9IGNvbnN1bWVMZW5ndGhPclBl
cmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisg
ICAgICAgIHJldHVybiB7ICpsZW5ndGhPclBlcmNlbnQgfTsKKworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29ya2VyU2FmZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorewor
ICAgIC8vIExldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluaGVyaXQgb3IgaW5pdGlhbCBzb21l
d2hlcmUgaW4gdGhlIHNob3J0aGFuZC4KKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlQ29w
eSA9IHJhbmdlOworICAgIHdoaWxlICghcmFuZ2VDb3B5LmF0RW5kKCkpIHsKKyAgICAgICAgQ1NT
VmFsdWVJRCBpZCA9IHJhbmdlQ29weS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7
CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQgfHwgaWQgPT0gQ1NTVmFsdWVJbml0
aWFsKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBGb250
UmF3IHJlc3VsdDsKKworICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBDU1NW
YWx1ZUlEIGlkID0gcmFuZ2UucGVlaygpLmlkKCk7CisgICAgICAgIGlmICghcmVzdWx0LnN0eWxl
KSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC5zdHlsZSA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXJlc3VsdC52YXJpYW50Q2FwcyAmJiAoaWQgPT0gQ1NTVmFsdWVO
b3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpKSB7CisgICAgICAgICAgICAvLyBGb250
IHZhcmlhbnQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXJ0aWN1bGFyLCBpdCBvbmx5IGFjY2VwdHMg
bm9ybWFsIG9yIHNtYWxsLWNhcHMuCisgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1mb250cy8jcHJvcGRlZi1mb250CisgICAgICAgICAgICBpZiAoKHJlc3Vs
dC52YXJpYW50Q2FwcyA9IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KHJhbmdlKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXN1bHQud2Vp
Z2h0KSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC53ZWlnaHQgPSBjb25zdW1lRm9udFdlaWdo
dFJhdyhyYW5nZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICghcmVzdWx0LnN0cmV0Y2gpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0cmV0
Y2ggPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KKyAgICBpZiAoYXV0byBzaXplID0gY29u
c3VtZUZvbnRTaXplUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmVzdWx0LnNp
emUgPSAqc2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGlmIChjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkgeworICAgICAgICBp
ZiAoIShyZXN1bHQubGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KHJhbmdlLCBjc3NQ
YXJzZXJNb2RlKSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKwor
ICAgIC8vIEZvbnQgZmFtaWx5IG11c3QgY29tZSBub3cuCisgICAgaWYgKGF1dG8gZmFtaWx5ID0g
Y29uc3VtZUZvbnRGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICByZXN1bHQuZmFtaWx5ID0gKmZh
bWlseTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAo
IXJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitBdG9tU3RyaW5nIGdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQo
Q1NTVmFsdWVJRCBpZGVudCkKK3sKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2FzZSBDU1NW
YWx1ZVNlcmlmOgorICAgICAgICByZXR1cm4gc2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1
ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNhbnNTZXJpZkZhbWlseTsKKyAgICBjYXNlIENT
U1ZhbHVlQ3Vyc2l2ZToKKyAgICAgICAgcmV0dXJuIGN1cnNpdmVGYW1pbHk7CisgICAgY2FzZSBD
U1NWYWx1ZUZhbnRhc3k6CisgICAgICAgIHJldHVybiBmYW50YXN5RmFtaWx5OworICAgIGNhc2Ug
Q1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgIHJldHVybiBtb25vc3BhY2VGYW1pbHk7CisgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgIHJldHVybiBwaWN0b2dyYXBo
RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTeXN0ZW1VaToKKyAgICAgICAgcmV0dXJuIHN5c3Rl
bVVpRmFtaWx5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmgKaW5kZXggYTg3YmQyMGFhMmE1MjM2MTRiZDM4M2JjMDgzNTc0NDg0
ZmE0MDZiYi4uMWRmNGU1NDM4N2E1MDI4YTRlMTMwYTVhMjljYzlkNGE2ODVjYTAyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVk
ZSAiTGVuZ3RoLmgiIC8vIEZvciBWYWx1ZVJhbmdlCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDI4ICs1Nyw0MSBAQCBDU1NQYXJzZXJUb2tlblJh
bmdlIGNvbnN1bWVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBlbnVtIGNsYXNzIFVu
aXRsZXNzUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07CiBlbnVtIGNsYXNzIEFsbG93WFJlc29sdXRp
b25Vbml0IHsgQWxsb3csIEZvcmJpZCB9OwogCi1zdHJ1Y3QgQW5nbGUgeworc3RydWN0IEFuZ2xl
UmF3IHsKICAgICBDU1NVbml0VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1ZTsKIH07CiAKK3N0
cnVjdCBMZW5ndGhSYXcgeworICAgIENTU1VuaXRUeXBlIHR5cGU7CisgICAgZG91YmxlIHZhbHVl
OworfTsKKwordXNpbmcgTGVuZ3RoT3JQZXJjZW50UmF3ID0gV1RGOjpWYXJpYW50PExlbmd0aFJh
dywgZG91YmxlPjsKKwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46Om1heCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1ib29sIGNvbnN1bWVOdW1i
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0KTsKK2Jvb2wgY29uc3Vt
ZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1bHQsIFZhbHVlUmFu
Z2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOworT3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0g
VW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFs
dWVSYW5nZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKK09wdGlvbmFsPExlbmd0aE9yUGVyY2Vu
dFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NT
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZv
cmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotT3B0aW9uYWw8QW5nbGU+IGNvbnN1bWVB
bmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayk7CitPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlk
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0
bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVz
b2x1dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQWxsb3dYUmVzb2x1dGlvblVuaXQgPSBBbGxv
d1hSZXNvbHV0aW9uVW5pdDo6Rm9yYmlkKTsKIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVl
SUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlE
IGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENT
U1ZhbHVlSUQgdXBwZXIpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFsdWVJRC4uLj4gaW5s
aW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQgaWQpOwordGVtcGxhdGU8Q1NTVmFsdWVJ
RC4uLiBhbGxvd2VkSWRlbnRzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBhbGxvd2VkSWRl
bnRzPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUN1c3RvbUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTExNSw2ICsxMzAsNDAgQEAgZW51bSBjbGFzcyBB
bGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFsbG93ZWRGaWx0
ZXJGdW5jdGlvbnMpOwogUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZG93
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJv
b2wgYWxsb3dTcHJlYWQpOwogCitzdHJ1Y3QgRm9udFN0eWxlUmF3IHsKKyAgICBDU1NWYWx1ZUlE
IHN0eWxlOworICAgIE9wdGlvbmFsPEFuZ2xlUmF3PiBhbmdsZTsKK307Cit1c2luZyBGb250V2Vp
Z2h0UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRvdWJsZT47Cit1c2luZyBGb250U2l6
ZVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
Okxlbmd0aE9yUGVyY2VudFJhdz47Cit1c2luZyBMaW5lSGVpZ2h0UmF3ID0gV1RGOjpWYXJpYW50
PENTU1ZhbHVlSUQsIGRvdWJsZSwgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBl
cmNlbnRSYXc+OwordXNpbmcgRm9udEZhbWlseVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlE
LCBTdHJpbmc+OworCitzdHJ1Y3QgRm9udFJhdyB7CisgICAgT3B0aW9uYWw8Rm9udFN0eWxlUmF3
PiBzdHlsZTsKKyAgICBPcHRpb25hbDxDU1NWYWx1ZUlEPiB2YXJpYW50Q2FwczsKKyAgICBPcHRp
b25hbDxGb250V2VpZ2h0UmF3PiB3ZWlnaHQ7CisgICAgT3B0aW9uYWw8Q1NTVmFsdWVJRD4gc3Ry
ZXRjaDsKKyAgICBGb250U2l6ZVJhdyBzaXplOworICAgIE9wdGlvbmFsPExpbmVIZWlnaHRSYXc+
IGxpbmVIZWlnaHQ7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWlseVJhdz4gZmFtaWx5OworfTsK
KworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWlnaHRL
ZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFdlaWdo
dFJhdz4gY29uc3VtZUZvbnRXZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9u
YWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3R5bGVLZXl3
b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFN0eWxlUmF3
PiBjb25zdW1lRm9udFN0eWxlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
KTsKK1N0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwor
T3B0aW9uYWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29u
c3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFNp
emVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CitPcHRpb25hbDxM
aW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSk7CitPcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOworQXRvbVN0cmluZyBnZW5lcmlj
Rm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQpOworCiAvLyBUZW1wbGF0ZSBpbXBsZW1l
bnRhdGlvbnMgYXJlIGF0IHRoZSBib3R0b20gb2YgdGhlIGZpbGUgZm9yIHJlYWRhYmlsaXR5Lgog
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBlbXB0eUJhc2VDYXNlPiBpbmxpbmUgYm9vbCBpZGVudE1h
dGNoZXMoQ1NTVmFsdWVJRCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEyMyw2ICsxNzIsMTMgQEAg
dGVtcGxhdGU8Q1NTVmFsdWVJRCBoZWFkLCBDU1NWYWx1ZUlELi4uIHRhaWw+IGlubGluZSBib29s
IGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUkKICAgICByZXR1cm4gaWQgPT0gaGVhZCB8fCBpZGVudE1h
dGNoZXM8dGFpbC4uLj4oaWQpOwogfQogCit0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIG5hbWVzPiBP
cHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAh
aWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQoKSkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCkuaWQoKTsKK30KKwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBuYW1lcz4gUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Up
CiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRN
YXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA4
OTE4MDI3OWFmMmI3Zjc2NTZiY2RkZjhlZWMwODMzM2I2NWM2MTQ4Li45YTA2MGZlMWUzNDhmMDA0
OGIzN2UzNzVlNzkzMjI3ZGYzMGNlNDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM2LDE2ICszNiwy
MSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGF0
aDJELmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgorI2luY2x1ZGUgIlN0eWxl
Rm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVGb3JGb250UmF3LmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CkBAIC0xMzQsMTYgKzEzOSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51
bnBhcnNlZEZvbnQgJiYgc3RhdGUoKS5mb250LnJlYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
KTsKLSAgICBDU1NQYXJzZXI6OnBhcnNlVmFsdWUocGFyc2VkU3R5bGUsIENTU1Byb3BlcnR5Rm9u
dCwgbmV3Rm9udCwgdHJ1ZSwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFtX3VzZXNDU1NDb21wYXRp
YmlsaXR5UGFyc2VNb2RlKSk7Ci0gICAgaWYgKHBhcnNlZFN0eWxlLT5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFN0cmluZyBmb250VmFsdWUgPSBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnQpOwotCiAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6
Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3B1YmxpYy1odG1sLzIwMDlKdWwvMDk0Ny5o
dG1sLAotICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBp
Z25vcmVkLgotICAgIGlmIChmb250VmFsdWUgPT0gImluaGVyaXQiIHx8IGZvbnRWYWx1ZSA9PSAi
aW5pdGlhbCIpCisgICAgLy8gdGhlICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0
IGJlIGlnbm9yZWQuIHBhcnNlRm9udFdvcmtlclNhZmUoKSBpZ25vcmVzIHRoZXNlLgorICAgIGF1
dG8gZm9udFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJp
Y3RUb0NTU1BhcnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAg
ICBpZiAoIWZvbnRSYXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBwYXJzZSBzdWNj
ZWVkZWQuCkBAIC0xNTgsMzMgKzE1NywxOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gY2FudmFzKCkuZG9jdW1lbnQoKTsKICAgICBkb2N1bWVudC51cGRhdGVTdHlsZUlmTmVlZGVk
KCk7CiAKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICBp
ZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IGNhbnZhcygpLmNvbXB1dGVkU3R5bGUoKSkKLSAgICAg
ICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2NyaXB0aW9uIHsg
Y29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgfSk7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbiA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKSB9OwogICAgIGVsc2UgewotICAgICAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRl
ZmF1bHRGb250RGVzY3JpcHRpb247Ci0gICAgICAgIGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0
T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKLSAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKERlZmF1bHRGb250U2l6ZSk7Ci0gICAgICAgIGRlZmF1bHRG
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6ZSk7Ci0KLSAgICAg
ICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlZmF1bHRGb250RGVzY3Jp
cHRpb24pKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShEZWZhdWx0Rm9u
dEZhbWlseSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKERlZmF1
bHRGb250U2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoRGVm
YXVsdEZvbnRTaXplKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9udENhc2NhZGUoKS51cGRh
dGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLQotICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQg
cHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgotCi0gICAgU3R5bGU6Ok1hdGNoUmVz
dWx0IG1hdGNoUmVzdWx0OwotICAgIGF1dG8gcGFyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoKm5ld1N0eWxlKTsKLSAgICBTdHlsZTo6QnVpbGRlciBzdHlsZUJ1aWxkZXIoKm5ld1N0eWxl
LCB7IGRvY3VtZW50LCBwYXJlbnRTdHlsZSB9LCBtYXRjaFJlc3VsdCwgeyB9KTsKLQotICAgIHN0
eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJz
ZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgp
KTsKLSAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHls
ZSkuZ2V0KCkpOwotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVy
dHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwotICAgIHN0eWxlQnVpbGRl
ci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VkU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOwotICAgIHN0eWxl
QnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsK
KyAgICBhdXRvIGZvbnRTdHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdygqZm9udFJhdywg
V1RGTW92ZShmb250RGVzY3JpcHRpb24pLCBkb2N1bWVudCk7CiAKLSAgICBtb2RpZmlhYmxlU3Rh
dGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpuZXdTdHlsZSk7
CisgICAgaWYgKGZvbnRTdHlsZSkKKyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0
aWFsaXplKGRvY3VtZW50LmZvbnRTZWxlY3RvcigpLCAqZm9udFN0eWxlKTsKIH0KIAogc3RhdGlj
IENhbnZhc1RleHRBbGlnbiB0b0NhbnZhc1RleHRBbGlnbihUZXh0QWxpZ24gdGV4dEFsaWduKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaAppbmRleCBiNjNkNWZkZjlj
MTVlMmIzZDY2MGRmYjgwMjA3NzdlNTE3ODFlMjNiLi43ZjRjZTQwZjNlMmZiNjcxMGI4MjcwNWEx
NWIyNThiN2RjYTMzNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1
aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0
b20uaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU0ZvbnRWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKICNpbmNsdWRlICJDU1NHcmlkVGVtcGxhdGVBcmVhc1Zh
bHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAi
Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUu
aCIKICNpbmNsdWRlICJDb3VudGVyLmgiCkBAIC05ODgsNDAgKzk4OSwxMSBAQCBpbmxpbmUgdm9p
ZCBCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVgogICAgICAgICAgICAgLy8gSWYgdGhlIGZhbWlseSBuYW1lIHdhcyByZXNv
bHZlZCBieSB0aGUgQ1NTIHBhcnNlciBmcm9tIGEgc3lzdGVtIGZvbnQgSUQsIHRoZW4gaXQgaXMg
Z2VuZXJpYy4KICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IGZvbnRGYW1pbHkuZnJvbVN5
c3RlbUZvbnRJRDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoY29udGVu
dFZhbHVlLnZhbHVlSUQoKSkgewotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6
CisgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtp
dEJvZHkpCiAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCku
c2V0dGluZ3MoKS5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkg
PSBzZXJpZkZhbWlseTsKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlzR2Vu
ZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1ZhbHVlU2Fuc1NlcmlmOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHNhbnNTZXJp
ZkZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5ID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dl
bmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gZmFudGFzeUZh
bWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKLSAgICAg
ICAgICAgICAgICBmYW1pbHkgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNH
ZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgotICAgICAgICAgICAgICAgIGZhbWlseSA9
IHBpY3RvZ3JhcGhGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTeXN0
ZW1VaToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzeXN0ZW1VaUZhbWlseTsKLSAgICAgICAg
ICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBmYW1pbHkgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5
RnJvbVZhbHVlSUQoY29udGVudFZhbHVlLnZhbHVlSUQoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
Rm9udFJhdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMjAyNjExZmQ3ZGFkZWI1YmUxNzE1NWRhZDJmMzMwMDZlNTA1ZWU0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9y
Rm9udFJhdy5jcHAKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIgorCisjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZURlc2NyaXB0aW9uLmgiCisj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25z
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFN0eWxlIHsKKwordXNpbmcg
bmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczsKKworT3B0aW9uYWw8UmVuZGVyU3R5
bGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24sIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAg
ICBhdXRvIGZvbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKworICAgIGF1dG8gZ2V0
UGFyZW50U3R5bGUgPSBbJl0gKCkgLT4gc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB7Cisg
ICAgICAgIGF1dG8gcGFyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZm9udFN0eWxl
KTsKKyAgICAgICAgcGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikpOworICAgICAgICBwYXJlbnRTdHlsZS0+Zm9udENh
c2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgcmV0dXJu
IHBhcmVudFN0eWxlOworICAgIH07CisKKyAgICAvLyBNYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9u
Z2hhbmRzIGludG8gdGhlIHN0eWxlLgorICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250RGVzY3Jp
cHRpb24uc3BlY2lmaWVkU2l6ZSgpOworCisgICAgLy8gRm9udCBmYW1pbHkgYXBwbGllZCBpbiB0
aGUgc2FtZSB3YXkgYXMgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseQor
ICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBz
aG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgorICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZp
eGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOwor
CisgICAgVmVjdG9yPEF0b21TdHJpbmc+IGZhbWlsaWVzOworICAgIGZhbWlsaWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoZm9udFJhdy5mYW1pbHkuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYg
aXRlbSA6IGZvbnRSYXcuZmFtaWx5KSB7CisgICAgICAgIEF0b21TdHJpbmcgZmFtaWx5OworICAg
ICAgICBib29sIGlzR2VuZXJpY0ZhbWlseSA9IGZhbHNlOworICAgICAgICBzd2l0Y2hPbihpdGVt
LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9
IGlkZW50ICE9IENTU1ZhbHVlV2Via2l0Qm9keTsKKyAgICAgICAgICAgIGZhbWlseSA9IGlzR2Vu
ZXJpY0ZhbWlseSA/IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlG
cm9tVmFsdWVJRChpZGVudCkKKyAgICAgICAgICAgICAgICA6IGRvY3VtZW50LnNldHRpbmdzKCku
c3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAgIH0sIFsmXSAoY29uc3QgU3RyaW5nJiBmYW1p
bHlTdHJpbmcpIHsKKyAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseVN0cmluZzsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgaWYgKGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQoIWlzR2VuZXJpY0ZhbWlseSk7CisgICAgICAgIGZh
bWlsaWVzLnVuY2hlY2tlZEFwcGVuZChmYW1pbHkpOworICAgIH0KKworICAgIGlmIChmYW1pbGll
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldEZhbWlsaWVzKGZhbWlsaWVzKTsKKworICAgIGlmIChmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7
CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9u
LmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gc2l6ZSA9IFN0
eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4
ZWREZWZhdWx0U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwg
Zm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZhbHNlLCAmZm9udFN0eWxlLCBkb2N1
bWVudCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRm9udCBzdHlsZSBhcHBsaWVkIGlu
IHRoZSBzYW1lIHdheSBhcyBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN0eWxlRnJvbVZh
bHVlCisgICAgaWYgKGZvbnRSYXcuc3R5bGUpIHsKKyAgICAgICAgc3dpdGNoIChmb250UmF3LnN0
eWxlLT5zdHlsZSkgeworICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUl0YWxpYzoKKyAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJdGFsaWMoaXRhbGljVmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIENTU1ZhbHVlT2JsaXF1ZTogeworICAgICAgICAgICAgZmxvYXQgZGVn
cmVlczsKKyAgICAgICAgICAgIGlmIChmb250UmF3LnN0eWxlLT5hbmdsZSkKKyAgICAgICAgICAg
ICAgICBkZWdyZWVzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlRGVncmVlcyhmb250UmF3LnN0eWxlLT5hbmdsZS0+dHlwZSwgZm9udFJhdy5zdHlsZS0+YW5n
bGUtPnZhbHVlKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVncmVlcyA9
IDA7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRTZWxlY3Rpb25W
YWx1ZShkZWdyZWVzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGb250U3R5
bGVBeGlzKChmb250UmF3LnN0eWxlICYmIGZvbnRSYXcuc3R5bGUtPnN0eWxlID09IENTU1ZhbHVl
SXRhbGljKSA/IEZvbnRTdHlsZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50KTsKKwor
ICAgIGlmIChmb250UmF3LnZhcmlhbnRDYXBzKSB7CisgICAgICAgIHN3aXRjaCAoKmZvbnRSYXcu
dmFyaWFudENhcHMpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6Ok5vcm1hbCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwczoKKyAg
ICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6
OlNtYWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQWxsU21h
bGxDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRW
YXJpYW50Q2Fwczo6QWxsU21hbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVQZXRpdGVDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlQWxsUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVVuaWNhc2U6CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGl0bGluZ0NhcHM6Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBz
OjpUaXRsaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChmb250UmF3LndlaWdodCkgeworICAgICAgICBhdXRvIHdlaWdo
dCA9IHN3aXRjaE9uKCpmb250UmF3LndlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9y
bWFsOgorICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOworICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUJvbGQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJvbGRXZWln
aHRWYWx1ZSgpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0KGZvbnREZXNj
cmlwdGlvbi53ZWlnaHQoKSk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGlnaHRlcjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdo
dChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bm9ybWFsV2VpZ2h0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgWyZdIChkb3Vi
bGUgd2VpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlOjpjbGFt
cEZsb2F0KHdlaWdodCk7CisgICAgICAgIH0pOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
V2VpZ2h0KHdlaWdodCk7CisgICAgfQorCisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRT
aXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKKyAgICBmbG9hdCBzaXplID0gc3dp
dGNoT24oZm9udFJhdy5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgc3dp
dGNoIChpZGVudCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAgICBj
YXNlIENTU1ZhbHVlTWVkaXVtOgorICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgorICAg
ICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihpZGVudCk7CisgICAgICAgICAgICBy
ZXR1cm4gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVz
ZUZpeGVkRGVmYXVsdFNpemUoKSwgZG9jdW1lbnQpOworICAgICAgICBjYXNlIENTU1ZhbHVlTGFy
Z2VyOgorICAgICAgICAgICAgcmV0dXJuIHBhcmVudFNpemUgKiAxLjJmOworICAgICAgICBjYXNl
IENTU1ZhbHVlU21hbGxlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplIC8gMS4yZjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwLmY7CisgICAgICAgIH0KKyAg
ICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50
UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9y
UGVyY2VudCwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhdyYg
bGVuZ3RoKSB7CisgICAgICAgICAgICBhdXRvIHBhcmVudFN0eWxlID0gZ2V0UGFyZW50U3R5bGUo
KTsKKyAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
eyBwYXJlbnRTdHlsZS5nZXQoKSwgbnVsbHB0ciwgcGFyZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50
LnJlbmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlGb250U2l6ZSB9OworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNh
bGNMZW5ndGhEb3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUp
KTsKKyAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0
dXJuIChwYXJlbnRTaXplICogcGVyY2VudGFnZSkgLyAxMDAuZjsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNw
ZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoc2l6ZSk7CisgICAgfQorCisgICAgaWYgKGZvbnRSYXcubGluZUhlaWdodCkgeworICAgICAg
ICBPcHRpb25hbDxMZW5ndGg+IGxpbmVIZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy5saW5lSGVp
Z2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAgIGlmIChpZGVudCA9PSBD
U1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4gT3B0
aW9uYWw8TGVuZ3RoPihXVEY6Om51bGxvcHQpOworICAgICAgICB9LCBbJl0gKGRvdWJsZSBudW1i
ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxMZW5ndGg+KExlbmd0aChudW1iZXIg
KiAxMDAuMCwgUGVyY2VudCkpOworICAgICAgICB9LCBbJl0gKGNvbnN0IENTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBlcmNlbnQpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgeworICAgICAgICAgICAgICAg
IGF1dG8gcGFyZW50U3R5bGUgPSBnZXRQYXJlbnRTdHlsZSgpOworICAgICAgICAgICAgICAgIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBwYXJlbnRTdHlsZS5nZXQo
KSwgbnVsbHB0ciwgcGFyZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSwgMS4w
ZiwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0IH07CisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlv
bmFsPExlbmd0aD4oTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTm9uQ2FsY0xlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSwgbGVuZ3RoLnR5cGUsIGxlbmd0
aC52YWx1ZSksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0aCksIEZp
eGVkKSk7CisgICAgICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKChmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRTaXplKCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHBlcmNlbnRhZ2UpKSAvIDEwMCwgRml4
ZWQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBpZiAobGluZUhl
aWdodCkKKyAgICAgICAgICAgIGZvbnRTdHlsZS5zZXRMaW5lSGVpZ2h0KFdURk1vdmUobGluZUhl
aWdodC52YWx1ZSgpKSk7CisgICAgfQorCisgICAgZm9udFN0eWxlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGZvbnRTdHlsZS5mb250Q2FzY2FkZSgp
LnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworCisgICAgcmV0dXJuIGZvbnRTdHls
ZTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNv
bHZlRm9yRm9udFJhdy5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9u
dFJhdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjNiMTBhNTAzNWQyZDk2M2ZlYThlZWI2NjRiZGE5YmI2ODk1MmM2
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVG
b3JGb250UmF3LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCituYW1lc3BhY2UgQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCituYW1lc3BhY2UgU3R5bGUgeworCitPcHRp
b25hbDxSZW5kZXJTdHlsZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3QgQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpGb250UmF3JiwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmLCBEb2N1bWVudCYp
OworCit9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410511</attachid>
            <date>2020-10-05 06:56:48 -0700</date>
            <delta_ts>2020-10-15 08:20:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20201005145646.patch</filename>
            <type>text/plain</type>
            <size>63062</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM3Njg5ZDA2MTdlOTI4
N2Q4ZjEzYzg1Yjg5N2ExMGU2MDMwNDRiMC4uN2Q0ZWMzNjBjZDZhNGQ2NTUwNDI3ZjEyM2I5NjA1
YmUyZWRmMTg5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTA5LTI5ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIENTUyBmb250IHNob3J0
aGFuZHMgcGFyc2FibGUgd2l0aGluIGEgd29ya2VyIChpLmUuIHdpdGhvdXQgQ1NTVmFsdWVQb29s
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGZ1
bmN0aW9ucyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhcnNlIENTUyBmb250IHNob3J0aGFuZAor
ICAgICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgdXNpbmcgQ1NTIHZhbHVlcywgc28gaXQgY2FuIGJl
IGRvbmUgc2FmZWx5IG9mZiBvZgorICAgICAgICB0aGUgbWFpbiB0aHJlYWQuIFRvIHN1cHBvcnQg
YW5kIHRlc3QgdGhpcywgYWxzbyBhZGQgZnVuY3Rpb25zIHRvIG1ha2UKKyAgICAgICAgaXQgcG9z
c2libGUgdG8gcmVzb2x2ZSB0aG9zZSBwcm9wZXJ0aWVzIGludG8gYSBzdHlsZSB3aXRob3V0Cisg
ICAgICAgIFN0eWxlQnVpbGRlciBhbmQgdXNlIHRoYXQgd2l0aGluIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKToKKyAgICAg
ICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRXZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN1bWVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZUZhbWlseU5hbWUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoK
KyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1
bWVQZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVOdW1iZXJSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTnVt
YmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3Vt
ZUZvbnRXZWlnaHROdW1iZXJSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRm9udFdlaWdodE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZVBlcmNlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxlbmd0aE9yUGVyY2VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnM6OmNvbnN1bWVBbmdsZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhbmdlUmF3KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRWYXJpYW50
Q1NTMjFSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lRm9udFdlaWdodEtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0UmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29y
ZFZhbHVlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250U3R5bGVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25jYXRlbmF0ZUZhbWlseU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRmFtaWx5
TmFtZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVHZW5lcmljRmFtaWx5UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUZvbnRGYW1pbHlSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9udFNpemVSYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lTGluZUhlaWdodFJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V29y
a2VyU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Omdl
bmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJv
cGVydHlQYXJzZXJIZWxwZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnM6OmNvbnN1bWVJZGVudFJhdyk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0Rm9udCk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9t
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZv
bnRGYW1pbHkpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdyk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oOiBBZGRlZC4KKwogMjAyMC0wOS0x
NyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVbmlmaWVkIGJ1
aWxkIGZpeCBmb3IgInJlZGVmaW5pdGlvbiBvZiAna0NNVmlkZW9Db2RlY1R5cGVfVlA5IgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA3ZmQxYTQ3YzY1MDM4MmNjN2U5ZWIwYTBkNmFiZWJmNzM2YjQ2ZGI1Li40
NTk2YzhjZjFhZGVlNzM1ZjI1MDRlMTFiZWYyYmY4OWI5MzZkOTZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjM3NSw2ICsyMzc1LDcgQEAgc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKIHN0eWxlL1N0
eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAKIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogc3R5bGUv
U3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwCitzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3
LmNwcAogc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKIHN0eWxlL1N0eWxlU2NvcGUuY3BwCiBzdHls
ZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGZiYTIwMjcwMzNjOGU2ZjIyNTdjZDVhYjVj
MTkxOTg2MWRjYzhjNi4uZjg2MDM1MjJlZGJjY2I5ZDdlYWRmYWM0OWY0MTQ0NmEwZTM3MTViMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNTA2OSw2ICs1MDY5LDcgQEAKIAkJRTRDOTFBMEUxODAyMzQzMTAwQTE3RjZEIC8qIFRl
eHRQYWludFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCAqLzsgfTsK
IAkJRTRDOTFBMTYxODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzkxQTE1MTgwOTk5
RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJveGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRENThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8q
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuaCAqLzsgfTsKKwkJRTRENjhFQjUxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RDY4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250
UmF3LmggKi87IH07CiAJCUU0RDU4RUI5MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oICov
OyB9OwogCQlFNEQ1OEVCQjE3QjhGMTI4MDBDQkRDQTggLyogRWxlbWVudFRyYXZlcnNhbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQkExN0I4
RjEyODAwQ0JEQ0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQ5ODhCNDE3QkZEMUY2MDA4NEZCODggLyog
VGV4dE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0RDk4OEIzMTdCRkQxRjYwMDg0RkI4OCAvKiBUZXh0Tm9kZVRyYXZlcnNhbC5o
ICovOyB9OwpAQCAtMTU5OTIsNiArMTU5OTMsOCBAQAogCQlFNEM5MUExNzE4MDk5OUZCMDBBMTdG
NkQgLyogUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJUZXh0TGluZUJveGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTRENThFQjIxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3Vt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVzb2x2
ZUZvckRvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThFQjMx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDY4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJl
c29sdmVGb3JGb250UmF3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFNEQ2OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JGb250UmF3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAv
KiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUZvbnRTaXplRnVu
Y3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUJBMTdCOEYxMjgw
MENCRENBOCAvKiBFbGVtZW50VHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVsZW1lbnRUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4Mzc2LDYgKzI4Mzc5LDggQEAKIAkJCQlFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyogU3R5
bGVSZWxhdGlvbnMuaCAqLywKIAkJCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVS
ZXNvbHZlRm9yRG9jdW1lbnQuY3BwICovLAogCQkJCUU0RDU4RUIzMTdCNERCREMwMENCRENBOCAv
KiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAorCQkJCUU0RDY4RUIyMTdCNERCREMwMENC
RENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcCAqLywKKwkJCQlFNEQ2OEVCMzE3QjRE
QkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICovLAogCQkJCUUxMzk4NjYx
MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLywKIAkJCQlFMTM5ODY2MjE1
NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovLAogCQkJCUU0NjFENjVDMUJCMEM3
RjAwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmNwcCAqLywKQEAgLTMzOTI0LDYgKzMzOTI5LDcgQEAK
IAkJCQlCQzIyNzI4NzBFODJFNzA3MDBFN0Y5NzUgLyogU3R5bGVSZWZsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRENjhFQjUxN0I0REJEQzAw
Q0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
Mzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNEJCRUQ0RDE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCA2
YzYyZDRiMmUzOTdlYWU2ZThhM2JhNjA3MDRhNmEyNDJlYTdlZGFmLi5mMmFkMTJjMDlmZjRkNmZh
NTA3NzVlMmY5ODIwNGFjZmE5ZjkxYmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXIuY3BwCkBAIC0xMzgsNiArMTM4LDE1IEBAIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBD
U1NQYXJzZXI6OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCiAgICAgcmV0dXJuIENT
U1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihzdHJpbmcpOwogfQogCitPcHRpb25hbDxD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IENTU1BhcnNlcjo6cGFyc2VGb250V29y
a2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KQoreworICAgIENTU1Rva2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJzZXJU
b2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNvbnN1
bWVXaGl0ZXNwYWNlKCk7CisKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpj
b25zdW1lRm9udFdvcmtlclNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCiBSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250
ZXh0KQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyLmgKaW5kZXggOWUwMTA0YWY5NmQ5NTNiNDA3N2YzMmIxYTc3OTFmY2EzZDBkMjkw
Yi4uOTI1ODliZjY5NTc4MGFiNzk3NTI5ODdhNDQ0ZGJhNzk5MjA1YzdlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBAIC00Myw2ICs0MywxMCBAQCBjbGFzcyBTdHlsZVNo
ZWV0Q29udGVudHM7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1
Y3QgU1JHQkE7CiAKK25hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgeworc3RydWN0
IEZvbnRSYXc7Cit9CisKIG5hbWVzcGFjZSBTdHlsZSB7CiBjbGFzcyBCdWlsZGVyU3RhdGU7CiB9
CkBAIC05MSw2ICs5NSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWlu
dDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAKKyAgICBzdGF0aWMg
T3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBwYXJzZUZvbnRXb3Jr
ZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3RhbmRhcmRNb2RlKTsK
KwogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVByb3Bl
cnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKaW5k
ZXggZTQwNGQ0OGVmOGZmZjJlYjlmOTYzODc5ZmM2MWVkMjI4NWZlMDNmOS4uODVkNzA4Mzc2ZWNk
MzBkM2MxYzc2MjhhMDEyNzBiMzc3NTk4ZmRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRl
ICJDU1NQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJDU1NQZW5kaW5nU3Vic3RpdHV0aW9uVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlv
blZhbHVlLmgiCkBAIC04NjEsMTYgKzg2MCwxNiBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMShDU1NQYXJzZXJUb2tlblJhbmdlJiByYQog
ICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU21hbGxDYXBz
PihyYW5nZSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVG
b250V2VpZ2h0S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAg
IHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlQm9sZCwgQ1NTVmFs
dWVCb2xkZXIsIENTU1ZhbHVlTGlnaHRlcj4ocmFuZ2UpOwotfQotCiBzdGF0aWMgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKIHsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEtleXdvcmRW
YWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyKHJhbmdlKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9u
dFdlaWdodFJhdyhyYW5nZSkpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQsIFtd
IChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICAgICAgfSwg
W10gKGRvdWJsZSB3ZWlnaHROdW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHdlaWdodE51bWJlciwgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJzb2x1
dGVLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC05MDcsNyArOTA2
LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRB
YnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJgogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZVVsdHJhQ29uZGVu
c2VkLCBDU1NWYWx1ZUV4dHJhQ29uZGVuc2VkLCBDU1NWYWx1ZUNvbmRlbnNlZCwgQ1NTVmFsdWVT
ZW1pQ29uZGVuc2VkLCBDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTZW1pRXhwYW5kZWQsIENTU1Zh
bHVlRXhwYW5kZWQsIENTU1ZhbHVlRXh0cmFFeHBhbmRlZCwgQ1NTVmFsdWVVbHRyYUV4cGFuZGVk
PihyYW5nZSk7CisgICAgaWYgKGF1dG8gdmFsdWVJRCA9IGNvbnN1bWVGb250U3RyZXRjaEtleXdv
cmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqdmFsdWVJRCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpAQCAtOTYyLDI2ICs5NjMsMTYgQEAg
c3RhdGljIGJvb2wgZm9udFN0eWxlSXNXaXRoaW5SYW5nZShmbG9hdCBvYmxpcXVlKQogCiBzdGF0
aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7Ci0gICAgYXV0
byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKHJhbmdlKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlSUQgPSBy
ZXN1bHQtPnZhbHVlSUQoKTsKLSAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCB2
YWx1ZUlEID09IENTU1ZhbHVlSXRhbGljKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFs
dWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZUlEKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC0+dmFsdWVJRCgpID09IENTU1ZhbHVlT2Js
aXF1ZSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZVJhdyhyYW5nZSwg
Y3NzUGFyc2VyTW9kZSkpIHsKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIGlmICgh
cmFuZ2UuYXRFbmQoKSkgewotICAgICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZShy
YW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAgICAgIGlmIChmb250U3R5bGVJc1dpdGhp
blJhbmdlKGFuZ2xlLT52YWx1ZTxmbG9hdD4oQ1NTVW5pdFR5cGU6OkNTU19ERUcpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpLCBXVEZN
b3ZlKGFuZ2xlKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKHJl
c3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksCisgICAgICAg
ICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQtPmFu
Z2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwogICAgICAgICB9Ci0gICAgfQotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CiAjZW5kaWYKLSAgICByZXR1cm4g
Q1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAgICAgcmV0dXJuIENTU0Zv
bnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE1LDMzICsxMDA2LDExIEBA
IHN0YXRpYyBSZWZQdHI8Q1NTRm9udFN0eWxlUmFuZ2VWYWx1ZT4gY29uc3VtZUZvbnRTdHlsZVJh
bmdlKENTU1BhcnNlclRva2VuUmFuZ2UmCiB9CiAjZW5kaWYKIAotc3RhdGljIFN0cmluZyBjb25j
YXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJvb2wgYWRkZWRTcGFjZSA9IGZhbHNlOwotICAgIGNv
bnN0IENTU1BhcnNlclRva2VuJiBmaXJzdFRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIHdoaWxl
IChyYW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pIHsKLSAgICAgICAgaWYgKCFidWls
ZGVyLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAg
ICAgICAgIGFkZGVkU3BhY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFsdWUoKSk7Ci0gICAgfQot
ICAgIGlmICghYWRkZWRTcGFjZSAmJiBpc0NTU1dpZGVLZXl3b3JkKGZpcnN0VG9rZW4uaWQoKSkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwotfQotCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lRmFtaWx5TmFtZShDU1NQYXJz
ZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBT
dHJpbmdUb2tlbikKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlRm9udEZhbWlseVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkudmFs
dWUoKS50b1N0cmluZygpKTsKLSAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRv
a2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBTdHJpbmcgZmFtaWx5TmFtZSA9IGNv
bmNhdGVuYXRlRmFtaWx5TmFtZShyYW5nZSk7Ci0gICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsKKyAgICBpZiAoYXV0byBm
YW1pbHlOYW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVGb250RmFtaWx5VmFsdWUoKmZhbWlseU5h
bWUpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBj
b25zdW1lR2VuZXJpY0ZhbWlseShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCBiN2UxOWZiZDY0
YTc4YzBmN2Q1OWM3MTQ4N2Q3OTY2ZTdhMGIwOTllLi5jZjNkOWMxYmE5YmI3ZDljZGZiZTNhMTU4
OTEzODcxMjQwYjExMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmNwcAppbmRleCA2OTU4YTY2Mjc4Yzk1OGRkMWU2MjkzNGU4ZDA5MzVi
YTRlYmQzYjljLi44MjVlM2MyY2FmMTU5NDdkOTM5NWUxN2YwYmI0YjAyYThlNzI2YzZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCkBAIC0xMjgsMTUgKzEyOCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoKQor
ICAgIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZVBlcmNlbnRSYXcoYm9vbCBhbGxvd1BlcmNlbnRP
ZiA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2NhbGNWYWx1
ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KQorICAgICAgICBp
ZiAoIW1fY2FsY1ZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpOworICAgICAgICBpZiAo
Y2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkgeworICAgICAgICAgICAg
aWYgKCFhbGxvd1BlcmNlbnRPZiB8fCAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudExlbmd0aAorICAgICAgICAgICAgICAgICYmIGNhdGVnb3J5ICE9IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgIH0KICAgICAgICAgbV9zb3VyY2VSYW5nZSA9IG1fcmFuZ2U7CiAgICAg
ICAgIHJldHVybiBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKTsKICAgICB9CiAKLSAgICBPcHRp
b25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KCkKKyAgICBPcHRpb25hbDxBbmdsZVJhdz4gY29u
c3VtZUFuZ2xlUmF3KCkKICAgICB7CiAgICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9jYWxj
VmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTQ0LDYgKzE1MCwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSwgbV9jYWxjVmFs
dWUtPmRvdWJsZVZhbHVlKCkgfSB9OwogICAgIH0KIAorICAgIE9wdGlvbmFsPExlbmd0aFJhdz4g
Y29uc3VtZUxlbmd0aFJhdygpCisgICAgeworICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1f
Y2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIG1fc291cmNlUmFuZ2UgPSBt
X3JhbmdlOworICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVUeXBlKCks
IG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJh
bmdlIG1fcmFuZ2U7CkBAIC0xNzcsMTAgKzE5MSwxMiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGNvbnN1bWVQb3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAg
ICAgcmV0dXJuIGNvbnN1bWVJbnRlZ2VyKHJhbmdlLCAxKTsKIH0KIAotYm9vbCBjb25zdW1lTnVt
YmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKK2Jvb2wg
Y29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1
bHQsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYg
dG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tl
bikgeworICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYg
dG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXN1bHQgPSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNW
YWx1ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xODgsNyArMjA0LDcgQEAg
Ym9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUm
IHJlc3VsdCkKICAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBDYWxjUGFyc2VyIGNh
bGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7
CiAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdyhyZXN1bHQpOwogfQogCkBA
IC0xOTYsMjIgKzIxMiwxOSBAQCBib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UsIGRvdWJsZSYgcmVzdWx0KQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b25zdW1lTnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygp
OwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKLSAgICAgICAgaWYgKHZh
bHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgp
IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCisgICAgaWYgKHRva2VuLnR5cGUo
KSA9PSBGdW5jdGlvblRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5n
ZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYg
KGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY1ZhbHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoY2FsY1ZhbHVlLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFs
dWUoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENhbGNQYXJz
ZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJh
bmdlKTsKLSAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjVmFsdWUgPSBjYWxjUGFyc2Vy
LnZhbHVlKCkpIHsKLSAgICAgICAgaWYgKGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CiAgICAgfQogCisgICAgZG91Ymxl
IG51bWJlcjsKKyAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwgbnVtYmVyLCB2YWx1ZVJh
bmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFs
dWUobnVtYmVyLCB0b2tlbi51bml0VHlwZSgpKTsKKwogICAgIHJldHVybiBudWxscHRyOwogfQog
CkBAIC0yMjIsNyArMjM1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGRpdmlzaWJsZUJ5MTAwKGRv
dWJsZSB2YWx1ZSkKIH0KICNlbmRpZgogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8
ZG91YmxlPiBjb25zdW1lRm9udFdlaWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSkKIHsKICAgICAvLyBWYWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRl
ciB0aGFuIG9yIGVxdWFsIHRvIDEwMDAgYXJlIHBhcnNlIGVycm9ycy4KICAgICBhdXRvJiB0b2tl
biA9IHJhbmdlLnBlZWsoKTsKQEAgLTIzMCwxMSArMjQzLDE1IEBAIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCiAjaWYgIUVOQUJMRShWQVJJQVRJT05fRk9OVFMpCiAgICAgICAgICYmIHRva2VuLm51bWVy
aWNWYWx1ZVR5cGUoKSA9PSBJbnRlZ2VyVmFsdWVUeXBlICYmIGRpdmlzaWJsZUJ5MTAwKHRva2Vu
Lm51bWVyaWNWYWx1ZSgpKQogI2VuZGlmCi0gICAgKQotICAgICAgICByZXR1cm4gY29uc3VtZU51
bWJlcihyYW5nZSwgVmFsdWVSYW5nZUFsbCk7CisgICAgKSB7CisgICAgICAgIGRvdWJsZSByZXN1
bHQ7CisgICAgICAgIGlmIChjb25zdW1lTnVtYmVyUmF3KHJhbmdlLCByZXN1bHQpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9
CiAKICAgICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gIltGb3Ig
Y2FsYygpXSwgdGhlIHVzZWQgdmFsdWUgcmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0
IGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdlIGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIK
ICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlciwgVmFsdWVSYW5nZUFsbCk7CkBAIC0yNDUsOSArMjYyLDE2IEBAIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCiAjZW5kaWYKICAgICApIHsKICAgICAgICAgcmVzdWx0ID0gc3RkOjptaW4oc3RkOjpt
YXgocmVzdWx0LCBzdGQ6Om5leHRhZnRlcigwLiwgMS4pKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4s
IDAuKSk7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZh
bHVlKHJlc3VsdCwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1i
ZXJSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVWYWx1ZSgqcmVzdWx0LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKQEAgLTI1OSwxNCArMjgzLDE0IEBAIGlubGluZSBib29sIHNob3VsZEFj
Y2VwdFVuaXRsZXNzVmFsdWUoZG91YmxlIHZhbHVlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUsCiAgICAgICAgIHx8IChjc3NQYXJzZXJNb2RlID09IEhUTUxRdWlya3NNb2RlICYmIHVuaXRs
ZXNzID09IFVuaXRsZXNzUXVpcms6OkFsbG93KTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJN
b2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1
bml0bGVzcykKK09wdGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdl
IHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFy
c2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RGltZW5zaW9uVG9rZW4pIHsKICAgICAgICAgc3dpdGNoICh0b2tlbi51bml0VHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1TOgogICAgICAgICAgICAgaWYg
KGNzc1BhcnNlck1vZGUgIT0gVUFTaGVldE1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgICAg
IEZBTExUSFJPVUdIOwogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgogICAgICAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKQEAgLTI4NywyOCArMzExLDM5IEBAIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kCiAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1l
cmljVmFsdWUoKSA8IDApIHx8IHN0ZDo6aXNpbmYodG9rZW4ubnVtZXJpY1ZhbHVlKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNp
bmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
bnVtZXJpY1ZhbHVlKCksIHRva2VuLnVuaXRUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgeyB0b2tlbi51bml0VHlwZSgpLCByYW5nZS5j
b25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKICAgICB9CiAg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgewogICAgICAgICBpZiAoIXNob3Vs
ZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9rZW4ubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUs
IHVuaXRsZXNzKQogICAgICAgICAgICAgfHwgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5l
Z2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChz
dGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBDU1NVbml0VHlwZSB1bml0VHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfUFg7
Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXRUeXBl
KTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsg
Q1NTVW5pdFR5cGU6OkNTU19QWCwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5u
dW1lcmljVmFsdWUoKSB9IH07CiAgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5j
dGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKLSAgICBpZiAoY2FsY1BhcnNlci52YWx1ZSgp
ICYmIGNhbGNQYXJzZXIudmFsdWUoKS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGgpCi0gICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAg
IHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhSYXcoKTsKK30KKworUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Cisg
ICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBj
YWxjUGFyc2VyLnZhbHVlKCktPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAg
fQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFy
c2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQtPnZhbHVlLCByZXN1bHQtPnR5cGUp
OwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC0zMzMsNyArMzY4LDcgQEAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5n
ZSwgVmFsdWVSYW5nZQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdl
LnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKLSAgICAg
ICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmds
ZSwgdmFsdWVSYW5nZSk7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgdmFsdWVSYW5nZSk7CiAgICAgICAgIGlmIChjb25z
dCBDU1NDYWxjVmFsdWUqIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CiAgICAg
ICAgICAgICBpZiAoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudCkKICAgICAgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFs
dWUoKTsKQEAgLTM2MSwyNiArMzk2LDYxIEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFs
dWUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5n
dGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3Nz
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNz
KQorT3B0aW9uYWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUs
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKICAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2Vu
LnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4p
Ci0gICAgICAgIHJldHVybiBjb25zdW1lTGVuZ3RoKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB2YWx1
ZVJhbmdlLCB1bml0bGVzcyk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9r
ZW4pCi0gICAgICAgIHJldHVybiBjb25zdW1lUGVyY2VudChyYW5nZSwgdmFsdWVSYW5nZSk7Cisg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0g
TnVtYmVyVG9rZW4pIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IH0KKyAgICBpZiAodG9rZW4udHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbikgeworICAgICAgICBp
ZiAoYXV0byByZXN1bHQgPSBjb25zdW1lUGVyY2VudFJhdyhyYW5nZSwgdmFsdWVSYW5nZSkpCisg
ICAgICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCB2YWx1ZVJhbmdlKTsKICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9
IGNhbGNQYXJzZXIudmFsdWUoKSkgewotICAgICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShj
YWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3NzUGFyc2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1
cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxj
VmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCksIGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAg
ICAgICBpZiAoY2FsY3VsYXRpb24tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2FsY1BhcnNlci5j
b25zdW1lTGVuZ3RoUmF3KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQg
fTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0
ID0gY2FsY1BhcnNlci5jb25zdW1lUGVyY2VudFJhdyh0cnVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAg
ICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGN1bGF0
aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoY2FuQ29uc3VtZUNh
bGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwg
dW5pdGxlc3MpKSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hPbigqcmVzdWx0LCBbXSAoTGVuZ3Ro
UmF3IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgudHlwZSk7CisgICAgICAgIH0sIFtd
IChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudGFnZSwgQ1NTVW5pdFR5cGU6OkNTU19QRVJD
RU5UQUdFKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1P
cHRpb25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdl
LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitP
cHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3Mp
CiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwogICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pIHsKQEAgLTUwMiwxMSArNTcyLDI1
IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6
OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7Cit9CisKK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworT3B0aW9uYWw8Q1NTVmFs
dWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpCit7CisgICAgaWYgKHJhbmdlLnBlZWso
KS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVlaygpLmlkKCkgPiB1cHBlcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3KHJhbmdlKTsKIH0K
IAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnRSYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKQEAg
LTE4MDMsNiArMTg4NywyMjggQEAgUmVmUHRyPENTU1ZhbHVlPiBjb25zdW1lSW1hZ2UoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRleHQgY29udGUKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NT
MjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJ
ZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTbWFsbENhcHM+KHJhbmdlKTsKK30KKwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxD
U1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xkLCBDU1NWYWx1ZUJvbGRlciwgQ1NTVmFsdWVMaWdo
dGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVGb250V2Vp
Z2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0
dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0
TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3Ry
ZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBy
ZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlVWx0cmFDb25kZW5zZWQsIENTU1ZhbHVlRXh0
cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVuc2VkLCBDU1NWYWx1ZVNlbWlDb25kZW5zZWQsIENT
U1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlFeHBhbmRlZCwgQ1NTVmFsdWVFeHBhbmRlZCwgQ1NT
VmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1ZVVsdHJhRXhwYW5kZWQ+KHJhbmdlKTsKK30KKwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENT
U1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxpYywgQ1NTVmFsdWVPYmxpcXVlPihyYW5nZSk7Cit9
CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZvbnRTdHlsZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIGF1
dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRWYWx1ZVJhdyhyYW5nZSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGlk
ZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWRlbnQg
PT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAgIHJldHVybiB7IHsgaWRlbnQsIFdURjo6bnVsbG9w
dCB9IH07CisgICAgQVNTRVJUKGlkZW50ID09IENTU1ZhbHVlT2JsaXF1ZSk7CisjaWYgRU5BQkxF
KFZBUklBVElPTl9GT05UUykKKyAgICBpZiAoIXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUpKSB7Cisg
ICAgICAgICAgICBhdXRvIGFuZ2xlSW5EZWdyZWVzID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUpOworICAgICAgICAgICAgaWYgKGZv
bnRTdHlsZUlzV2l0aGluUmFuZ2UoYW5nbGVJbkRlZ3JlZXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCBXVEZNb3ZlKGFuZ2xlKSB9IH07CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CisjZW5kaWYKKyAgICByZXR1cm4geyB7IENTU1ZhbHVl
T2JsaXF1ZSwgV1RGOjpudWxsb3B0IH0gfTsKK30KKworU3RyaW5nIGNvbmNhdGVuYXRlRmFtaWx5
TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7CisgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgd2hpbGUgKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICAgICAgYWRkZWRT
cGFjZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmQocmFuZ2UuY29u
c3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsKKyAgICB9CisgICAgaWYgKCFhZGRl
ZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tlbi5pZCgpKSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK09wdGlv
bmFsPFN0cmluZz4gY29uc3VtZUZhbWlseU5hbWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFu
Z2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gU3RyaW5nVG9rZW4pCisgICAg
ICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkudG9T
dHJpbmcoKTsKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSAhPSBJZGVudFRva2VuKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIFN0cmluZyBmYW1pbHlOYW1lID0gY29uY2F0
ZW5hdGVGYW1pbHlOYW1lKHJhbmdlKTsKKyAgICBpZiAoZmFtaWx5TmFtZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZmFtaWx5TmFtZTsKK30KKwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVyaWNGYW1pbHlSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhbmdlUmF3KHJhbmdl
LCBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVdlYmtpdEJvZHkpOworfQorCitPcHRpb25hbDxXVEY6
OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWlseVJhdz4gbGlzdDsK
KyAgICBkbyB7CisgICAgICAgIGlmIChhdXRvIGlkZW50ID0gY29uc3VtZUdlbmVyaWNGYW1pbHlS
YXcocmFuZ2UpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoeyAqaWRlbnQgfSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgaWYgKGF1dG8gc3RyaW5nID0gY29uc3VtZUZhbWlseU5hbWVS
YXcocmFuZ2UpKQorICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKHsgKnN0cmluZyB9KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICB9CisgICAgfSB3aGlsZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5n
ZSkpOworICAgIHJldHVybiBsaXN0OworfQorCitPcHRpb25hbDxGb250U2l6ZVJhdz4gY29uc3Vt
ZUZvbnRTaXplUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNz
c1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgaWYgKHJhbmdlLnBl
ZWsoKS5pZCgpID49IENTU1ZhbHVlWHhTbWFsbCAmJiByYW5nZS5wZWVrKCkuaWQoKSA8PSBDU1NW
YWx1ZUxhcmdlcikgeworICAgICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhy
YW5nZSkpCisgICAgICAgICAgICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lTGVuZ3Ro
T3JQZXJjZW50UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUs
IHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWln
aHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2Vy
TW9kZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsK
KyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgKmlkZW50IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgZG91YmxlIG51bWJlcjsKKyAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5n
ZSwgbnVtYmVyLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpKQorICAgICAgICByZXR1cm4geyBudW1i
ZXIgfTsKKworICAgIGlmIChhdXRvIGxlbmd0aE9yUGVyY2VudCA9IGNvbnN1bWVMZW5ndGhPclBl
cmNlbnRSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisg
ICAgICAgIHJldHVybiB7ICpsZW5ndGhPclBlcmNlbnQgfTsKKworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK09wdGlvbmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29ya2VyU2FmZShDU1NQ
YXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQorewor
ICAgIC8vIExldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluaGVyaXQgb3IgaW5pdGlhbCBzb21l
d2hlcmUgaW4gdGhlIHNob3J0aGFuZC4KKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlQ29w
eSA9IHJhbmdlOworICAgIHdoaWxlICghcmFuZ2VDb3B5LmF0RW5kKCkpIHsKKyAgICAgICAgQ1NT
VmFsdWVJRCBpZCA9IHJhbmdlQ29weS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7
CisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZUluaGVyaXQgfHwgaWQgPT0gQ1NTVmFsdWVJbml0
aWFsKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBGb250
UmF3IHJlc3VsdDsKKworICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBDU1NW
YWx1ZUlEIGlkID0gcmFuZ2UucGVlaygpLmlkKCk7CisgICAgICAgIGlmICghcmVzdWx0LnN0eWxl
KSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC5zdHlsZSA9IGNvbnN1bWVGb250U3R5bGVSYXco
cmFuZ2UsIGNzc1BhcnNlck1vZGUpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXJlc3VsdC52YXJpYW50Q2FwcyAmJiAoaWQgPT0gQ1NTVmFsdWVO
b3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpKSB7CisgICAgICAgICAgICAvLyBGb250
IHZhcmlhbnQgaW4gdGhlIHNob3J0aGFuZCBpcyBwYXJ0aWN1bGFyLCBpdCBvbmx5IGFjY2VwdHMg
bm9ybWFsIG9yIHNtYWxsLWNhcHMuCisgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy1mb250cy8jcHJvcGRlZi1mb250CisgICAgICAgICAgICBpZiAoKHJlc3Vs
dC52YXJpYW50Q2FwcyA9IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KHJhbmdlKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXN1bHQud2Vp
Z2h0KSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC53ZWlnaHQgPSBjb25zdW1lRm9udFdlaWdo
dFJhdyhyYW5nZSkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICghcmVzdWx0LnN0cmV0Y2gpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0cmV0
Y2ggPSBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IC8vIE5vdyBhIGZvbnQgc2l6ZSBfbXVzdF8gY29tZS4KKyAgICBpZiAoYXV0byBzaXplID0gY29u
c3VtZUZvbnRTaXplUmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmVzdWx0LnNp
emUgPSAqc2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBpZiAocmFuZ2UuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IGlmIChjb25zdW1lU2xhc2hJbmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkgeworICAgICAgICBp
ZiAoIShyZXN1bHQubGluZUhlaWdodCA9IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KHJhbmdlLCBjc3NQ
YXJzZXJNb2RlKSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKwor
ICAgIC8vIEZvbnQgZmFtaWx5IG11c3QgY29tZSBub3cuCisgICAgaWYgKGF1dG8gZmFtaWx5ID0g
Y29uc3VtZUZvbnRGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICByZXN1bHQuZmFtaWx5ID0gKmZh
bWlseTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAo
IXJhbmdlLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitBdG9tU3RyaW5nIGdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVlSUQo
Q1NTVmFsdWVJRCBpZGVudCkKK3sKKyAgICBzd2l0Y2ggKGlkZW50KSB7CisgICAgY2FzZSBDU1NW
YWx1ZVNlcmlmOgorICAgICAgICByZXR1cm4gc2VyaWZGYW1pbHk7CisgICAgY2FzZSBDU1NWYWx1
ZVNhbnNTZXJpZjoKKyAgICAgICAgcmV0dXJuIHNhbnNTZXJpZkZhbWlseTsKKyAgICBjYXNlIENT
U1ZhbHVlQ3Vyc2l2ZToKKyAgICAgICAgcmV0dXJuIGN1cnNpdmVGYW1pbHk7CisgICAgY2FzZSBD
U1NWYWx1ZUZhbnRhc3k6CisgICAgICAgIHJldHVybiBmYW50YXN5RmFtaWx5OworICAgIGNhc2Ug
Q1NTVmFsdWVNb25vc3BhY2U6CisgICAgICAgIHJldHVybiBtb25vc3BhY2VGYW1pbHk7CisgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdFBpY3RvZ3JhcGg6CisgICAgICAgIHJldHVybiBwaWN0b2dyYXBo
RmFtaWx5OworICAgIGNhc2UgQ1NTVmFsdWVTeXN0ZW1VaToKKyAgICAgICAgcmV0dXJuIHN5c3Rl
bVVpRmFtaWx5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXJIZWxwZXJzLmgKaW5kZXggYTg3YmQyMGFhMmE1MjM2MTRiZDM4M2JjMDgzNTc0NDg0
ZmE0MDZiYi4uMWRmNGU1NDM4N2E1MDI4YTRlMTMwYTVhMjljYzlkNGE2ODVjYTAyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVk
ZSAiTGVuZ3RoLmgiIC8vIEZvciBWYWx1ZVJhbmdlCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDI4ICs1Nyw0MSBAQCBDU1NQYXJzZXJUb2tlblJh
bmdlIGNvbnN1bWVGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBlbnVtIGNsYXNzIFVu
aXRsZXNzUXVpcmsgeyBBbGxvdywgRm9yYmlkIH07CiBlbnVtIGNsYXNzIEFsbG93WFJlc29sdXRp
b25Vbml0IHsgQWxsb3csIEZvcmJpZCB9OwogCi1zdHJ1Y3QgQW5nbGUgeworc3RydWN0IEFuZ2xl
UmF3IHsKICAgICBDU1NVbml0VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1ZTsKIH07CiAKK3N0
cnVjdCBMZW5ndGhSYXcgeworICAgIENTU1VuaXRUeXBlIHR5cGU7CisgICAgZG91YmxlIHZhbHVl
OworfTsKKwordXNpbmcgTGVuZ3RoT3JQZXJjZW50UmF3ID0gV1RGOjpWYXJpYW50PExlbmd0aFJh
dywgZG91YmxlPjsKKwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46Om1heCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVBvc2l0aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJik7Ci1ib29sIGNvbnN1bWVOdW1i
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0KTsKK2Jvb2wgY29uc3Vt
ZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1bHQsIFZhbHVlUmFu
Z2UgPSBWYWx1ZVJhbmdlQWxsKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51
bWJlcihDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYpOworT3B0aW9uYWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0g
VW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxkb3VibGU+
IGNvbnN1bWVQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFs
dWVSYW5nZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlKTsKK09wdGlvbmFsPExlbmd0aE9yUGVyY2Vu
dFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NT
UGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZv
cmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNz
UXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwotT3B0aW9uYWw8QW5nbGU+IGNvbnN1bWVB
bmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWly
ayk7CitPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlk
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0
bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVz
b2x1dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQWxsb3dYUmVzb2x1dGlvblVuaXQgPSBBbGxv
d1hSZXNvbHV0aW9uVW5pdDo6Rm9yYmlkKTsKIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVl
SUQ+IGNvbnN1bWVJZGVudFJhbmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlE
IGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVyKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUlkZW50UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENT
U1ZhbHVlSUQgdXBwZXIpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFsdWVJRC4uLj4gaW5s
aW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQgaWQpOwordGVtcGxhdGU8Q1NTVmFsdWVJ
RC4uLiBhbGxvd2VkSWRlbnRzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXco
Q1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBhbGxvd2VkSWRl
bnRzPiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJik7CiAKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUN1c3RvbUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKQEAgLTExNSw2ICsxMzAsNDAgQEAgZW51bSBjbGFzcyBB
bGxvd2VkRmlsdGVyRnVuY3Rpb25zIHsKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFsbG93ZWRGaWx0
ZXJGdW5jdGlvbnMpOwogUmVmUHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZG93
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJv
b2wgYWxsb3dTcHJlYWQpOwogCitzdHJ1Y3QgRm9udFN0eWxlUmF3IHsKKyAgICBDU1NWYWx1ZUlE
IHN0eWxlOworICAgIE9wdGlvbmFsPEFuZ2xlUmF3PiBhbmdsZTsKK307Cit1c2luZyBGb250V2Vp
Z2h0UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRvdWJsZT47Cit1c2luZyBGb250U2l6
ZVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
Okxlbmd0aE9yUGVyY2VudFJhdz47Cit1c2luZyBMaW5lSGVpZ2h0UmF3ID0gV1RGOjpWYXJpYW50
PENTU1ZhbHVlSUQsIGRvdWJsZSwgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBl
cmNlbnRSYXc+OwordXNpbmcgRm9udEZhbWlseVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlE
LCBTdHJpbmc+OworCitzdHJ1Y3QgRm9udFJhdyB7CisgICAgT3B0aW9uYWw8Rm9udFN0eWxlUmF3
PiBzdHlsZTsKKyAgICBPcHRpb25hbDxDU1NWYWx1ZUlEPiB2YXJpYW50Q2FwczsKKyAgICBPcHRp
b25hbDxGb250V2VpZ2h0UmF3PiB3ZWlnaHQ7CisgICAgT3B0aW9uYWw8Q1NTVmFsdWVJRD4gc3Ry
ZXRjaDsKKyAgICBGb250U2l6ZVJhdyBzaXplOworICAgIE9wdGlvbmFsPExpbmVIZWlnaHRSYXc+
IGxpbmVIZWlnaHQ7CisgICAgV1RGOjpWZWN0b3I8Rm9udEZhbWlseVJhdz4gZmFtaWx5OworfTsK
KworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWlnaHRL
ZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFdlaWdo
dFJhdz4gY29uc3VtZUZvbnRXZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9u
YWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3R5bGVLZXl3
b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFN0eWxlUmF3
PiBjb25zdW1lRm9udFN0eWxlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
KTsKK1N0cmluZyBjb25jYXRlbmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwor
T3B0aW9uYWw8U3RyaW5nPiBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
Jik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29u
c3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFNp
emVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CitPcHRpb25hbDxM
aW5lSGVpZ2h0UmF3PiBjb25zdW1lTGluZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSk7CitPcHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUpOworQXRvbVN0cmluZyBnZW5lcmlj
Rm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQpOworCiAvLyBUZW1wbGF0ZSBpbXBsZW1l
bnRhdGlvbnMgYXJlIGF0IHRoZSBib3R0b20gb2YgdGhlIGZpbGUgZm9yIHJlYWRhYmlsaXR5Lgog
CiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBlbXB0eUJhc2VDYXNlPiBpbmxpbmUgYm9vbCBpZGVudE1h
dGNoZXMoQ1NTVmFsdWVJRCkgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEyMyw2ICsxNzIsMTMgQEAg
dGVtcGxhdGU8Q1NTVmFsdWVJRCBoZWFkLCBDU1NWYWx1ZUlELi4uIHRhaWw+IGlubGluZSBib29s
IGlkZW50TWF0Y2hlcyhDU1NWYWx1ZUkKICAgICByZXR1cm4gaWQgPT0gaGVhZCB8fCBpZGVudE1h
dGNoZXM8dGFpbC4uLj4oaWQpOwogfQogCit0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIG5hbWVzPiBP
cHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYg
cmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAh
aWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQoKSkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCkuaWQoKTsKK30KKwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBuYW1lcz4gUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Up
CiB7CiAgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRN
YXRjaGVzPG5hbWVzLi4uPihyYW5nZS5wZWVrKCkuaWQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA4
OTE4MDI3OWFmMmI3Zjc2NTZiY2RkZjhlZWMwODMzM2I2NWM2MTQ4Li41M2Q1ZWMwNjQ4YmEwZGUz
YjZlMjQyNjYxOGI2M2ZlNjk2OWE0ZDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM2LDE2ICszNiwy
MSBAQAogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBh
cnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGF0
aDJELmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlci5oIgorI2luY2x1ZGUgIlN0eWxl
Rm9udFNpemVGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVGb3JGb250UmF3LmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CkBAIC0xMzQsMTYgKzEzOSwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51
bnBhcnNlZEZvbnQgJiYgc3RhdGUoKS5mb250LnJlYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gcGFyc2VkU3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUo
KTsKLSAgICBDU1NQYXJzZXI6OnBhcnNlVmFsdWUocGFyc2VkU3R5bGUsIENTU1Byb3BlcnR5Rm9u
dCwgbmV3Rm9udCwgdHJ1ZSwgc3RyaWN0VG9DU1NQYXJzZXJNb2RlKCFtX3VzZXNDU1NDb21wYXRp
YmlsaXR5UGFyc2VNb2RlKSk7Ci0gICAgaWYgKHBhcnNlZFN0eWxlLT5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFN0cmluZyBmb250VmFsdWUgPSBwYXJzZWRTdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnQpOwotCiAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6
Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3B1YmxpYy1odG1sLzIwMDlKdWwvMDk0Ny5o
dG1sLAotICAgIC8vIHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBp
Z25vcmVkLgotICAgIGlmIChmb250VmFsdWUgPT0gImluaGVyaXQiIHx8IGZvbnRWYWx1ZSA9PSAi
aW5pdGlhbCIpCisgICAgLy8gdGhlICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0
IGJlIGlnbm9yZWQuIHBhcnNlRm9udFdvcmtlclNhZmUoKSBpZ25vcmVzIHRoZXNlLgorICAgIGF1
dG8gZm9udFJhdyA9IENTU1BhcnNlcjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJp
Y3RUb0NTU1BhcnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAg
ICBpZiAoIWZvbnRSYXcpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBwYXJzZSBzdWNj
ZWVkZWQuCkBAIC0xNTMsMzggKzE1MiwyMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAKICAgICAvLyBNYXAgdGhlIDxjYW52
YXM+IGZvbnQgaW50byB0aGUgdGV4dCBzdHlsZS4gSWYgdGhlIGZvbnQgdXNlcyBrZXl3b3JkcyBs
aWtlIGxhcmdlci9zbWFsbGVyLCB0aGVzZSB3aWxsIHdvcmsKICAgICAvLyByZWxhdGl2ZSB0byB0
aGUgY2FudmFzLgotICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7
Ci0KICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS5kb2N1bWVudCgpOwogICAgIGRv
Y3VtZW50LnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAorICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uOwogICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gY2FudmFz
KCkuY29tcHV0ZWRTdHlsZSgpKQotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24o
KSB9KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7
IGNvbXB1dGVkU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpIH07CiAgICAgZWxzZSB7Ci0gICAgICAg
IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAg
ZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOwot
ICAgICAgICBkZWZhdWx0Rm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZv
bnRTaXplKTsKLSAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
RGVmYXVsdEZvbnRTaXplKTsKLQotICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZGVmYXVsdEZvbnREZXNjcmlwdGlvbikpOworICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKKyAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKKyAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldENvbXB1dGVkU2l6ZShEZWZhdWx0Rm9udFNpemUpOwogICAgIH0KIAotICAgIG5l
d1N0eWxlLT5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwot
Ci0gICAgLy8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5
bGUuCi0KLSAgICBTdHlsZTo6TWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgYXV0byBwYXJl
bnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgqbmV3U3R5bGUpOwotICAgIFN0eWxlOjpCdWls
ZGVyIHN0eWxlQnVpbGRlcigqbmV3U3R5bGUsIHsgZG9jdW1lbnQsIHBhcmVudFN0eWxlIH0sIG1h
dGNoUmVzdWx0LCB7IH0pOwotCi0gICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkpOwotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0eWxlKS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVyLmFw
cGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsK
LSAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0
KS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZv
bnRTaXplKS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwotCi0gICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5p
bml0aWFsaXplKGRvY3VtZW50LmZvbnRTZWxlY3RvcigpLCAqbmV3U3R5bGUpOworICAgIGlmIChh
dXRvIGZvbnRTdHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9yRm9udFJhdygqZm9udFJhdywgV1RGTW92
ZShmb250RGVzY3JpcHRpb24pLCBkb2N1bWVudCkpCisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgp
LmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKmZvbnRTdHlsZSk7CiB9
CiAKIHN0YXRpYyBDYW52YXNUZXh0QWxpZ24gdG9DYW52YXNUZXh0QWxpZ24oVGV4dEFsaWduIHRl
eHRBbGlnbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1
c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXgg
YjYzZDVmZGY5YzE1ZTJiM2Q2NjBkZmI4MDIwNzc3ZTUxNzgxZTIzYi4uN2Y0Y2U0MGYzZTJmYjY3
MTBiODI3MDVhMTViMjU4YjdkY2EzMzU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVC
dWlsZGVyQ3VzdG9tLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NGb250VmFsdWUu
aCIKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTR3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgog
I2luY2x1ZGUgIkNTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1No
YWRvd1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ291bnRlci5oIgpAQCAtOTg4LDQwICs5ODksMTEgQEAg
aW5saW5lIHZvaWQgQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIENTU1YKICAgICAgICAgICAgIC8vIElmIHRoZSBmYW1pbHkgbmFt
ZSB3YXMgcmVzb2x2ZWQgYnkgdGhlIENTUyBwYXJzZXIgZnJvbSBhIHN5c3RlbSBmb250IElELCB0
aGVuIGl0IGlzIGdlbmVyaWMuCiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBmb250RmFt
aWx5LmZyb21TeXN0ZW1Gb250SUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRCb2R5OgorICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVXZWJraXRCb2R5KQogICAgICAgICAgICAgICAgIGZhbWlseSA9IGJ1aWxkZXJTdGF0ZS5k
b2N1bWVudCgpLnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAg
ICAgZmFtaWx5ID0gc2VyaWZGYW1pbHk7CisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkg
PSBzYW5zU2VyaWZGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJz
aXZlOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IGN1cnNpdmVGYW1pbHk7Ci0gICAgICAgICAg
ICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGYW50YXN5OgotICAgICAgICAgICAgICAgIGZhbWlseSA9
IGZhbnRhc3lGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3Bh
Y2U6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAg
ICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAgICAgICAgICAgICAg
ICBmYW1pbHkgPSBwaWN0b2dyYXBoRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0Zh
bWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1ZhbHVlU3lzdGVtVWk6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc3lzdGVtVWlGYW1pbHk7
Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgZmFtaWx5ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmlj
Rm9udEZhbWlseUZyb21WYWx1ZUlEKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZl
Rm9yRm9udFJhdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjIwMjYxMWZkN2RhZGViNWJlMTcxNTVkYWQyZjMz
MDA2ZTUwNWVlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZUZvckZvbnRSYXcuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCIKKworI2luY2x1
ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6
ZUZ1bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTdHlsZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM7CisKK09wdGlvbmFs
PFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb250UmF3JiBmb250UmF3LCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiYgZm9udERlc2NyaXB0aW9uLCBEb2N1bWVudCYgZG9jdW1l
bnQpCit7CisgICAgYXV0byBmb250U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisKKyAg
ICBhdXRvIGdldFBhcmVudFN0eWxlID0gWyZdICgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4geworICAgICAgICBhdXRvIHBhcmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRy
KGZvbnRTdHlsZSk7CisgICAgICAgIHBhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oRm9u
dENhc2NhZGVEZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pKTsKKyAgICAgICAgcGFyZW50U3R5
bGUtPmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisgICAg
ICAgIHJldHVybiBwYXJlbnRTdHlsZTsKKyAgICB9OworCisgICAgLy8gTWFwIHRoZSBmb250IHBy
b3BlcnR5IGxvbmdoYW5kcyBpbnRvIHRoZSBzdHlsZS4KKyAgICBmbG9hdCBwYXJlbnRTaXplID0g
Zm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKKworICAgIC8vIEZvbnQgZmFtaWx5IGFw
cGxpZWQgaW4gdGhlIHNhbWUgd2F5IGFzIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZv
bnRGYW1pbHkKKyAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9w
ZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KKyAgICBib29sIG9sZEZh
bWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVs
dFNpemUoKTsKKworICAgIFZlY3RvcjxBdG9tU3RyaW5nPiBmYW1pbGllczsKKyAgICBmYW1pbGll
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZvbnRSYXcuZmFtaWx5LnNpemUoKSk7CisKKyAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBmb250UmF3LmZhbWlseSkgeworICAgICAgICBBdG9tU3RyaW5nIGZh
bWlseTsKKyAgICAgICAgYm9vbCBpc0dlbmVyaWNGYW1pbHkgPSBmYWxzZTsKKyAgICAgICAgc3dp
dGNoT24oaXRlbSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBpc0dlbmVy
aWNGYW1pbHkgPSBpZGVudCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7CisgICAgICAgICAgICBmYW1p
bHkgPSBpc0dlbmVyaWNGYW1pbHkgPyBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNG
b250RmFtaWx5RnJvbVZhbHVlSUQoaWRlbnQpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5z
ZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0
cmluZyYgZmFtaWx5U3RyaW5nKSB7CisgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlTdHJpbmc7
CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KCFpc0dlbmVyaWNGYW1pbHkpOwor
ICAgICAgICBmYW1pbGllcy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5KTsKKyAgICB9CisKKyAgICBp
ZiAoZmFtaWxpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhmYW1pbGllcyk7CisKKyAgICBpZiAoZm9udERl
c2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSkgeworICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IGZvbnRE
ZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICBhdXRv
IHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFt
aWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRT
aXplKHNpemUsIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmYWxzZSwgJmZvbnRT
dHlsZSwgZG9jdW1lbnQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvbnQgc3R5bGUg
YXBwbGllZCBpbiB0aGUgc2FtZSB3YXkgYXMgQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHlsZUZyb21WYWx1ZQorICAgIGlmIChmb250UmF3LnN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAo
Zm9udFJhdy5zdHlsZS0+c3R5bGUpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKGl0YWxpY1ZhbHVlKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU9ibGlxdWU6IHsKKyAgICAgICAgICAg
IGZsb2F0IGRlZ3JlZXM7CisgICAgICAgICAgICBpZiAoZm9udFJhdy5zdHlsZS0+YW5nbGUpCisg
ICAgICAgICAgICAgICAgZGVncmVlcyA9IHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZURlZ3JlZXMoZm9udFJhdy5zdHlsZS0+YW5nbGUtPnR5cGUsIGZvbnRSYXcu
c3R5bGUtPmFuZ2xlLT52YWx1ZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGRlZ3JlZXMgPSAwOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250
U2VsZWN0aW9uVmFsdWUoZGVncmVlcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb250RGVzY3JpcHRpb24u
c2V0Rm9udFN0eWxlQXhpcygoZm9udFJhdy5zdHlsZSAmJiBmb250UmF3LnN0eWxlLT5zdHlsZSA9
PSBDU1NWYWx1ZUl0YWxpYykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6
c2xudCk7CisKKyAgICBpZiAoZm9udFJhdy52YXJpYW50Q2FwcykgeworICAgICAgICBzd2l0Y2gg
KCpmb250UmF3LnZhcmlhbnRDYXBzKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBz
OjpOb3JtYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFs
bENhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZh
cmlhbnRDYXBzOjpTbWFsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUFsbFNtYWxsQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50
Q2FwcyhGb250VmFyaWFudENhcHM6OkFsbFNtYWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6
VW5pY2FzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRpdGxp
bmdDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRW
YXJpYW50Q2Fwczo6VGl0bGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZm9udFJhdy53ZWlnaHQpIHsKKyAgICAgICAg
YXV0byB3ZWlnaHQgPSBzd2l0Y2hPbigqZm9udFJhdy53ZWlnaHQsIFsmXSAoQ1NTVmFsdWVJRCBp
ZGVudCkgeworICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZU5vcm1hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsV2VpZ2h0VmFsdWUo
KTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb2xkOgorICAgICAgICAgICAgICAgIHJldHVy
biBib2xkV2VpZ2h0VmFsdWUoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb2xkZXI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdo
dChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxp
Z2h0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246Omxp
Z2h0ZXJXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vcm1hbFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
IFsmXSAoZG91YmxlIHdlaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25W
YWx1ZTo6Y2xhbXBGbG9hdCh3ZWlnaHQpOworICAgICAgICB9KTsKKyAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFdlaWdodCh3ZWlnaHQpOworICAgIH0KKworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlSW52YWxpZCk7CisgICAgZmxvYXQg
c2l6ZSA9IHN3aXRjaE9uKGZvbnRSYXcuc2l6ZSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7Cisg
ICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVYU21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lZGl1bToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdl
OgorICAgICAgICBjYXNlIENTU1ZhbHVlWExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlWHhM
YXJnZToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQpOworICAg
ICAgICAgICAgcmV0dXJuIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIGRvY3VtZW50KTsKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZUxhcmdlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4yZjsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsZXI6CisgICAgICAgICAgICByZXR1cm4gcGFyZW50U2l6
ZSAvIDEuMmY7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMC5mOworICAg
ICAgICB9CisgICAgfSwgWyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0
aE9yUGVyY2VudFJhdyYgbGVuZ3RoT3JQZXJjZW50KSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hP
bihsZW5ndGhPclBlcmNlbnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpM
ZW5ndGhSYXcmIGxlbmd0aCkgeworICAgICAgICAgICAgYXV0byBwYXJlbnRTdHlsZSA9IGdldFBh
cmVudFN0eWxlKCk7CisgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhIHsgcGFyZW50U3R5bGUuZ2V0KCksIG51bGxwdHIsIHBhcmVudFN0eWxlLmdldCgp
LCBkb2N1bWVudC5yZW5kZXJWaWV3KCksIDEuMGYsIENTU1Byb3BlcnR5Rm9udFNpemUgfTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKGNvbnZlcnNpb25EYXRhLCBsZW5ndGgudHlwZSwgbGVu
Z3RoLnZhbHVlKSk7CisgICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAg
ICAgICAgIHJldHVybiAocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2UpIC8gMTAwLmY7CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgaWYgKHNpemUgPiAwKSB7CisgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKHNpemUpOworICAgIH0KKworICAgIGlmIChmb250UmF3LmxpbmVIZWlnaHQp
IHsKKyAgICAgICAgT3B0aW9uYWw8TGVuZ3RoPiBsaW5lSGVpZ2h0ID0gc3dpdGNoT24oKmZvbnRS
YXcubGluZUhlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBpZiAo
aWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFs
PExlbmd0aD4oUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oV1RGOjpudWxsb3B0KTsKKyAgICAgICAgfSwgWyZdIChk
b3VibGUgbnVtYmVyKSB7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5n
dGgobnVtYmVyICogMTAwLjAsIFBlcmNlbnQpKTsKKyAgICAgICAgfSwgWyZdIChjb25zdCBDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYgbGVuZ3RoT3JQZXJjZW50
KSB7CisgICAgICAgICAgICByZXR1cm4gc3dpdGNoT24obGVuZ3RoT3JQZXJjZW50LCBbJl0gKGNv
bnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoUmF3JiBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHBhcmVudFN0eWxlID0gZ2V0UGFyZW50U3R5bGUoKTsKKyAgICAgICAg
ICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhIHsgcGFyZW50
U3R5bGUuZ2V0KCksIG51bGxwdHIsIHBhcmVudFN0eWxlLmdldCgpLCBkb2N1bWVudC5yZW5kZXJW
aWV3KCksIDEuMGYsIENTU1Byb3BlcnR5TGluZUhlaWdodCB9OworICAgICAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxMZW5ndGg+KExlbmd0aChjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhEb3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0aC50
eXBlLCBsZW5ndGgudmFsdWUpLCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NM
ZW5ndGgpLCBGaXhlZCkpOworICAgICAgICAgICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxMZW5ndGg+KExlbmd0aCgoZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogc3RhdGljX2Nhc3Q8aW50PihwZXJjZW50YWdlKSkg
LyAxMDAsIEZpeGVkKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
aWYgKGxpbmVIZWlnaHQpCisgICAgICAgICAgICBmb250U3R5bGUuc2V0TGluZUhlaWdodChXVEZN
b3ZlKGxpbmVIZWlnaHQudmFsdWUoKSkpOworICAgIH0KKworICAgIGZvbnRTdHlsZS5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBmb250U3R5bGUuZm9u
dENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKworICAgIHJldHVy
biBmb250U3R5bGU7Cit9CisKK30KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVz
b2x2ZUZvckZvbnRSYXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYjEwYTUwMzVkMmQ5NjNmZWE4ZWViNjY0YmRh
OWJiNjg5NTJjNjUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRm9udFJhdy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBSZW5kZXJTdHlsZTsKKworbmFtZXNwYWNlIENTU1Byb3Bl
cnR5UGFyc2VySGVscGVycyB7CitzdHJ1Y3QgRm9udFJhdzsKK30KKworbmFtZXNwYWNlIFN0eWxl
IHsKKworT3B0aW9uYWw8UmVuZGVyU3R5bGU+IHJlc29sdmVGb3JGb250UmF3KGNvbnN0IENTU1By
b3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJhdyYsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiwg
RG9jdW1lbnQmKTsKKworfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411444</attachid>
            <date>2020-10-15 08:20:20 -0700</date>
            <delta_ts>2020-11-18 05:00:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20201015162019.patch</filename>
            <type>text/plain</type>
            <size>63063</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4Mzg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI2ZGMyNTExMWFmYjdh
ZTlhNDI0MDFmYTU4MTg1NjFkYzMyOTI1MS4uNjU2MWVkYjRjODcxNzIxNjM5Njc0OWU2YWZjOTUz
Y2U2NDIxN2M3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTEwLTE1ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIENTUyBmb250IHNob3J0
aGFuZHMgcGFyc2FibGUgd2l0aGluIGEgd29ya2VyIChpLmUuIHdpdGhvdXQgQ1NTVmFsdWVQb29s
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkIGZ1bmN0
aW9ucyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhcnNlIENTUyBmb250IHNob3J0aGFuZAorICAg
ICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgdXNpbmcgQ1NTIHZhbHVlcywgc28gaXQgY2FuIGJlIGRv
bmUgc2FmZWx5IG9mZiBvZgorICAgICAgICB0aGUgbWFpbiB0aHJlYWQuIFRvIHN1cHBvcnQgYW5k
IHRlc3QgdGhpcywgYWxzbyBhZGQgZnVuY3Rpb25zIHRvIG1ha2UKKyAgICAgICAgaXQgcG9zc2li
bGUgdG8gcmVzb2x2ZSB0aG9zZSBwcm9wZXJ0aWVzIGludG8gYSBzdHlsZSB3aXRob3V0CisgICAg
ICAgIFN0eWxlQnVpbGRlciBhbmQgdXNlIHRoYXQgd2l0aGluIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKToKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRXZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZh
bWlseU5hbWUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoKKyAg
ICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVQ
ZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
TGVuZ3RoUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRS
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lSWRlbnRSYW5nZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9u
dFdlaWdodFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9u
dFN0eWxlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uY2F0ZW5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUZhbWlseU5hbWVSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250RmFtaWx5UmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZv
bnRTaXplUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxpbmVIZWlnaHRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRm9udFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlEKToKKyAg
ICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRSYXcpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAq
IHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KToKKyAgICAgICAgKiBzdHlsZS9TdHls
ZVJlc29sdmVGb3JGb250UmF3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
cmVzb2x2ZUZvckZvbnRSYXcpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuaDogQWRkZWQuCisKIDIwMjAtMTAtMTMgIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBDb2NvYTogTWFrZSBXZWJHTExheWVyIG5vdCBkZXBlbmRlbnQg
b24gIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk2NWFkYzEzMGYx
ZGY0MzY1YjA4Mjk5ZDI2NmQ2OGY5ZmNmODFiMWQuLjg5MWRiM2Q4YWViNWRhYTIyZDg1MTdhYmQ0
YWU4YmQ1NGEzNGU2ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMzg4LDYgKzIzODgsNyBAQCBzdHls
ZS9TdHlsZUludmFsaWRhdG9yLmNwcAogc3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmNwcAog
c3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwCiBzdHlsZS9TdHlsZVJlc29sdmVGb3JEb2N1bWVudC5j
cHAKK3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwCiBzdHlsZS9TdHlsZVJlc29sdmVy
LmNwcAogc3R5bGUvU3R5bGVTY29wZS5jcHAKIHN0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlOWVhOTk4ZDU3NjcxODAyN2VkYjgzOGNhZDVjMjNiNTMyNDc2NmNhLi5iZjEwMTU1ZWE4
MzNhYjM2ZGJkM2FmN2UzMjE3YzZjNzBkZmI0MjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MDg1LDYgKzUwODUsNyBAQAog
CQlFNEQzM0Y0NDI1MkM1MEUyMDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3JMZWdhY3lQYXRoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEQzM0Y0MzI1MkM1MEUyMDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRl
cmF0b3JMZWdhY3lQYXRoLmggKi87IH07CiAJCUU0RDMzRjQ2MjUyQzUwRkMwMDgzN0QwNSAvKiBM
YXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDMzRjQ1MjUyQzUwRkIwMDgzN0QwNSAv
KiBMYXlvdXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaCAqLzsgfTsKIAkJRTRE
NThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCMzE3QjREQkRD
MDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLzsgfTsKKwkJRTRENjhFQjUx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDY4RUIzMTdCNERCREMwMENCRENB
OCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmggKi87IH07CiAJCUU0RDU4RUI5MTdCNEVEODkw
MENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5
bGVGb250U2l6ZUZ1bmN0aW9ucy5oICovOyB9OwogCQlFNEQ1OEVCQjE3QjhGMTI4MDBDQkRDQTgg
LyogRWxlbWVudFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRENThFQkExN0I4RjEyODAwQ0JEQ0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQ5
ODhCNDE3QkZEMUY2MDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDk4OEIzMTdCRkQxRjYwMDg0RkI4
OCAvKiBUZXh0Tm9kZVRyYXZlcnNhbC5oICovOyB9OwpAQCAtMTYwODIsNiArMTYwODMsOCBAQAog
CQlFNEQzM0Y0NTI1MkM1MEZCMDA4MzdEMDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0
b3JNb2Rlcm5QYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dElu
dGVncmF0aW9uTGluZUl0ZXJhdG9yTW9kZXJuUGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZXNvbHZl
Rm9yRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEQ1OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENjhFQjIxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVz
b2x2ZUZvckZvbnRSYXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0RDY4RUIzMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8q
IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUU0RDU4RUI3MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5j
dGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThFQkExN0I4RjEyODAw
Q0JEQ0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRWxlbWVudFRyYXZlcnNhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Mjg0OTQsNiArMjg0OTcsOCBAQAogCQkJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHls
ZVJlbGF0aW9ucy5oICovLAogCQkJCUU0RDU4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJl
c29sdmVGb3JEb2N1bWVudC5jcHAgKi8sCiAJCQkJRTRENThFQjMxN0I0REJEQzAwQ0JEQ0E4IC8q
IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8sCisJCQkJRTRENjhFQjIxN0I0REJEQzAwQ0JE
Q0E4IC8qIFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwICovLAorCQkJCUU0RDY4RUIzMTdCNERC
REMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmggKi8sCiAJCQkJRTEzOTg2NjEx
NTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuY3BwICovLAogCQkJCUUxMzk4NjYyMTU0
Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggKi8sCiAJCQkJRTQ2MUQ2NUMxQkIwQzdG
MDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuY3BwICovLApAQCAtMzQwODksNiArMzQwOTQsNyBAQAog
CQkJCUJDMjI3Mjg3MEU4MkU3MDcwMEU3Rjk3NSAvKiBTdHlsZVJlZmxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0NjE4MDJEMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTRENThFQjUxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ2OEVCNTE3QjREQkRDMDBD
QkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEz
OTg2NjQxNTQ3ODQ3NDAwMUUzRjY1IC8qIFN0eWxlUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0QkJFRDREMTRGQ0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0OTQ2RUFGMTU2RTY0REQwMEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCmluZGV4IDZj
NjJkNGIyZTM5N2VhZTZlOGEzYmE2MDcwNGE2YTI0MmVhN2VkYWYuLmYyYWQxMmMwOWZmNGQ2ZmE1
MDc3NWUyZjk4MjA0YWNmYTlmOTFiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKQEAgLTEzOCw2ICsxMzgsMTUgQEAgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IENT
U1BhcnNlcjo6cGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3IHN0cmluZykKICAgICByZXR1cm4gQ1NT
UGFyc2VyRmFzdFBhdGhzOjpwYXJzZUhleENvbG9yKHN0cmluZyk7CiB9CiAKK09wdGlvbmFsPENT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Rm9udFJhdz4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRXb3Jr
ZXJTYWZlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUp
Cit7CisgICAgQ1NTVG9rZW5pemVyIHRva2VuaXplcihzdHJpbmcpOworICAgIENTU1BhcnNlclRv
a2VuUmFuZ2UgcmFuZ2UodG9rZW5pemVyLnRva2VuUmFuZ2UoKSk7CisgICAgcmFuZ2UuY29uc3Vt
ZVdoaXRlc3BhY2UoKTsKKworICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNv
bnN1bWVGb250V29ya2VyU2FmZShyYW5nZSwgY3NzUGFyc2VyTW9kZSk7Cit9CisKIFJlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVNpbmdsZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRl
eHQpCiB7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuaAppbmRleCA5ZTAxMDRhZjk2ZDk1M2I0MDc3ZjMyYjFhNzc5MWZjYTNkMGQyOTBi
Li45MjU4OWJmNjk1NzgwYWI3OTc1Mjk4N2E0NDRkYmE3OTkyMDVjN2ViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTQzLDYgKzQzLDEwIEBAIGNsYXNzIFN0eWxlU2hl
ZXRDb250ZW50czsKIGNsYXNzIFJlbmRlclN0eWxlOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBTUkdCQTsKIAorbmFtZXNwYWNlIENTU1Byb3BlcnR5UGFyc2VySGVscGVycyB7CitzdHJ1Y3Qg
Rm9udFJhdzsKK30KKwogbmFtZXNwYWNlIFN0eWxlIHsKIGNsYXNzIEJ1aWxkZXJTdGF0ZTsKIH0K
QEAgLTkxLDYgKzk1LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1aW50
OF90Pj4gcGFyc2VOYW1lZENvbG9yKFN0cmluZ1ZpZXcpOwogICAgIHN0YXRpYyBPcHRpb25hbDxT
UkdCQTx1aW50OF90Pj4gcGFyc2VIZXhDb2xvcihTdHJpbmdWaWV3KTsKIAorICAgIHN0YXRpYyBP
cHRpb25hbDxDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IHBhcnNlRm9udFdvcmtl
clNhZmUoY29uc3QgU3RyaW5nJiwgQ1NTUGFyc2VyTW9kZSA9IEhUTUxTdGFuZGFyZE1vZGUpOwor
CiBwcml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVy
dGllcyYsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAppbmRl
eCBkYWQxNTEzNWQ1NzIwNDY0MDM4ZDZhNWJlYTNlMzdiZDgxOTM1NmQyLi41ZTE1NzA3MmM0MmFm
MjA4NzE4OTNhZDMwNjI0Mjk0MjczZWFlNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcApAQCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUg
IkNTU1BhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkNTU1BlbmRpbmdTdWJzdGl0dXRpb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RpbWluZ0Z1bmN0aW9u
VmFsdWUuaCIKQEAgLTg3NSwxNiArODc0LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVGb250VmFyaWFudENTUzIxKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhCiAg
ICAgcmV0dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTbWFsbENhcHM+
KHJhbmdlKTsKIH0KIAotc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRXZWlnaHRLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCi17Ci0gICAg
cmV0dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xkLCBDU1NWYWx1
ZUJvbGRlciwgQ1NTVmFsdWVMaWdodGVyPihyYW5nZSk7Ci19Ci0KIHN0YXRpYyBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlKQogewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZh
bHVlKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICByZXR1cm4gY29uc3VtZUZv
bnRXZWlnaHROdW1iZXIocmFuZ2UpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250
V2VpZ2h0UmF3KHJhbmdlKSkgeworICAgICAgICByZXR1cm4gc3dpdGNoT24oKnJlc3VsdCwgW10g
KENTU1ZhbHVlSUQgdmFsdWVJRCkgeworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpOworICAgICAgICB9LCBb
XSAoZG91YmxlIHdlaWdodE51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUod2VpZ2h0TnVtYmVyLCBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUik7CisgICAgICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAog
c3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWlnaHRBYnNvbHV0
ZUtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKQEAgLTkyMSw3ICs5MjAs
OSBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodEFi
c29sdXRlKENTU1BhcnNlclRva2VuUmFuZ2UmCiAKIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKIHsKLSAgICByZXR1cm4gY29uc3VtZUlkZW50PENTU1ZhbHVlVWx0cmFDb25kZW5z
ZWQsIENTU1ZhbHVlRXh0cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVuc2VkLCBDU1NWYWx1ZVNl
bWlDb25kZW5zZWQsIENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlFeHBhbmRlZCwgQ1NTVmFs
dWVFeHBhbmRlZCwgQ1NTVmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1ZVVsdHJhRXhwYW5kZWQ+
KHJhbmdlKTsKKyAgICBpZiAoYXV0byB2YWx1ZUlEID0gY29uc3VtZUZvbnRTdHJldGNoS2V5d29y
ZFZhbHVlUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9u
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKCp2YWx1ZUlEKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC05NzYsMjYgKzk3NywxNiBAQCBz
dGF0aWMgYm9vbCBmb250U3R5bGVJc1dpdGhpblJhbmdlKGZsb2F0IG9ibGlxdWUpCiAKIHN0YXRp
YyBSZWZQdHI8Q1NTRm9udFN0eWxlVmFsdWU+IGNvbnN1bWVGb250U3R5bGUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKLSAgICBhdXRv
IHJlc3VsdCA9IGNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWUocmFuZ2UpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gdmFsdWVJRCA9IHJl
c3VsdC0+dmFsdWVJRCgpOwotICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTm9ybWFsIHx8IHZh
bHVlSUQgPT0gQ1NTVmFsdWVJdGFsaWMpCi0gICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1
ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlSUQpKTsKLSAgICBBU1NFUlQocmVzdWx0LT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVPYmxp
cXVlKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlUmF3KHJhbmdlLCBj
c3NQYXJzZXJNb2RlKSkgewogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgaWYgKCFy
YW5nZS5hdEVuZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIGFuZ2xlID0gY29uc3VtZUFuZ2xlKHJh
bmdlLCBjc3NQYXJzZXJNb2RlKSkgewotICAgICAgICAgICAgaWYgKGZvbnRTdHlsZUlzV2l0aGlu
UmFuZ2UoYW5nbGUtPnZhbHVlPGZsb2F0PihDU1NVbml0VHlwZTo6Q1NTX0RFRykpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksIFdURk1v
dmUoYW5nbGUpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAocmVz
dWx0LT5zdHlsZSA9PSBDU1NWYWx1ZU9ibGlxdWUgJiYgcmVzdWx0LT5hbmdsZSkgeworICAgICAg
ICAgICAgcmV0dXJuIENTU0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVPYmxpcXVlKSwKKyAgICAgICAg
ICAgICAgICBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJlc3VsdC0+YW5n
bGUtPnZhbHVlLCByZXN1bHQtPmFuZ2xlLT50eXBlKSk7CiAgICAgICAgIH0KLSAgICB9Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKICNlbmRpZgotICAgIHJldHVybiBD
U1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSkpOworICAgICAgICByZXR1cm4gQ1NTRm9u
dFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShyZXN1bHQtPnN0eWxlKSk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwog
fQogCiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKQEAgLTEwMjksMzAgKzEwMjAsOSBAQCBz
dGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVJhbmdlVmFsdWU+IGNvbnN1bWVGb250U3R5bGVSYW5n
ZShDU1NQYXJzZXJUb2tlblJhbmdlJgogfQogI2VuZGlmCiAKLXN0YXRpYyBTdHJpbmcgY29uY2F0
ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewotICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKLSAgICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKLSAgICBjb25z
dCBDU1NQYXJzZXJUb2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKLSAgICB3aGlsZSAo
cmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7Ci0gICAgICAgIGlmICghYnVpbGRl
ci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAg
ICAgICBhZGRlZFNwYWNlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLmFwcGVu
ZChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOwotICAgIH0KLSAg
ICBpZiAoIWFkZGVkU3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlkKCkpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
LX0KLQogc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZhbWlseU5hbWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gU3Ry
aW5nVG9rZW4pCi0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0
ZUZvbnRGYW1pbHlWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVl
KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tl
bikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgU3RyaW5nIGZhbWlseU5hbWUgPSBjb25j
YXRlbmF0ZUZhbWlseU5hbWUocmFuZ2UpOworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGNvbnN1bWVG
YW1pbHlOYW1lUmF3KHJhbmdlKTsKICAgICBpZiAoZmFtaWx5TmFtZS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlRm9udEZhbWlseVZhbHVlKGZhbWlseU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCmluZGV4IGI3ZTE5ZmJkNjRhNzhjMGY3ZDU5Yzcx
NDg3ZDc5NjZlN2EwYjA5OWUuLmNmM2Q5YzFiYTliYjdkOWNkZmJlM2ExNTg5MTM4NzEyNDBiMTEz
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgK
QEAgLTIzLDYgKzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ1NTUGFyc2VyVG9r
ZW5SYW5nZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1
ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwCmluZGV4IDY5NThhNjYyNzhjOTU4ZGQxZTYyOTM0ZThkMDkzNWJhNGViZDNiOWMuLjMx
NzBmZTBjYzcwNzIxNTg2MDkyMTdlZmFmNDUwYTNlOTcyMDUyZTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAg
LTEzMCwxMyArMTMwLDE2IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFsPGRvdWJsZT4gY29uc3Vt
ZVBlcmNlbnRSYXcoKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8fCBtX2NhbGNW
YWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50KQorICAgICAg
ICBpZiAoIW1fY2FsY1ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgYXV0byBjYXRlZ29yeSA9IG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpOworICAgICAgICBp
ZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIG1fc291cmNlUmFuZ2UgPSBtX3JhbmdlOwog
ICAgICAgICByZXR1cm4gbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCk7CiAgICAgfQogCi0gICAg
T3B0aW9uYWw8QW5nbGU+IGNvbnN1bWVBbmdsZVJhdygpCisgICAgT3B0aW9uYWw8QW5nbGVSYXc+
IGNvbnN1bWVBbmdsZVJhdygpCiAgICAgewogICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlIHx8IG1f
Y2FsY1ZhbHVlLT5jYXRlZ29yeSgpICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE0NCw2ICsxNDcsMzMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5wcmltaXRpdmVUeXBlKCksIG1fY2Fs
Y1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0gfTsKICAgICB9CiAKKyAgICBPcHRpb25hbDxMZW5ndGhS
YXc+IGNvbnN1bWVMZW5ndGhSYXcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8
fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgp
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBtX3NvdXJjZVJhbmdl
ID0gbV9yYW5nZTsKKyAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CisgICAgfQorCisgICAgT3B0aW9u
YWw8TGVuZ3RoT3JQZXJjZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KCkKKyAgICB7
CisgICAgICAgIGlmICghbV9jYWxjVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgICAgIHN3aXRjaCAobV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkpIHsKKyAgICAg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgICAgICAgICBtX3NvdXJj
ZVJhbmdlID0gbV9yYW5nZTsKKyAgICAgICAgICAgIHJldHVybiB7IExlbmd0aFJhdyh7IG1fY2Fs
Y1ZhbHVlLT5wcmltaXRpdmVUeXBlKCksIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpIH0pIH07
CisgICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICAgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgICAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6CisgICAgICAgICAgICBtX3NvdXJjZVJhbmdl
ID0gbV9yYW5nZTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPmRvdWJsZVZh
bHVlKCkgfSB9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgfQorICAgIH0KKwogcHJpdmF0ZToKICAgICBDU1NQYXJzZXJUb2tlblJh
bmdlJiBtX3NvdXJjZVJhbmdlOwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgbV9yYW5nZTsKQEAg
LTE3NywxMCArMjA3LDEyIEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0
aXZlSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKICAgICByZXR1cm4gY29uc3Vt
ZUludGVnZXIocmFuZ2UsIDEpOwogfQogCi1ib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSYgcmVzdWx0KQorYm9vbCBjb25zdW1lTnVtYmVyUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBl
ZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAgICAgIGlm
ICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFs
dWUoKSA8IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJlc3VsdCA9IHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE4OCw3ICsyMjAsNyBAQCBib29sIGNvbnN1bWVOdW1i
ZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGRvdWJsZSYgcmVzdWx0KQogICAgIGlm
ICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIsIFZhbHVlUmFuZ2VBbGwpOworICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKICAgICByZXR1cm4gY2Fs
Y1BhcnNlci5jb25zdW1lTnVtYmVyUmF3KHJlc3VsdCk7CiB9CiAKQEAgLTE5NiwyMiArMjI4LDE5
IEBAIGJvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91
YmxlJiByZXN1bHQpCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSkKIHsKICAgICBj
b25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2Vu
LnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgewotICAgICAgICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1
ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJp
Y1ZhbHVlKCksIHRva2VuLnVuaXRUeXBlKCkpOwotICAgIH0KLQotICAgIGlmICh0b2tlbi50eXBl
KCkgIT0gRnVuY3Rpb25Ub2tlbikKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEZ1bmN0aW9uVG9r
ZW4pIHsKKyAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIsIHZhbHVlUmFuZ2UpOworICAgICAgICBpZiAoY29uc3QgYXV0byogY2Fs
Y1ZhbHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoY2FsY1ZhbHVl
LT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKLSAgICBpZiAoY29uc3QgQ1NT
Q2FsY1ZhbHVlKiBjYWxjVmFsdWUgPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKLSAgICAgICAgaWYg
KGNhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29u
c3VtZVZhbHVlKCk7CiAgICAgfQogCisgICAgZG91YmxlIG51bWJlcjsKKyAgICBpZiAoY29uc3Vt
ZU51bWJlclJhdyhyYW5nZSwgbnVtYmVyLCB2YWx1ZVJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobnVtYmVyLCB0b2tlbi51bml0VHlw
ZSgpKTsKKwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yMjIsNyArMjUxLDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGRpdmlzaWJsZUJ5MTAwKGRvdWJsZSB2YWx1ZSkKIH0KICNlbmRpZgog
Ci1SZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdlaWdo
dE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKIHsKICAgICAvLyBWYWx1ZXMg
bGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEwMDAg
YXJlIHBhcnNlIGVycm9ycy4KICAgICBhdXRvJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKQEAgLTIz
MCwxMSArMjU5LDE1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWln
aHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAjaWYgIUVOQUJMRShWQVJJQVRJ
T05fRk9OVFMpCiAgICAgICAgICYmIHRva2VuLm51bWVyaWNWYWx1ZVR5cGUoKSA9PSBJbnRlZ2Vy
VmFsdWVUeXBlICYmIGRpdmlzaWJsZUJ5MTAwKHRva2VuLm51bWVyaWNWYWx1ZSgpKQogI2VuZGlm
Ci0gICAgKQotICAgICAgICByZXR1cm4gY29uc3VtZU51bWJlcihyYW5nZSwgVmFsdWVSYW5nZUFs
bCk7CisgICAgKSB7CisgICAgICAgIGRvdWJsZSByZXN1bHQ7CisgICAgICAgIGlmIChjb25zdW1l
TnVtYmVyUmF3KHJhbmdlLCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CiAKICAgICBpZiAodG9rZW4udHlwZSgp
ICE9IEZ1bmN0aW9uVG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gIltGb3IgY2FsYygpXSwgdGhlIHVzZWQgdmFsdWUg
cmVzdWx0aW5nIGZyb20gYW4gZXhwcmVzc2lvbiBtdXN0IGJlIGNsYW1wZWQgdG8gdGhlIHJhbmdl
IGFsbG93ZWQgaW4gdGhlIHRhcmdldCBjb250ZXh0LiIKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgVmFsdWVSYW5nZUFsbCk7CkBA
IC0yNDUsOSArMjc4LDE2IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAjZW5kaWYKICAgICApIHsK
ICAgICAgICAgcmVzdWx0ID0gc3RkOjptaW4oc3RkOjptYXgocmVzdWx0LCBzdGQ6Om5leHRhZnRl
cigwLiwgMS4pKSwgc3RkOjpuZXh0YWZ0ZXIoMTAwMC4sIDAuKSk7Ci0gICAgICAgIHJldHVybiBD
U1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJlc3VsdCwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZv
bnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcocmFuZ2UpKQorICAgICAgICBy
ZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZSgqcmVzdWx0LCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTI1OSwx
NCArMjk5LDE0IEBAIGlubGluZSBib29sIHNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUoZG91Ymxl
IHZhbHVlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsCiAgICAgICAgIHx8IChjc3NQYXJz
ZXJNb2RlID09IEhUTUxRdWlya3NNb2RlICYmIHVuaXRsZXNzID09IFVuaXRsZXNzUXVpcms6OkFs
bG93KTsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVl
UmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0
aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFy
c2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVp
cmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2Uu
cGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pIHsKICAgICAg
ICAgc3dpdGNoICh0b2tlbi51bml0VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19RVUlSS1lfRU1TOgogICAgICAgICAgICAgaWYgKGNzc1BhcnNlck1vZGUgIT0gVUFTaGVl
dE1vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgogICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UkVNUzoKQEAgLTI4NywyOCArMzI3LDM5IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kCiAgICAg
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCh2YWx1ZVJhbmdlID09IFZh
bHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA8IDApIHx8IHN0ZDo6
aXNpbmYodG9rZW4ubnVtZXJpY1ZhbHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJh
bmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHRva2VuLnVu
aXRUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0
dXJuIHsgeyB0b2tlbi51bml0VHlwZSgpLCByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLm51bWVyaWNWYWx1ZSgpIH0gfTsKICAgICB9CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBO
dW1iZXJUb2tlbikgewogICAgICAgICBpZiAoIXNob3VsZEFjY2VwdFVuaXRsZXNzVmFsdWUodG9r
ZW4ubnVtZXJpY1ZhbHVlKCksIGNzc1BhcnNlck1vZGUsIHVuaXRsZXNzKQogICAgICAgICAgICAg
fHwgKHZhbHVlUmFuZ2UgPT0gVmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNW
YWx1ZSgpIDwgMCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmIChzdGQ6OmlzaW5mKHRva2VuLm51bWVyaWNW
YWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBDU1NVbml0VHlw
ZSB1bml0VHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfUFg7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCksIHVuaXRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiB7IHsgQ1NTVW5pdFR5cGU6OkNTU19QWCwgcmFu
Z2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07CiAgICAg
fQogCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIENhbGNQYXJz
ZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJh
bmdlKTsKLSAgICBpZiAoY2FsY1BhcnNlci52YWx1ZSgpICYmIGNhbGNQYXJzZXIudmFsdWUoKS0+
Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCi0gICAgICAgIHJldHVy
biBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1
bWVMZW5ndGhSYXcoKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVu
Z3RoKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1v
ZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAg
ICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgaWYgKHRv
a2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1Bh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKKyAg
ICAgICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVlKCktPmNhdGVn
b3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJu
IGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0
ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5p
dGxlc3MpKQorICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVW
YWx1ZShyZXN1bHQtPnZhbHVlLCByZXN1bHQtPnR5cGUpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CkBAIC0zMzMsNyArMzg0LDcgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
UGVyY2VudChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgVmFsdWVSYW5nZQogewogICAgIGNv
bnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJhbmdlLnBlZWsoKTsKICAgICBpZiAodG9rZW4u
dHlwZSgpID09IEZ1bmN0aW9uVG9rZW4pIHsKLSAgICAgICAgQ2FsY1BhcnNlciBjYWxjUGFyc2Vy
KHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwgdmFsdWVSYW5nZSk7CisgICAgICAg
IENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dCwgdmFsdWVSYW5nZSk7CiAgICAgICAgIGlmIChjb25zdCBDU1NDYWxjVmFsdWUqIGNhbGN1bGF0
aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CiAgICAgICAgICAgICBpZiAoY2FsY3VsYXRpb24t
PmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKQEAgLTM2MSwyNiArNDEyLDU0
IEBAIHN0YXRpYyBib29sIGNhbkNvbnN1bWVDYWxjVmFsdWUoQ2FsY3VsYXRpb25DYXRlZ29yeSBj
YXRlZ29yeSwgQ1NTUGFyc2VyTW9kZSBjc3NQCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2
YWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrIHVuaXRsZXNzKQorT3B0aW9uYWw8TGVuZ3RoT3JQZXJj
ZW50UmF3PiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJh
bmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSwg
VW5pdGxlc3NRdWlyayB1bml0bGVzcykKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9r
ZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tl
biB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pCi0gICAgICAgIHJldHVybiBjb25zdW1l
TGVuZ3RoKHJhbmdlLCBjc3NQYXJzZXJNb2RlLCB2YWx1ZVJhbmdlLCB1bml0bGVzcyk7Ci0gICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pCi0gICAgICAgIHJldHVybiBjb25z
dW1lUGVyY2VudChyYW5nZSwgdmFsdWVSYW5nZSk7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBE
aW1lbnNpb25Ub2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKKyAgICAgICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSwg
dmFsdWVSYW5nZSwgdW5pdGxlc3MpKQorICAgICAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9Owor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBpZiAodG9rZW4udHlwZSgp
ID09IFBlcmNlbnRhZ2VUb2tlbikgeworICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1l
UGVyY2VudFJhdyhyYW5nZSwgdmFsdWVSYW5nZSkpCisgICAgICAgICAgICByZXR1cm4geyAqcmVz
dWx0IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRv
a2VuLnR5cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihy
YW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKICAgICBpZiAo
Y29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxjdWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgewog
ICAgICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwg
Y3NzUGFyc2VyTW9kZSkpCi0gICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFs
dWUoKTsKKyAgICAgICAgICAgIHJldHVybiBjYWxjUGFyc2VyLmNvbnN1bWVMZW5ndGhPclBlcmNl
bnRSYXcoKTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UgdmFsdWVS
YW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK3sKKyAgICBjb25zdCBDU1NQYXJzZXJUb2tl
biYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlv
blRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TGVuZ3RoLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGNvbnN0IENTU0Nh
bGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkpIHsKKyAgICAgICAgICAg
IGlmIChjYW5Db25zdW1lQ2FsY1ZhbHVlKGNhbGN1bGF0aW9uLT5jYXRlZ29yeSgpLCBjc3NQYXJz
ZXJNb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUo
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdlLCBjc3NQYXJzZXJN
b2RlLCB2YWx1ZVJhbmdlLCB1bml0bGVzcykpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpy
ZXN1bHQsIFtdIChMZW5ndGhSYXcgbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShsZW5ndGgudmFsdWUsIGxlbmd0aC50eXBl
KTsKKyAgICAgICAgfSwgW10gKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAgICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShwZXJjZW50YWdlLCBDU1NV
bml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICB9KTsKICAgICB9CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLU9wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxlc3NR
dWlyayB1bml0bGVzcykKK09wdGlvbmFsPEFuZ2xlUmF3PiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVW5pdGxl
c3NRdWlyayB1bml0bGVzcykKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSBy
YW5nZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikgewpA
QCAtNTAyLDExICs1ODEsMjUgQEAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVz
b2x1dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQWxsb3dYUmUKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRl
bnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKHJhbmdlLnBlZWso
KS50eXBlKCkgIT0gSWRlbnRUb2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHJhbmdl
LmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKSk7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
aWQoKTsKK30KKworUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUlk
ZW50UmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKCpyZXN1bHQpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYW5nZVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFsdWVJRCB1cHBlcikKK3sKKyAg
ICBpZiAocmFuZ2UucGVlaygpLmlkKCkgPCBsb3dlciB8fCByYW5nZS5wZWVrKCkuaWQoKSA+IHVw
cGVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBjb25zdW1lSWRl
bnRSYXcocmFuZ2UpOwogfQogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVu
dFJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NW
YWx1ZUlEIHVwcGVyKQpAQCAtMTgwMyw2ICsxODk2LDIyNSBAQCBSZWZQdHI8Q1NTVmFsdWU+IGNv
bnN1bWVJbWFnZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyQ29udGV4dCBj
b250ZQogICAgIHJldHVybiBudWxscHRyOwogfQogCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25z
dW1lRm9udFZhcmlhbnRDU1MyMVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAg
ICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNtYWxsQ2Fw
cz4ocmFuZ2UpOworfQorCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFdlaWdodEtl
eXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4g
Y29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUJvbGQsIENTU1ZhbHVlQm9s
ZGVyLCBDU1NWYWx1ZUxpZ2h0ZXI+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Rm9udFdlaWdodFJh
dz4gY29uc3VtZUZvbnRXZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7Cisg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcocmFu
Z2UpKQorICAgICAgICByZXR1cm4geyAqcmVzdWx0IH07CisgICAgaWYgKGF1dG8gcmVzdWx0ID0g
Y29uc3VtZUZvbnRXZWlnaHROdW1iZXJSYXcocmFuZ2UpKQorICAgICAgICByZXR1cm4geyAqcmVz
dWx0IH07CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
IHJhbmdlKQoreworICAgIHJldHVybiBjb25zdW1lSWRlbnRSYXc8Q1NTVmFsdWVVbHRyYUNvbmRl
bnNlZCwgQ1NTVmFsdWVFeHRyYUNvbmRlbnNlZCwgQ1NTVmFsdWVDb25kZW5zZWQsIENTU1ZhbHVl
U2VtaUNvbmRlbnNlZCwgQ1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU2VtaUV4cGFuZGVkLCBDU1NW
YWx1ZUV4cGFuZGVkLCBDU1NWYWx1ZUV4dHJhRXhwYW5kZWQsIENTU1ZhbHVlVWx0cmFFeHBhbmRl
ZD4ocmFuZ2UpOworfQorCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0eWxlS2V5
d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBj
b25zdW1lSWRlbnRSYXc8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlSXRhbGljLCBDU1NWYWx1ZU9i
bGlxdWU+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Rm9udFN0eWxlUmF3PiBjb25zdW1lRm9udFN0
eWxlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNl
ck1vZGUpCit7CisgICAgYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVl
UmF3KHJhbmdlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGF1dG8gaWRlbnQgPSAqcmVzdWx0OworICAgIGlmIChpZGVudCA9PSBDU1NWYWx1
ZU5vcm1hbCB8fCBpZGVudCA9PSBDU1NWYWx1ZUl0YWxpYykKKyAgICAgICAgcmV0dXJuIHsgeyBp
ZGVudCwgV1RGOjpudWxsb3B0IH0gfTsKKyAgICBBU1NFUlQoaWRlbnQgPT0gQ1NTVmFsdWVPYmxp
cXVlKTsKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorICAgIGlmICghcmFuZ2UuYXRFbmQo
KSkgeworICAgICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmdsZVJhdyhyYW5nZSwgY3Nz
UGFyc2VyTW9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8gYW5nbGVJbkRlZ3JlZXMgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZURlZ3JlZXMoYW5nbGUtPnR5cGUsIGFuZ2xlLT52YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAoZm9udFN0eWxlSXNXaXRoaW5SYW5nZShhbmdsZUluRGVncmVlcykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBDU1NWYWx1ZU9ibGlxdWUsIFdURk1vdmUoYW5nbGUp
IH0gfTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjc3NQYXJzZXJNb2RlKTsKKyNlbmRpZgorICAgIHJl
dHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCBXVEY6Om51bGxvcHQgfSB9OworfQorCitTdHJpbmcg
Y29uY2F0ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBib29sIGFkZGVkU3BhY2UgPSBmYWxzZTsKKyAg
ICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgZmlyc3RUb2tlbiA9IHJhbmdlLnBlZWsoKTsKKyAgICB3
aGlsZSAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CisgICAgICAgIGlmICgh
YnVpbGRlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Cisg
ICAgICAgICAgICBhZGRlZFNwYWNlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVy
LmFwcGVuZChyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLnZhbHVlKCkpOworICAg
IH0KKyAgICBpZiAoIWFkZGVkU3BhY2UgJiYgaXNDU1NXaWRlS2V5d29yZChmaXJzdFRva2VuLmlk
KCkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKK30KKworU3RyaW5nIGNvbnN1bWVGYW1pbHlOYW1lUmF3KENTU1BhcnNlclRva2VuUmFu
Z2UmIHJhbmdlKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09IFN0cmluZ1Rva2Vu
KQorICAgICAgICByZXR1cm4gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1
ZSgpLnRvU3RyaW5nKCk7CisgICAgaWYgKHJhbmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tl
bikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBjb25jYXRlbmF0ZUZhbWls
eU5hbWUocmFuZ2UpOworfQorCitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lR2VuZXJpY0Zh
bWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3Vt
ZUlkZW50UmFuZ2VSYXcocmFuZ2UsIENTU1ZhbHVlU2VyaWYsIENTU1ZhbHVlV2Via2l0Qm9keSk7
Cit9CisKK09wdGlvbmFsPFdURjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBjb25zdW1lRm9udEZh
bWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICBXVEY6OlZlY3RvcjxG
b250RmFtaWx5UmF3PiBsaXN0OworICAgIGRvIHsKKyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBj
b25zdW1lR2VuZXJpY0ZhbWlseVJhdyhyYW5nZSkpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh7
ICppZGVudCB9KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWUg
PSBjb25zdW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CisgICAgICAgICAgICBpZiAoZmFtaWx5TmFt
ZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgbGlzdC5hcHBlbmQoeyBmYW1pbHlOYW1lIH0pOworICAgICAgICB9CisgICAgfSB3aGls
ZSAoY29uc3VtZUNvbW1hSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpOworICAgIHJldHVybiBs
aXN0OworfQorCitPcHRpb25hbDxGb250U2l6ZVJhdz4gY29uc3VtZUZvbnRTaXplUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpID49IENTU1Zh
bHVlWHhTbWFsbCAmJiByYW5nZS5wZWVrKCkuaWQoKSA8PSBDU1NWYWx1ZUxhcmdlcikgeworICAg
ICAgICBpZiAoYXV0byBpZGVudCA9IGNvbnN1bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgICAg
ICByZXR1cm4geyAqaWRlbnQgfTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUsIHVuaXRsZXNzKSkKKyAgICAg
ICAgcmV0dXJuIHsgKnJlc3VsdCB9OworCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
T3B0aW9uYWw8TGluZUhlaWdodFJhdz4gY29uc3VtZUxpbmVIZWlnaHRSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICBpZiAo
cmFuZ2UucGVlaygpLmlkKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgaWYgKGF1dG8g
aWRlbnQgPSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsgKmlk
ZW50IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgZG91Ymxl
IG51bWJlcjsKKyAgICBpZiAoY29uc3VtZU51bWJlclJhdyhyYW5nZSwgbnVtYmVyLCBWYWx1ZVJh
bmdlTm9uTmVnYXRpdmUpKQorICAgICAgICByZXR1cm4geyBudW1iZXIgfTsKKworICAgIGlmIChh
dXRvIGxlbmd0aE9yUGVyY2VudCA9IGNvbnN1bWVMZW5ndGhPclBlcmNlbnRSYXcocmFuZ2UsIGNz
c1BhcnNlck1vZGUsIFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB7ICps
ZW5ndGhPclBlcmNlbnQgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlv
bmFsPEZvbnRSYXc+IGNvbnN1bWVGb250V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQoreworICAgIC8vIExldCdzIGNoZWNr
IGlmIHRoZXJlIGlzIGFuIGluaGVyaXQgb3IgaW5pdGlhbCBzb21ld2hlcmUgaW4gdGhlIHNob3J0
aGFuZC4KKyAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlQ29weSA9IHJhbmdlOworICAgIHdo
aWxlICghcmFuZ2VDb3B5LmF0RW5kKCkpIHsKKyAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJhbmdl
Q29weS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7CisgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUluaGVyaXQgfHwgaWQgPT0gQ1NTVmFsdWVJbml0aWFsKQorICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBGb250UmF3IHJlc3VsdDsKKworICAg
IHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgeworICAgICAgICBDU1NWYWx1ZUlEIGlkID0gcmFuZ2Uu
cGVlaygpLmlkKCk7CisgICAgICAgIGlmICghcmVzdWx0LnN0eWxlKSB7CisgICAgICAgICAgICBp
ZiAoKHJlc3VsdC5zdHlsZSA9IGNvbnN1bWVGb250U3R5bGVSYXcocmFuZ2UsIGNzc1BhcnNlck1v
ZGUpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXJlc3VsdC52YXJpYW50Q2FwcyAmJiAoaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NT
VmFsdWVTbWFsbENhcHMpKSB7CisgICAgICAgICAgICAvLyBGb250IHZhcmlhbnQgaW4gdGhlIHNo
b3J0aGFuZCBpcyBwYXJ0aWN1bGFyLCBpdCBvbmx5IGFjY2VwdHMgbm9ybWFsIG9yIHNtYWxsLWNh
cHMuCisgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy1mb250
cy8jcHJvcGRlZi1mb250CisgICAgICAgICAgICBpZiAoKHJlc3VsdC52YXJpYW50Q2FwcyA9IGNv
bnN1bWVGb250VmFyaWFudENTUzIxUmF3KHJhbmdlKSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFyZXN1bHQud2VpZ2h0KSB7CisgICAgICAgICAg
ICBpZiAoKHJlc3VsdC53ZWlnaHQgPSBjb25zdW1lRm9udFdlaWdodFJhdyhyYW5nZSkpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LnN0
cmV0Y2gpIHsKKyAgICAgICAgICAgIGlmICgocmVzdWx0LnN0cmV0Y2ggPSBjb25zdW1lRm9udFN0
cmV0Y2hLZXl3b3JkVmFsdWVSYXcocmFuZ2UpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocmFuZ2UuYXRFbmQo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIE5vdyBhIGZvbnQgc2l6
ZSBfbXVzdF8gY29tZS4KKyAgICBpZiAoYXV0byBzaXplID0gY29uc3VtZUZvbnRTaXplUmF3KHJh
bmdlLCBjc3NQYXJzZXJNb2RlKSkKKyAgICAgICAgcmVzdWx0LnNpemUgPSAqc2l6ZTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAocmFuZ2UuYXRFbmQo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChjb25zdW1lU2xhc2hJ
bmNsdWRpbmdXaGl0ZXNwYWNlKHJhbmdlKSkgeworICAgICAgICBpZiAoIShyZXN1bHQubGluZUhl
aWdodCA9IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KHJhbmdlLCBjc3NQYXJzZXJNb2RlKSkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIEZvbnQgZmFtaWx5
IG11c3QgY29tZSBub3cuCisgICAgaWYgKGF1dG8gZmFtaWx5ID0gY29uc3VtZUZvbnRGYW1pbHlS
YXcocmFuZ2UpKQorICAgICAgICByZXN1bHQuZmFtaWx5ID0gKmZhbWlseTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIXJhbmdlLmF0RW5kKCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitj
b25zdCBBdG9tU3RyaW5nJiBnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlEKENTU1ZhbHVlSUQg
aWRlbnQpCit7CisgICAgc3dpdGNoIChpZGVudCkgeworICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoK
KyAgICAgICAgcmV0dXJuIHNlcmlmRmFtaWx5LmdldCgpOworICAgIGNhc2UgQ1NTVmFsdWVTYW5z
U2VyaWY6CisgICAgICAgIHJldHVybiBzYW5zU2VyaWZGYW1pbHkuZ2V0KCk7CisgICAgY2FzZSBD
U1NWYWx1ZUN1cnNpdmU6CisgICAgICAgIHJldHVybiBjdXJzaXZlRmFtaWx5LmdldCgpOworICAg
IGNhc2UgQ1NTVmFsdWVGYW50YXN5OgorICAgICAgICByZXR1cm4gZmFudGFzeUZhbWlseS5nZXQo
KTsKKyAgICBjYXNlIENTU1ZhbHVlTW9ub3NwYWNlOgorICAgICAgICByZXR1cm4gbW9ub3NwYWNl
RmFtaWx5LmdldCgpOworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRQaWN0b2dyYXBoOgorICAgICAg
ICByZXR1cm4gcGljdG9ncmFwaEZhbWlseS5nZXQoKTsKKyAgICBjYXNlIENTU1ZhbHVlU3lzdGVt
VWk6CisgICAgICAgIHJldHVybiBzeXN0ZW1VaUZhbWlseS5nZXQoKTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZW1wdHlBdG9tKCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgK
aW5kZXggYTg3YmQyMGFhMmE1MjM2MTRiZDM4M2JjMDgzNTc0NDg0ZmE0MDZiYi4uYWYwMDgwMTc1
MTk5YzAzNjcwN2UzZGE5ZTVhYjE2ZTI4MzI0N2VmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oCkBAIC0zNyw2ICszNyw4
IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiIC8vIEZv
ciBWYWx1ZVJhbmdlCiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorI2luY2x1ZGUgPHd0Zi9W
YXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTU1LDI4ICs1Nyw0MSBAQCBDU1NQYXJzZXJUb2tlblJhbmdlIGNvbnN1bWVGdW5jdGlv
bihDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBlbnVtIGNsYXNzIFVuaXRsZXNzUXVpcmsgeyBBbGxv
dywgRm9yYmlkIH07CiBlbnVtIGNsYXNzIEFsbG93WFJlc29sdXRpb25Vbml0IHsgQWxsb3csIEZv
cmJpZCB9OwogCi1zdHJ1Y3QgQW5nbGUgeworc3RydWN0IEFuZ2xlUmF3IHsKICAgICBDU1NVbml0
VHlwZSB0eXBlOwogICAgIGRvdWJsZSB2YWx1ZTsKIH07CiAKK3N0cnVjdCBMZW5ndGhSYXcgewor
ICAgIENTU1VuaXRUeXBlIHR5cGU7CisgICAgZG91YmxlIHZhbHVlOworfTsKKwordXNpbmcgTGVu
Z3RoT3JQZXJjZW50UmF3ID0gV1RGOjpWYXJpYW50PExlbmd0aFJhdywgZG91YmxlPjsKKwogUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSW50ZWdlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiwgZG91YmxlIG1pbmltdW1WYWx1ZSA9IC1zdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h
eCgpKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVBvc2l0aXZlSW50ZWdlcihD
U1NQYXJzZXJUb2tlblJhbmdlJik7Ci1ib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0KTsKK2Jvb2wgY29uc3VtZU51bWJlclJhdyhDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgZG91YmxlJiByZXN1bHQsIFZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdlQWxs
KTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZU51bWJlcihDU1NQYXJzZXJUb2tl
blJhbmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVGb250V2VpZ2h0
TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29uc3VtZUZvbnRXZWlnaHROdW1iZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9u
YWw8TGVuZ3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChDU1NQYXJzZXJU
b2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVu
aXRsZXNzUXVpcms6OkZvcmJpZCk7CiBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVQZXJjZW50UmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5nZUFsbCk7CiBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQZXJjZW50KENTU1BhcnNlclRva2VuUmFuZ2Um
LCBWYWx1ZVJhbmdlKTsKK09wdGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0
aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVmFsdWVS
YW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGhPclBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1
aXJrOjpGb3JiaWQpOwotT3B0aW9uYWw8QW5nbGU+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayk7CitPcHRpb25hbDxBbmds
ZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2Rl
LCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY29uc3VtZUFuZ2xlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJN
b2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9yYmlkKTsKIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29uc3VtZVRpbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNl
ck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQp
OwogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUmVzb2x1dGlvbihDU1NQYXJzZXJU
b2tlblJhbmdlJiwgQWxsb3dYUmVzb2x1dGlvblVuaXQgPSBBbGxvd1hSZXNvbHV0aW9uVW5pdDo6
Rm9yYmlkKTsKIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJh
bmdlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlE
IHVwcGVyKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50UmFuZ2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpOwog
dGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFsdWVJRC4uLj4gaW5saW5lIGJvb2wgaWRlbnRNYXRj
aGVzKENTU1ZhbHVlSUQgaWQpOwordGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBhbGxvd2VkSWRlbnRz
PiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYpOwogdGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBhbGxvd2VkSWRlbnRzPiBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudChDU1NQYXJzZXJUb2tlblJhbmdlJik7CiAKIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUN1c3RvbUlkZW50KENTU1BhcnNlclRva2VuUmFu
Z2UmKTsKQEAgLTExNSw2ICsxMzAsNDAgQEAgZW51bSBjbGFzcyBBbGxvd2VkRmlsdGVyRnVuY3Rp
b25zIHsKIFJlZlB0cjxDU1NWYWx1ZT4gY29uc3VtZUZpbHRlcihDU1NQYXJzZXJUb2tlblJhbmdl
JiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYsIEFsbG93ZWRGaWx0ZXJGdW5jdGlvbnMpOwogUmVm
UHRyPENTU1NoYWRvd1ZhbHVlPiBjb25zdW1lU2luZ2xlU2hhZG93KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBDU1NQYXJzZXJNb2RlLCBib29sIGFsbG93SW5zZXQsIGJvb2wgYWxsb3dTcHJlYWQpOwog
CitzdHJ1Y3QgRm9udFN0eWxlUmF3IHsKKyAgICBDU1NWYWx1ZUlEIHN0eWxlOworICAgIE9wdGlv
bmFsPEFuZ2xlUmF3PiBhbmdsZTsKK307Cit1c2luZyBGb250V2VpZ2h0UmF3ID0gV1RGOjpWYXJp
YW50PENTU1ZhbHVlSUQsIGRvdWJsZT47Cit1c2luZyBGb250U2l6ZVJhdyA9IFdURjo6VmFyaWFu
dDxDU1NWYWx1ZUlELCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJh
dz47Cit1c2luZyBMaW5lSGVpZ2h0UmF3ID0gV1RGOjpWYXJpYW50PENTU1ZhbHVlSUQsIGRvdWJs
ZSwgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXc+OwordXNpbmcg
Rm9udEZhbWlseVJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBTdHJpbmc+OworCitzdHJ1
Y3QgRm9udFJhdyB7CisgICAgT3B0aW9uYWw8Rm9udFN0eWxlUmF3PiBzdHlsZTsKKyAgICBPcHRp
b25hbDxDU1NWYWx1ZUlEPiB2YXJpYW50Q2FwczsKKyAgICBPcHRpb25hbDxGb250V2VpZ2h0UmF3
PiB3ZWlnaHQ7CisgICAgT3B0aW9uYWw8Q1NTVmFsdWVJRD4gc3RyZXRjaDsKKyAgICBGb250U2l6
ZVJhdyBzaXplOworICAgIE9wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGxpbmVIZWlnaHQ7CisgICAg
V1RGOjpWZWN0b3I8Rm9udEZhbWlseVJhdz4gZmFtaWx5OworfTsKKworT3B0aW9uYWw8Q1NTVmFs
dWVJRD4gY29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwor
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFdlaWdodFJhdz4gY29uc3VtZUZvbnRX
ZWlnaHRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29u
c3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09w
dGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFN0eWxlUmF3PiBjb25zdW1lRm9udFN0eWxl
UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK1N0cmluZyBjb25jYXRl
bmF0ZUZhbWlseU5hbWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOworU3RyaW5nIGNvbnN1bWVGYW1p
bHlOYW1lUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNv
bnN1bWVHZW5lcmljRmFtaWx5UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPFdU
Rjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+PiBjb25zdW1lRm9udEZhbWlseVJhdyhDU1NQYXJzZXJU
b2tlblJhbmdlJik7CitPcHRpb25hbDxGb250U2l6ZVJhdz4gY29uc3VtZUZvbnRTaXplUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKK09wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVp
Z2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQYXJzZXJNb2RlKTsKK09wdGlvbmFsPEZv
bnRSYXc+IGNvbnN1bWVGb250V29ya2VyU2FmZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSk7Citjb25zdCBBdG9tU3RyaW5nJiBnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlE
KENTU1ZhbHVlSUQpOworCiAvLyBUZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGF0IHRoZSBi
b3R0b20gb2YgdGhlIGZpbGUgZm9yIHJlYWRhYmlsaXR5LgogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBlbXB0eUJhc2VDYXNlPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NTVmFsdWVJRCkgeyBy
ZXR1cm4gZmFsc2U7IH0KQEAgLTEyMyw2ICsxNzIsMTMgQEAgdGVtcGxhdGU8Q1NTVmFsdWVJRCBo
ZWFkLCBDU1NWYWx1ZUlELi4uIHRhaWw+IGlubGluZSBib29sIGlkZW50TWF0Y2hlcyhDU1NWYWx1
ZUkKICAgICByZXR1cm4gaWQgPT0gaGVhZCB8fCBpZGVudE1hdGNoZXM8dGFpbC4uLj4oaWQpOwog
fQogCit0ZW1wbGF0ZTxDU1NWYWx1ZUlELi4uIG5hbWVzPiBPcHRpb25hbDxDU1NWYWx1ZUlEPiBj
b25zdW1lSWRlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJh
bmdlLnBlZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4u
PihyYW5nZS5wZWVrKCkuaWQoKSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
cmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkuaWQoKTsKK30KKwogdGVt
cGxhdGU8Q1NTVmFsdWVJRC4uLiBuYW1lcz4gUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25z
dW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgaWYgKHJhbmdlLnBl
ZWsoKS50eXBlKCkgIT0gSWRlbnRUb2tlbiB8fCAhaWRlbnRNYXRjaGVzPG5hbWVzLi4uPihyYW5n
ZS5wZWVrKCkuaWQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCAyODM2NGFmYTFhNzZhNWRlOGFlNjRl
ZjM4NmIyNTJjNmFjNmU2MGE2Li43M2MyOGQzOGE5ODFiNmZhNzk4NjIyMjQ0NThlZDQ5OTU1YzQy
NzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTM2LDE2ICszNiwyMSBAQAogI2luY2x1ZGUgIkNTU0Zv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGF0aDJELmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIlN0eWxlQnVpbGRlci5oIgorI2luY2x1ZGUgIlN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVGb3JG
b250UmF3LmgiCiAjaW5jbHVkZSAiVGV4dE1ldHJpY3MuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CkBAIC0xMzQsMTYgKzEzOSwxMCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5l
d0ZvbnQpCiAgICAgaWYgKG5ld0ZvbnQgPT0gc3RhdGUoKS51bnBhcnNlZEZvbnQgJiYgc3RhdGUo
KS5mb250LnJlYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGFyc2VkU3R5
bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBDU1NQYXJzZXI6OnBh
cnNlVmFsdWUocGFyc2VkU3R5bGUsIENTU1Byb3BlcnR5Rm9udCwgbmV3Rm9udCwgdHJ1ZSwgc3Ry
aWN0VG9DU1NQYXJzZXJNb2RlKCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7Ci0g
ICAgaWYgKHBhcnNlZFN0eWxlLT5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0
cmluZyBmb250VmFsdWUgPSBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eUZvbnQpOwotCiAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2
ZXMvUHVibGljL3B1YmxpYy1odG1sLzIwMDlKdWwvMDk0Ny5odG1sLAotICAgIC8vIHRoZSAiaW5o
ZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLgotICAgIGlmIChmb250
VmFsdWUgPT0gImluaGVyaXQiIHx8IGZvbnRWYWx1ZSA9PSAiaW5pdGlhbCIpCisgICAgLy8gdGhl
ICJpbmhlcml0IiBhbmQgImluaXRpYWwiIHZhbHVlcyBtdXN0IGJlIGlnbm9yZWQuIHBhcnNlRm9u
dFdvcmtlclNhZmUoKSBpZ25vcmVzIHRoZXNlLgorICAgIGF1dG8gZm9udFJhdyA9IENTU1BhcnNl
cjo6cGFyc2VGb250V29ya2VyU2FmZShuZXdGb250LCBzdHJpY3RUb0NTU1BhcnNlck1vZGUoIW1f
dXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAgICBpZiAoIWZvbnRSYXcpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBwYXJzZSBzdWNjZWVkZWQuCkBAIC0xNTMsMzggKzE1
MiwyMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJp
bmcmIG5ld0ZvbnQpCiAKICAgICAvLyBNYXAgdGhlIDxjYW52YXM+IGZvbnQgaW50byB0aGUgdGV4
dCBzdHlsZS4gSWYgdGhlIGZvbnQgdXNlcyBrZXl3b3JkcyBsaWtlIGxhcmdlci9zbWFsbGVyLCB0
aGVzZSB3aWxsIHdvcmsKICAgICAvLyByZWxhdGl2ZSB0byB0aGUgY2FudmFzLgotICAgIGF1dG8g
bmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlUHRyKCk7Ci0KICAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBjYW52YXMoKS5kb2N1bWVudCgpOwogICAgIGRvY3VtZW50LnVwZGF0ZVN0eWxlSWZO
ZWVkZWQoKTsKIAorICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwog
ICAgIGlmIChhdXRvKiBjb21wdXRlZFN0eWxlID0gY2FudmFzKCkuY29tcHV0ZWRTdHlsZSgpKQot
ICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24geyBjb21wdXRlZFN0eWxlLT5mb250RGVzY3JpcHRpb24oKSB9KTsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbiB7IGNvbXB1dGVkU3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpIH07CiAgICAgZWxzZSB7Ci0gICAgICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24gZGVmYXVsdEZvbnREZXNjcmlwdGlvbjsKLSAgICAgICAgZGVmYXVsdEZvbnREZXNjcmlwdGlv
bi5zZXRPbmVGYW1pbHkoRGVmYXVsdEZvbnRGYW1pbHkpOwotICAgICAgICBkZWZhdWx0Rm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKLSAgICAgICAgZGVm
YXVsdEZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKLQot
ICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVmYXVsdEZvbnRE
ZXNjcmlwdGlvbikpOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KERlZmF1
bHRGb250RmFtaWx5KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
RGVmYXVsdEZvbnRTaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShEZWZhdWx0Rm9udFNpemUpOwogICAgIH0KIAotICAgIG5ld1N0eWxlLT5mb250Q2FzY2FkZSgp
LnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOwotCi0gICAgLy8gTm93IG1hcCB0aGUg
Zm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCi0KLSAgICBTdHlsZTo6TWF0
Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgYXV0byBwYXJlbnRTdHlsZSA9IFJlbmRlclN0eWxl
OjpjbG9uZSgqbmV3U3R5bGUpOwotICAgIFN0eWxlOjpCdWlsZGVyIHN0eWxlQnVpbGRlcigqbmV3
U3R5bGUsIHsgZG9jdW1lbnQsIHBhcmVudFN0eWxlIH0sIG1hdGNoUmVzdWx0LCB7IH0pOwotCi0g
ICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHks
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSku
Z2V0KCkpOwotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlG
b250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9u
dFN0eWxlKS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKLSAgICBzdHlsZUJ1aWxkZXIuYXBw
bHlQcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0gICAgc3R5bGVC
dWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7Ci0gICAg
c3R5bGVCdWlsZGVyLmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHBh
cnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0
KCkpOwotCi0gICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKGRvY3VtZW50LmZv
bnRTZWxlY3RvcigpLCAqbmV3U3R5bGUpOworICAgIGlmIChhdXRvIGZvbnRTdHlsZSA9IFN0eWxl
OjpyZXNvbHZlRm9yRm9udFJhdygqZm9udFJhdywgV1RGTW92ZShmb250RGVzY3JpcHRpb24pLCBk
b2N1bWVudCkpCisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1
bWVudC5mb250U2VsZWN0b3IoKSwgKmZvbnRTdHlsZSk7CiB9CiAKIHN0YXRpYyBDYW52YXNUZXh0
QWxpZ24gdG9DYW52YXNUZXh0QWxpZ24oVGV4dEFsaWduIHRleHRBbGlnbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggMjc2ZTQyYjg0ZWZmYzFlM2Y4ZWQ0
N2YwYjM5ZTg0NTVjNmUzZWM5OS4uNWE0N2VjYzg2MDQ4ZDk3Zjc0ZjI5ZWM5ZmU4MjAzOTYyODFm
YzRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9t
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NGb250VmFsdWUuaCIKICNpbmNsdWRlICJDU1NHcmFk
aWVudFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNTU1JlZ2lzdGVy
ZWRDdXN0b21Qcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1NoYWRvd1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ291bnRlci5oIgpAQCAtMTAxMyw0MCArMTAxNCwxMSBAQCBpbmxpbmUgdm9pZCBCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Q1NTVgogICAgICAgICAgICAgLy8gSWYgdGhlIGZhbWlseSBuYW1lIHdhcyByZXNvbHZlZCBieSB0
aGUgQ1NTIHBhcnNlciBmcm9tIGEgc3lzdGVtIGZvbnQgSUQsIHRoZW4gaXQgaXMgZ2VuZXJpYy4K
ICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IGZvbnRGYW1pbHkuZnJvbVN5c3RlbUZvbnRJ
RDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLnZh
bHVlSUQoKSkgewotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6CisgICAgICAg
ICAgICBpZiAoY29udGVudFZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEJvZHkpCiAg
ICAgICAgICAgICAgICAgZmFtaWx5ID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGluZ3Mo
KS5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzZXJpZkZh
bWlseTsKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWls
eSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1Zh
bHVlU2Fuc1NlcmlmOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHNhbnNTZXJpZkZhbWlseTsK
LSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUN1cnNpdmU6Ci0gICAgICAgICAgICAg
ICAgZmFtaWx5ID0gY3Vyc2l2ZUZhbWlseTsKLSAgICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1p
bHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZUZhbnRhc3k6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gZmFudGFzeUZhbWlseTsKLSAg
ICAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKLSAgICAgICAgICAgICAg
ICBmYW1pbHkgPSBtb25vc3BhY2VGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFt
aWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRQaWN0b2dyYXBoOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHBpY3RvZ3Jh
cGhGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTeXN0ZW1VaToKLSAg
ICAgICAgICAgICAgICBmYW1pbHkgPSBzeXN0ZW1VaUZhbWlseTsKLSAgICAgICAgICAgICAgICBp
c0dlbmVyaWNGYW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmYW1p
bHkgPSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZhbHVl
SUQoY29udGVudFZhbHVlLnZhbHVlSUQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kZmE1MDgyNjBlYWEyMTkzMDBmMDkyYjBjYWMxZWI5ZTEwZDZkOGI1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5j
cHAKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIgorCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9y
LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFN0eWxlIHsKKwordXNpbmcgbmFtZXNwYWNl
IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczsKKworT3B0aW9uYWw8UmVuZGVyU3R5bGU+IHJlc29s
dmVGb3JGb250UmF3KGNvbnN0IEZvbnRSYXcmIGZvbnRSYXcsIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b24mJiBmb250RGVzY3JpcHRpb24sIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBhdXRvIGZv
bnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKworICAgIGF1dG8gZ2V0UGFyZW50U3R5
bGUgPSBbJl0gKCkgLT4gc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiB7CisgICAgICAgIGF1
dG8gcGFyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZm9udFN0eWxlKTsKKyAgICAg
ICAgcGFyZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbikpOworICAgICAgICBwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS51
cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudFN0
eWxlOworICAgIH07CisKKyAgICAvLyBNYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGlu
dG8gdGhlIHN0eWxlLgorICAgIGZsb2F0IHBhcmVudFNpemUgPSBmb250RGVzY3JpcHRpb24uc3Bl
Y2lmaWVkU2l6ZSgpOworCisgICAgLy8gRm9udCBmYW1pbHkgYXBwbGllZCBpbiB0aGUgc2FtZSB3
YXkgYXMgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseQorICAgIC8vIEJl
Zm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVz
ZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgorICAgIGJvb2wgb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVs
dFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpOworCisgICAgVmVj
dG9yPEF0b21TdHJpbmc+IGZhbWlsaWVzOworICAgIGZhbWlsaWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZm9udFJhdy5mYW1pbHkuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgaXRlbSA6IGZv
bnRSYXcuZmFtaWx5KSB7CisgICAgICAgIEF0b21TdHJpbmcgZmFtaWx5OworICAgICAgICBib29s
IGlzR2VuZXJpY0ZhbWlseSA9IGZhbHNlOworICAgICAgICBzd2l0Y2hPbihpdGVtLCBbJl0gKENT
U1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IGlkZW50ICE9
IENTU1ZhbHVlV2Via2l0Qm9keTsKKyAgICAgICAgICAgIGZhbWlseSA9IGlzR2VuZXJpY0ZhbWls
eSA/IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Z2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJ
RChpZGVudCkKKyAgICAgICAgICAgICAgICA6IGRvY3VtZW50LnNldHRpbmdzKCkuc3RhbmRhcmRG
b250RmFtaWx5KCk7CisgICAgICAgIH0sIFsmXSAoY29uc3QgU3RyaW5nJiBmYW1pbHlTdHJpbmcp
IHsKKyAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseVN0cmluZzsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgaWYgKGZhbWlseS5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKGZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRJc1NwZWNpZmllZEZvbnQoIWlzR2VuZXJpY0ZhbWlseSk7CisgICAgICAgIGZhbWlsaWVzLnVu
Y2hlY2tlZEFwcGVuZChmYW1pbHkpOworICAgIH0KKworICAgIGlmIChmYW1pbGllcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgZm9udERlc2NyaXB0aW9uLnNl
dEZhbWlsaWVzKGZhbWlsaWVzKTsKKworICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CisgICAgICAg
IGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRT
aXplQXNJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8gc2l6ZSA9IFN0eWxlOjpmb250
U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0
U2l6ZSwgZG9jdW1lbnQpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmll
ZFNpemUoc2l6ZSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KFN0eWxlOjpjb21wdXRlZEZvbnRTaXplRnJvbVNwZWNpZmllZFNpemUoc2l6ZSwgZm9udERlc2Ny
aXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIGZhbHNlLCAmZm9udFN0eWxlLCBkb2N1bWVudCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gRm9udCBzdHlsZSBhcHBsaWVkIGluIHRoZSBzYW1l
IHdheSBhcyBCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlCisgICAg
aWYgKGZvbnRSYXcuc3R5bGUpIHsKKyAgICAgICAgc3dpdGNoIChmb250UmF3LnN0eWxlLT5zdHls
ZSkgeworICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZUl0YWxpYzoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJdGFsaWMoaXRhbGljVmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIENTU1ZhbHVlT2JsaXF1ZTogeworICAgICAgICAgICAgZmxvYXQgZGVncmVlczsKKyAg
ICAgICAgICAgIGlmIChmb250UmF3LnN0eWxlLT5hbmdsZSkKKyAgICAgICAgICAgICAgICBkZWdy
ZWVzID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVl
cyhmb250UmF3LnN0eWxlLT5hbmdsZS0+dHlwZSwgZm9udFJhdy5zdHlsZS0+YW5nbGUtPnZhbHVl
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVncmVlcyA9IDA7CisgICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRTZWxlY3Rpb25WYWx1ZShkZWdy
ZWVzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKChm
b250UmF3LnN0eWxlICYmIGZvbnRSYXcuc3R5bGUtPnN0eWxlID09IENTU1ZhbHVlSXRhbGljKSA/
IEZvbnRTdHlsZUF4aXM6Oml0YWwgOiBGb250U3R5bGVBeGlzOjpzbG50KTsKKworICAgIGlmIChm
b250UmF3LnZhcmlhbnRDYXBzKSB7CisgICAgICAgIHN3aXRjaCAoKmZvbnRSYXcudmFyaWFudENh
cHMpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6Ok5vcm1hbCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwczoKKyAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OlNtYWxsKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQWxsU21hbGxDYXBzOgor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fw
czo6QWxsU21hbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVQ
ZXRpdGVDYXBzOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZv
bnRWYXJpYW50Q2Fwczo6UGV0aXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENTU1ZhbHVlQWxsUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50Q2FwcyhGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVVuaWNhc2U6CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpVbmljYXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGl0bGluZ0NhcHM6CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpUaXRsaW5n
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChmb250UmF3LndlaWdodCkgeworICAgICAgICBhdXRvIHdlaWdodCA9IHN3aXRj
aE9uKCpmb250UmF3LndlaWdodCwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGlkZW50KSB7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgorICAg
ICAgICAgICAgICAgIHJldHVybiBub3JtYWxXZWlnaHRWYWx1ZSgpOworICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUJvbGQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJvbGRXZWlnaHRWYWx1ZSgp
OworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUJvbGRlcjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53
ZWlnaHQoKSk7CisgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGlnaHRlcjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodChmb250RGVz
Y3JpcHRpb24ud2VpZ2h0KCkpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsV2Vp
Z2h0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgWyZdIChkb3VibGUgd2VpZ2h0
KSB7CisgICAgICAgICAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlOjpjbGFtcEZsb2F0KHdl
aWdodCk7CisgICAgICAgIH0pOworICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KHdl
aWdodCk7CisgICAgfQorCisgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlk
ZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKKyAgICBmbG9hdCBzaXplID0gc3dpdGNoT24oZm9u
dFJhdy5zaXplLCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgc3dpdGNoIChpZGVu
dCkgeworICAgICAgICBjYXNlIENTU1ZhbHVlWHhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZVhTbWFsbDoKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsOgorICAgICAgICBjYXNlIENTU1Zh
bHVlTWVkaXVtOgorICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVYTGFyZ2U6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgorICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0WHh4TGFyZ2U6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihpZGVudCk7CisgICAgICAgICAgICByZXR1cm4gU3R5
bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSwgZG9jdW1lbnQpOworICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgorICAg
ICAgICAgICAgcmV0dXJuIHBhcmVudFNpemUgKiAxLjJmOworICAgICAgICBjYXNlIENTU1ZhbHVl
U21hbGxlcjoKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplIC8gMS4yZjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwLmY7CisgICAgICAgIH0KKyAgICB9LCBbJl0g
KGNvbnN0IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5n
dGhPclBlcmNlbnQpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwg
WyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7
CisgICAgICAgICAgICBhdXRvIHBhcmVudFN0eWxlID0gZ2V0UGFyZW50U3R5bGUoKTsKKyAgICAg
ICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBwYXJlbnRT
dHlsZS5nZXQoKSwgbnVsbHB0ciwgcGFyZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJlbmRlclZp
ZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlGb250U2l6ZSB9OworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhE
b3VibGUoY29udmVyc2lvbkRhdGEsIGxlbmd0aC50eXBlLCBsZW5ndGgudmFsdWUpKTsKKyAgICAg
ICAgfSwgWyZdIChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PigocGFyZW50U2l6ZSAqIHBlcmNlbnRhZ2UpIC8gMTAwLjApOworICAgICAg
ICB9KTsKKyAgICB9KTsKKworICAgIGlmIChzaXplID4gMCkgeworICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBpZiAoZm9udFJhdy5saW5lSGVpZ2h0
KSB7CisgICAgICAgIE9wdGlvbmFsPExlbmd0aD4gbGluZUhlaWdodCA9IHN3aXRjaE9uKCpmb250
UmF3LmxpbmVIZWlnaHQsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgeworICAgICAgICAgICAgaWYg
KGlkZW50ID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25h
bDxMZW5ndGg+KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxMZW5ndGg+KFdURjo6bnVsbG9wdCk7CisgICAgICAgIH0sIFsmXSAo
ZG91YmxlIG51bWJlcikgeworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVu
Z3RoKG51bWJlciAqIDEwMC4wLCBQZXJjZW50KSk7CisgICAgICAgIH0sIFsmXSAoY29uc3QgQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNlbnRSYXcmIGxlbmd0aE9yUGVyY2Vu
dCkgeworICAgICAgICAgICAgcmV0dXJuIHN3aXRjaE9uKGxlbmd0aE9yUGVyY2VudCwgWyZdIChj
b25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aFJhdyYgbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBwYXJlbnRTdHlsZSA9IGdldFBhcmVudFN0eWxlKCk7CisgICAgICAg
ICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSB7IHBhcmVu
dFN0eWxlLmdldCgpLCBudWxscHRyLCBwYXJlbnRTdHlsZS5nZXQoKSwgZG9jdW1lbnQucmVuZGVy
VmlldygpLCAxLjBmLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQgfTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgoY2xhbXBUbzxmbG9hdD4oQ1NTUHJpbWl0aXZl
VmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKGNvbnZlcnNpb25EYXRhLCBsZW5ndGgu
dHlwZSwgbGVuZ3RoLnZhbHVlKSwgbWluVmFsdWVGb3JDc3NMZW5ndGgsIG1heFZhbHVlRm9yQ3Nz
TGVuZ3RoKSwgRml4ZWQpKTsKKyAgICAgICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2Up
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihMZW5ndGgoKGZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHN0YXRpY19jYXN0PGludD4ocGVyY2VudGFnZSkp
IC8gMTAwLCBGaXhlZCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg
IGlmIChsaW5lSGVpZ2h0KQorICAgICAgICAgICAgZm9udFN0eWxlLnNldExpbmVIZWlnaHQoV1RG
TW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkpKTsKKyAgICB9CisKKyAgICBmb250U3R5bGUuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgZm9udFN0eWxlLmZv
bnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisKKyAgICByZXR1
cm4gZm9udFN0eWxlOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJl
c29sdmVGb3JGb250UmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2IxMGE1MDM1ZDJkOTYzZmVhOGVlYjY2NGJk
YTliYjY4OTUyYzY1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZUZvckZvbnRSYXcuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK25hbWVzcGFjZSBDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMgeworc3RydWN0IEZvbnRSYXc7Cit9CisKK25hbWVzcGFjZSBTdHls
ZSB7CisKK09wdGlvbmFsPFJlbmRlclN0eWxlPiByZXNvbHZlRm9yRm9udFJhdyhjb25zdCBDU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXcmLCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiYs
IERvY3VtZW50Jik7CisKK30KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414439</attachid>
            <date>2020-11-18 05:00:45 -0800</date>
            <delta_ts>2020-11-18 07:08:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20201118130043.patch</filename>
            <type>text/plain</type>
            <size>63067</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5OTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ1YWYwMTI5ZmJmMGIy
ZWFkNGMzZGU4MzQ4MWZlYmI1NWFlZjhjMy4uYTIzNmIzMmYxOTcxMGEwYzA5YjI0ZmY5YWFlZGRj
NjI2ZDY4NWUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTEwLTE1ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIENTUyBmb250IHNob3J0
aGFuZHMgcGFyc2FibGUgd2l0aGluIGEgd29ya2VyIChpLmUuIHdpdGhvdXQgQ1NTVmFsdWVQb29s
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkIGZ1bmN0
aW9ucyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhcnNlIENTUyBmb250IHNob3J0aGFuZAorICAg
ICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgdXNpbmcgQ1NTIHZhbHVlcywgc28gaXQgY2FuIGJlIGRv
bmUgc2FmZWx5IG9mZiBvZgorICAgICAgICB0aGUgbWFpbiB0aHJlYWQuIFRvIHN1cHBvcnQgYW5k
IHRlc3QgdGhpcywgYWxzbyBhZGQgZnVuY3Rpb25zIHRvIG1ha2UKKyAgICAgICAgaXQgcG9zc2li
bGUgdG8gcmVzb2x2ZSB0aG9zZSBwcm9wZXJ0aWVzIGludG8gYSBzdHlsZSB3aXRob3V0CisgICAg
ICAgIFN0eWxlQnVpbGRlciBhbmQgdXNlIHRoYXQgd2l0aGluIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKToKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRXZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZh
bWlseU5hbWUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoKKyAg
ICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVQ
ZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
TGVuZ3RoUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRS
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lSWRlbnRSYW5nZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9u
dFdlaWdodFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9u
dFN0eWxlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uY2F0ZW5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUZhbWlseU5hbWVSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250RmFtaWx5UmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZv
bnRTaXplUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxpbmVIZWlnaHRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRm9udFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlEKToKKyAg
ICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRSYXcpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAq
IHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KToKKyAgICAgICAgKiBzdHlsZS9TdHls
ZVJlc29sdmVGb3JGb250UmF3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
cmVzb2x2ZUZvckZvbnRSYXcpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuaDogQWRkZWQuCisKIDIwMjAtMTEtMTggIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2OTQzNSk6IFtEZWJ1Z11bR1N0cmVh
bWVyXSBTZXZlcmFsIHRlc3RzIGFyZSBjcmFzaGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5NmJmZDU1
YjE0NTA2MjMwMGEyMzVjOWNlMmIzNGYwMzllOWEwZThlLi5kYThjODI5OGI4MDBkNzY0M2Y2MzY1
YzZkOWY4YTMxZDAyNDQ1ZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQyNyw2ICsyNDI3LDcgQEAg
c3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKIHN0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5j
cHAKIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnQuY3BwCitzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAogc3R5bGUvU3R5bGVSZXNv
bHZlci5jcHAKIHN0eWxlL1N0eWxlU2NvcGUuY3BwCiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggZTNmNjE1NTM4NzlhNjZiMjA3MzQ3YjEzNDg4ZWUyMTBhNzFjYmZkOC4uNzBlNDI2
NjlkMzlmMTc2NzhlNjRkYWYzNTI2ODY1NTVhZmEyZDAxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTEzNiw2ICs1MTM2LDcg
QEAKIAkJRTREMzNGNDQyNTJDNTBFMjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTREMzNGNDMyNTJDNTBFMjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGlu
ZUl0ZXJhdG9yTGVnYWN5UGF0aC5oICovOyB9OwogCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUg
LyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0Y0NTI1MkM1MEZCMDA4MzdE
MDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggKi87IH07CiAJ
CUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjMxN0I0
REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi87IH07CisJCUU0RDY4
RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2OEVCMzE3QjREQkRDMDBD
QkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICovOyB9OwogCQlFNEQ1OEVCOTE3QjRF
RDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8q
IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJRTRENThFQkIxN0I4RjEyODAwQ0JE
Q0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RDU4RUJBMTdCOEYxMjgwMENCRENBOCAvKiBFbGVtZW50VHJhdmVy
c2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTREOTg4QjQxN0JGRDFGNjAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ5ODhCMzE3QkZEMUY2MDA4
NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuaCAqLzsgfTsKQEAgLTE2Mjg2LDYgKzE2Mjg3LDgg
QEAKIAkJRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTW9kZXJuUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlv
dXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTRENThFQjIxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRv
Y3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThF
QjMxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDY4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHls
ZVJlc29sdmVGb3JGb250UmF3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFNEQ2OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JGb250UmF3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUI2MTdCNEVEODkwMENCRENB
OCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUJBMTdCOEYx
MjgwMENCRENBOCAvKiBFbGVtZW50VHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVsZW1lbnRUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI4ODY3LDYgKzI4ODcwLDggQEAKIAkJCQlFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyog
U3R5bGVSZWxhdGlvbnMuaCAqLywKIAkJCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5
bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwICovLAogCQkJCUU0RDU4RUIzMTdCNERCREMwMENCRENB
OCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAorCQkJCUU0RDY4RUIyMTdCNERCREMw
MENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcCAqLywKKwkJCQlFNEQ2OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICovLAogCQkJCUUxMzk4
NjYxMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLywKIAkJCQlFMTM5ODY2
MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovLAogCQkJCUU0NjFENjVDMUJC
MEM3RjAwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmNwcCAqLywKQEAgLTM0NTE4LDYgKzM0NTIzLDcg
QEAKIAkJCQlCQzIyNzI4NzBFODJFNzA3MDBFN0Y5NzUgLyogU3R5bGVSZWZsZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHls
ZVJlc29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRENjhFQjUxN0I0REJE
QzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNEJCRUQ0RDE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0Lmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRl
eCA5M2FiZjBkY2FiNzBjZDEzMWRlYjExNzBiMzIxMDk1NDg4N2RlZjFjLi40NDEyYWViYjg3OGVi
NDk1MzY1OWE5YWEwYmU1ZDYzZmRhNjgzZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuY3BwCkBAIC0xMzgsNiArMTM4LDE1IEBAIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+
PiBDU1NQYXJzZXI6OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCiAgICAgcmV0dXJu
IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihzdHJpbmcpOwogfQogCitPcHRpb25h
bDxDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IENTU1BhcnNlcjo6cGFyc2VGb250
V29ya2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIENTU1Rva2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNv
bnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lRm9udFdvcmtlclNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCiBSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUGFyc2VyLmgKaW5kZXggYmExMjZlNWJiNzBjMWY5ODlhZDEwNmYzOTc4N2M5YWUwNzU1
Mzg0Mi4uY2JlMGM1YzgxNWU3MWU3ZTQ3MzQ1ODlhZjE5YTAxNWJhMDkzMWM5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBAIC00NCw2ICs0NCwxMCBAQCBjbGFzcyBTdHls
ZVNoZWV0Q29udGVudHM7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgU1JHQkE7CiAKK25hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgeworc3Ry
dWN0IEZvbnRSYXc7Cit9CisKIG5hbWVzcGFjZSBTdHlsZSB7CiBjbGFzcyBCdWlsZGVyU3RhdGU7
CiB9CkBAIC05Miw2ICs5Niw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8
dWludDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9u
YWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAKKyAgICBzdGF0
aWMgT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBwYXJzZUZvbnRX
b3JrZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3RhbmRhcmRNb2Rl
KTsKKwogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAK
aW5kZXggNWQ0YTcwNTVkYmViMTAwZDA3NzgxMTY2N2Y3YWVhZmNlYjNmMmIyOC4uNmRkNmQ3Mzk4
YjdmY2ZhZDFiYmNkYTMyYWViZWMwNzdjOGY5Y2MwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNs
dWRlICJDU1NQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJDU1NQZW5kaW5nU3Vic3RpdHV0aW9u
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVk
ZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5j
dGlvblZhbHVlLmgiCkBAIC04NjQsMTYgKzg2MywxNiBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YQogICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU21hbGxD
YXBzPihyYW5nZSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewot
ICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlQm9sZCwgQ1NT
VmFsdWVCb2xkZXIsIENTU1ZhbHVlTGlnaHRlcj4ocmFuZ2UpOwotfQotCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKIHsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEtleXdv
cmRWYWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKHJhbmdlKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1l
Rm9udFdlaWdodFJhdyhyYW5nZSkpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQs
IFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICAgICAg
fSwgW10gKGRvdWJsZSB3ZWlnaHROdW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHdlaWdodE51bWJlciwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJz
b2x1dGVLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC05MTAsNyAr
OTA5LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWln
aHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJgogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZVVsdHJhQ29u
ZGVuc2VkLCBDU1NWYWx1ZUV4dHJhQ29uZGVuc2VkLCBDU1NWYWx1ZUNvbmRlbnNlZCwgQ1NTVmFs
dWVTZW1pQ29uZGVuc2VkLCBDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTZW1pRXhwYW5kZWQsIENT
U1ZhbHVlRXhwYW5kZWQsIENTU1ZhbHVlRXh0cmFFeHBhbmRlZCwgQ1NTVmFsdWVVbHRyYUV4cGFu
ZGVkPihyYW5nZSk7CisgICAgaWYgKGF1dG8gdmFsdWVJRCA9IGNvbnN1bWVGb250U3RyZXRjaEtl
eXdvcmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqdmFsdWVJRCk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpAQCAtOTY1LDI2ICs5NjYsMTYg
QEAgc3RhdGljIGJvb2wgZm9udFN0eWxlSXNXaXRoaW5SYW5nZShmbG9hdCBvYmxpcXVlKQogCiBz
dGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7Ci0gICAg
YXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKHJhbmdlKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlSUQg
PSByZXN1bHQtPnZhbHVlSUQoKTsKLSAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlSXRhbGljKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxl
VmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZUlEKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC0+dmFsdWVJRCgpID09IENTU1ZhbHVl
T2JsaXF1ZSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZVJhdyhyYW5n
ZSwgY3NzUGFyc2VyTW9kZSkpIHsKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIGlm
ICghcmFuZ2UuYXRFbmQoKSkgewotICAgICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmds
ZShyYW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAgICAgIGlmIChmb250U3R5bGVJc1dp
dGhpblJhbmdlKGFuZ2xlLT52YWx1ZTxmbG9hdD4oQ1NTVW5pdFR5cGU6OkNTU19ERUcpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpLCBX
VEZNb3ZlKGFuZ2xlKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYg
KHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksCisgICAg
ICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQt
PmFuZ2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwogICAgICAgICB9Ci0gICAgfQot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CiAjZW5kaWYKLSAgICByZXR1
cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAgICAgcmV0dXJuIENT
U0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE4LDMwICsxMDA5LDkg
QEAgc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVSYW5nZVZhbHVlPiBjb25zdW1lRm9udFN0eWxl
UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIH0KICNlbmRpZgogCi1zdGF0aWMgU3RyaW5nIGNv
bmNhdGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7Ci0gICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgd2hp
bGUgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgewotICAgICAgICBpZiAoIWJ1
aWxkZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAg
ICAgICAgICAgYWRkZWRTcGFjZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5h
cHBlbmQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsKLSAgICB9
Ci0gICAgaWYgKCFhZGRlZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tlbi5pZCgp
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7Ci19Ci0KIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGYW1pbHlOYW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09
IFN0cmluZ1Rva2VuKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVGb250RmFtaWx5VmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52
YWx1ZSgpLnRvU3RyaW5nKCkpOwotICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFN0cmluZyBmYW1pbHlOYW1lID0g
Y29uY2F0ZW5hdGVGYW1pbHlOYW1lKHJhbmdlKTsKKyAgICBhdXRvIGZhbWlseU5hbWUgPSBjb25z
dW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CiAgICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCBiN2UxOWZiZDY0YTc4YzBmN2Q1
OWM3MTQ4N2Q3OTY2ZTdhMGIwOTllLi5jZjNkOWMxYmE5YmI3ZDljZGZiZTNhMTU4OTEzODcxMjQw
YjExMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU1BhcnNl
clRva2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNp
bmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcAppbmRleCBkY2RjM2ZiNjdkZWExMjViNWQzYzJkMWIyYWU3YWM4MTk5MjFiZjBm
Li5jZjM0NWMyMGRmMjNlMjNlZThmNDNjYTNhNTJlMGQ0MDJmYzg0MWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
CkBAIC0xMzAsMTMgKzEzMCwxNiBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVQZXJjZW50UmF3KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9j
YWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkKKyAg
ICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKTsKKyAgICAg
ICAgaWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5n
ZTsKICAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOwogICAgIH0KIAot
ICAgIE9wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoKQorICAgIE9wdGlvbmFsPEFuZ2xl
UmF3PiBjb25zdW1lQW5nbGVSYXcoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8
fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xNDQsNiArMTQ3LDMzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBt
X2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CiAgICAgfQogCisgICAgT3B0aW9uYWw8TGVu
Z3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYWxjVmFs
dWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgbV9zb3VyY2VS
YW5nZSA9IG1fcmFuZ2U7CisgICAgICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSwgbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9OworICAgIH0KKworICAgIE9w
dGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdygpCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICBzd2l0Y2ggKG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpKSB7Cisg
ICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgICAgICAgICAgbV9z
b3VyY2VSYW5nZSA9IG1fcmFuZ2U7CisgICAgICAgICAgICByZXR1cm4geyBMZW5ndGhSYXcoeyBt
X2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9
KSB9OworICAgICAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6CisgICAgICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKKyAgICAgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgICAgICAgICAgbV9zb3VyY2VS
YW5nZSA9IG1fcmFuZ2U7CisgICAgICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7
CkBAIC0xNzcsMTAgKzIwNywxMiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQ
b3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyKHJhbmdlLCAxKTsKIH0KIAotYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKK2Jvb2wgY29uc3VtZU51bWJl
clJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1bHQsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgeworICAgICAg
ICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJp
Y1ZhbHVlKCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXN1bHQg
PSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xODgsNyArMjIwLDcgQEAgYm9vbCBjb25zdW1l
TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKICAg
ICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7CiAgICAgcmV0dXJu
IGNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdyhyZXN1bHQpOwogfQogCkBAIC0xOTYsMjIgKzIy
OCwxOSBAQCBib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGRvdWJsZSYgcmVzdWx0KQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVy
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAg
ICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0
b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKLSAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0g
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW4u
dHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlv
blRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8q
IGNhbGNWYWx1ZSA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbGNW
YWx1ZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNvbnN0
IENTU0NhbGNWYWx1ZSogY2FsY1ZhbHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAg
IGlmIChjYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2Vy
LmNvbnN1bWVWYWx1ZSgpOwogICAgIH0KIAorICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNv
bnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5p
dFR5cGUoKSk7CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMjIyLDcgKzI1MSw3IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBkaXZpc2libGVCeTEwMChkb3VibGUgdmFsdWUpCiB9CiAjZW5k
aWYKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFs
dWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAx
MDAwIGFyZSBwYXJzZSBlcnJvcnMuCiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CkBA
IC0yMzAsMTEgKzI1OSwxNSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2lmICFFTkFCTEUoVkFS
SUFUSU9OX0ZPTlRTKQogICAgICAgICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50
ZWdlclZhbHVlVHlwZSAmJiBkaXZpc2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFsdWUoKSkKICNl
bmRpZgotICAgICkKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXIocmFuZ2UsIFZhbHVlUmFu
Z2VBbGwpOworICAgICkgeworICAgICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICBpZiAoY29u
c3VtZU51bWJlclJhdyhyYW5nZSwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5
cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZh
bHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSBy
YW5nZSBhbGxvd2VkIGluIHRoZSB0YXJnZXQgY29udGV4dC4iCiAgICAgQ2FsY1BhcnNlciBjYWxj
UGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2VBbGwp
OwpAQCAtMjQ1LDkgKzI3OCwxNiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2VuZGlmCiAgICAg
KSB7CiAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJlc3VsdCwgc3RkOjpuZXh0
YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6bmV4dGFmdGVyKDEwMDAuLCAwLikpOwotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlm
IChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0y
NTksMTQgKzI5OSwxNCBAQCBpbmxpbmUgYm9vbCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRv
dWJsZSB2YWx1ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLAogICAgICAgICB8fCAoY3Nz
UGFyc2VyTW9kZSA9PSBIVE1MUXVpcmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJr
OjpBbGxvdyk7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxM
ZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAg
ICAgICAgIHN3aXRjaCAodG9rZW4udW5pdFR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUVVJUktZX0VNUzoKICAgICAgICAgICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFVB
U2hlZXRNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1JFTVM6CkBAIC0yODcsMjggKzMyNywzOSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZAog
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGlmICgodmFsdWVSYW5nZSA9
PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKSB8fCBz
dGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tl
bi51bml0VHlwZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiB7IHsgdG9rZW4udW5pdFR5cGUoKSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07CiAgICAgfQogICAgIGlmICh0b2tlbi50eXBlKCkg
PT0gTnVtYmVyVG9rZW4pIHsKICAgICAgICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVl
KHRva2VuLm51bWVyaWNWYWx1ZSgpLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcykKICAgICAgICAg
ICAgIHx8ICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1l
cmljVmFsdWUoKSA8IDApKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1l
cmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQ1NTVW5p
dFR5cGUgdW5pdFR5cGUgPSBDU1NVbml0VHlwZTo6Q1NTX1BYOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB1bml0VHlwZSk7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgs
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9Owog
ICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxj
UGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFs
dWVSYW5nZSk7Ci0gICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVl
KCktPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5j
b25zdW1lTGVuZ3RoUmF3KCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7
CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlm
ICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNh
bGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7
CisgICAgICAgIGlmIChjYWxjUGFyc2VyLnZhbHVlKCkgJiYgY2FsY1BhcnNlci52YWx1ZSgpLT5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAgIH0KKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2Us
IHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT52YWx1ZSwgcmVzdWx0LT50eXBlKTsKIAogICAgIHJldHVybiBudWxs
cHRyOwogfQpAQCAtMzMzLDcgKzM4NCw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKIHsKICAg
ICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRv
a2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1Bh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UpOworICAg
ICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQsIHZhbHVlUmFuZ2UpOwogICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxj
dWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgewogICAgICAgICAgICAgaWYgKGNhbGN1bGF0
aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CkBAIC0zNjEsMjYgKzQx
Miw1NCBAQCBzdGF0aWMgYm9vbCBjYW5Db25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdv
cnkgY2F0ZWdvcnksIENTU1BhcnNlck1vZGUgY3NzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0aE9y
UGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4m
IHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKQotICAgICAgICByZXR1cm4gY29u
c3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpOwot
ICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKQotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVlUmFuZ2UpOworICAgIGlmICh0b2tlbi50eXBlKCkg
PT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAg
ICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1v
ZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQg
fTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5
cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsg
KnJlc3VsdCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KIAogICAgIGlm
ICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CiAgICAg
aWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkp
IHsKICAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5
KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3Vt
ZVZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50UmF3KCk7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVu
Y3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjb25zdCBD
U1NDYWxjVmFsdWUqIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CisgICAgICAg
ICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3Nz
UGFyc2VyTW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZh
bHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3NzUGFy
c2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hP
bigqcmVzdWx0LCBbXSAoTGVuZ3RoUmF3IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgu
dHlwZSk7CisgICAgICAgIH0sIFtdIChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudGFnZSwg
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1PcHRpb25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4p
IHsKQEAgLTUwMiwxMSArNTgxLDI1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJlCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5nZS5w
ZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLmlkKCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpCit7
CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVlaygpLmlkKCkg
PiB1cHBlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29uc3Vt
ZUlkZW50UmF3KHJhbmdlKTsKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
SWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJRCBsb3dlciwg
Q1NTVmFsdWVJRCB1cHBlcikKQEAgLTE4MTgsNiArMTkxMSwyMjUgQEAgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRl
eHQgY29udGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4g
Y29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7
CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTbWFs
bENhcHM+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWln
aHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xkLCBDU1NWYWx1
ZUJvbGRlciwgQ1NTVmFsdWVMaWdodGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRXZWln
aHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQor
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3
KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsg
KnJlc3VsdCB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlVWx0cmFD
b25kZW5zZWQsIENTU1ZhbHVlRXh0cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVuc2VkLCBDU1NW
YWx1ZVNlbWlDb25kZW5zZWQsIENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlFeHBhbmRlZCwg
Q1NTVmFsdWVFeHBhbmRlZCwgQ1NTVmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1ZVVsdHJhRXhw
YW5kZWQ+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHls
ZUtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1
cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxpYywgQ1NTVmFs
dWVPYmxpcXVlPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZv
bnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQoreworICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRW
YWx1ZVJhdyhyYW5nZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIGlkZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRlbnQgPT0gQ1NT
VmFsdWVOb3JtYWwgfHwgaWRlbnQgPT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAgIHJldHVybiB7
IHsgaWRlbnQsIFdURjo6bnVsbG9wdCB9IH07CisgICAgQVNTRVJUKGlkZW50ID09IENTU1ZhbHVl
T2JsaXF1ZSk7CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICBpZiAoIXJhbmdlLmF0
RW5kKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2Us
IGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAgICBhdXRvIGFuZ2xlSW5EZWdyZWVzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUp
OworICAgICAgICAgICAgaWYgKGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoYW5nbGVJbkRlZ3JlZXMp
KQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCBXVEZNb3ZlKGFu
Z2xlKSB9IH07CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CisjZW5kaWYKKyAg
ICByZXR1cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgV1RGOjpudWxsb3B0IH0gfTsKK30KKworU3Ry
aW5nIGNvbmNhdGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7
CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7Cisg
ICAgd2hpbGUgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBp
ZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcp
OworICAgICAgICAgICAgYWRkZWRTcGFjZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnVp
bGRlci5hcHBlbmQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsK
KyAgICB9CisgICAgaWYgKCFhZGRlZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tl
bi5pZCgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdU
b2tlbikKKyAgICAgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
dmFsdWUoKS50b1N0cmluZygpOworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4pCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gY29uY2F0ZW5hdGVG
YW1pbHlOYW1lKHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVy
aWNGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVJZGVudFJhbmdlUmF3KHJhbmdlLCBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVdlYmtpdEJv
ZHkpOworfQorCitPcHRpb25hbDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZv
bnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgV1RGOjpWZWN0
b3I8Rm9udEZhbWlseVJhdz4gbGlzdDsKKyAgICBkbyB7CisgICAgICAgIGlmIChhdXRvIGlkZW50
ID0gY29uc3VtZUdlbmVyaWNGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICAgICAgbGlzdC5hcHBl
bmQoeyAqaWRlbnQgfSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBmYW1pbHlO
YW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpOworICAgICAgICAgICAgaWYgKGZhbWls
eU5hbWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKHsgZmFtaWx5TmFtZSB9KTsKKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKKyAgICByZXR1
cm4gbGlzdDsKK30KKworT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA+PSBD
U1NWYWx1ZVh4U21hbGwgJiYgcmFuZ2UucGVlaygpLmlkKCkgPD0gQ1NTVmFsdWVMYXJnZXIpIHsK
KyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgKmlkZW50IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhy
YW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlLCB1bml0bGVzcykpCisg
ICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK09wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAg
aWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgIGlmIChh
dXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7
ICppZGVudCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGRv
dWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwgVmFs
dWVSYW5nZU5vbk5lZ2F0aXZlKSkKKyAgICAgICAgcmV0dXJuIHsgbnVtYmVyIH07CisKKyAgICBp
ZiAoYXV0byBsZW5ndGhPclBlcmNlbnQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpKQorICAgICAgICByZXR1cm4g
eyAqbGVuZ3RoT3JQZXJjZW50IH07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitP
cHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICAvLyBMZXQncyBj
aGVjayBpZiB0aGVyZSBpcyBhbiBpbmhlcml0IG9yIGluaXRpYWwgc29tZXdoZXJlIGluIHRoZSBz
aG9ydGhhbmQuCisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsKKyAg
ICB3aGlsZSAoIXJhbmdlQ29weS5hdEVuZCgpKSB7CisgICAgICAgIENTU1ZhbHVlSUQgaWQgPSBy
YW5nZUNvcHkuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOworICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IGlkID09IENTU1ZhbHVlSW5pdGlhbCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgRm9udFJhdyByZXN1bHQ7CisK
KyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJh
bmdlLnBlZWsoKS5pZCgpOworICAgICAgICBpZiAoIXJlc3VsdC5zdHlsZSkgeworICAgICAgICAg
ICAgaWYgKChyZXN1bHQuc3R5bGUgPSBjb25zdW1lRm9udFN0eWxlUmF3KHJhbmdlLCBjc3NQYXJz
ZXJNb2RlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFyZXN1bHQudmFyaWFudENhcHMgJiYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09
IENTU1ZhbHVlU21hbGxDYXBzKSkgeworICAgICAgICAgICAgLy8gRm9udCB2YXJpYW50IGluIHRo
ZSBzaG9ydGhhbmQgaXMgcGFydGljdWxhciwgaXQgb25seSBhY2NlcHRzIG5vcm1hbCBvciBzbWFs
bC1jYXBzLgorICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3Mt
Zm9udHMvI3Byb3BkZWYtZm9udAorICAgICAgICAgICAgaWYgKChyZXN1bHQudmFyaWFudENhcHMg
PSBjb25zdW1lRm9udFZhcmlhbnRDU1MyMVJhdyhyYW5nZSkpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LndlaWdodCkgeworICAgICAg
ICAgICAgaWYgKChyZXN1bHQud2VpZ2h0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3Vs
dC5zdHJldGNoKSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC5zdHJldGNoID0gY29uc3VtZUZv
bnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJhbmdlLmF0
RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBOb3cgYSBmb250
IHNpemUgX211c3RfIGNvbWUuCisgICAgaWYgKGF1dG8gc2l6ZSA9IGNvbnN1bWVGb250U2l6ZVJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIHJlc3VsdC5zaXplID0gKnNpemU7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKHJhbmdlLmF0
RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY29uc3VtZVNs
YXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpIHsKKyAgICAgICAgaWYgKCEocmVzdWx0Lmxp
bmVIZWlnaHQgPSBjb25zdW1lTGluZUhlaWdodFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBGb250IGZh
bWlseSBtdXN0IGNvbWUgbm93LgorICAgIGlmIChhdXRvIGZhbWlseSA9IGNvbnN1bWVGb250RmFt
aWx5UmF3KHJhbmdlKSkKKyAgICAgICAgcmVzdWx0LmZhbWlseSA9ICpmYW1pbHk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFyYW5nZS5hdEVuZCgp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1
ZUlEIGlkZW50KQoreworICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICBjYXNlIENTU1ZhbHVlU2Vy
aWY6CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseS5nZXQoKTsKKyAgICBjYXNlIENTU1ZhbHVl
U2Fuc1NlcmlmOgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5LmdldCgpOworICAgIGNh
c2UgQ1NTVmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseS5nZXQoKTsK
KyAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHku
Z2V0KCk7CisgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9z
cGFjZUZhbWlseS5nZXQoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAg
ICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHkuZ2V0KCk7CisgICAgY2FzZSBDU1NWYWx1ZVN5
c3RlbVVpOgorICAgICAgICByZXR1cm4gc3lzdGVtVWlGYW1pbHkuZ2V0KCk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oCmluZGV4IGE4N2JkMjBhYTJhNTIzNjE0YmQzODNiYzA4MzU3NDQ4NGZhNDA2YmIuLmFmMDA4
MDE3NTE5OWMwMzY3MDdlM2RhOWU1YWIxNmUyODMyNDdlZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaApAQCAtMzcsNiAr
MzcsOCBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIiAv
LyBGb3IgVmFsdWVSYW5nZQogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01NSwyOCArNTcsNDEgQEAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBjb25zdW1lRnVu
Y3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogZW51bSBjbGFzcyBVbml0bGVzc1F1aXJrIHsg
QWxsb3csIEZvcmJpZCB9OwogZW51bSBjbGFzcyBBbGxvd1hSZXNvbHV0aW9uVW5pdCB7IEFsbG93
LCBGb3JiaWQgfTsKIAotc3RydWN0IEFuZ2xlIHsKK3N0cnVjdCBBbmdsZVJhdyB7CiAgICAgQ1NT
VW5pdFR5cGUgdHlwZTsKICAgICBkb3VibGUgdmFsdWU7CiB9OwogCitzdHJ1Y3QgTGVuZ3RoUmF3
IHsKKyAgICBDU1NVbml0VHlwZSB0eXBlOworICAgIGRvdWJsZSB2YWx1ZTsKK307CisKK3VzaW5n
IExlbmd0aE9yUGVyY2VudFJhdyA9IFdURjo6VmFyaWFudDxMZW5ndGhSYXcsIGRvdWJsZT47CisK
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGRvdWJsZSBtaW5pbXVtVmFsdWUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjptYXgoKSk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVn
ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwotYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmLCBkb3VibGUmIHJlc3VsdCk7Citib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5n
ZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdl
aWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09w
dGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6
OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsg
PSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2Vu
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpOwog
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJh
bmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKLU9wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmspOworT3B0aW9uYWw8
QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIEFsbG93WFJlc29sdXRpb25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVu
aXQ6OkZvcmJpZCk7CiAKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRl
bnRSYW5nZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFs
dWVJRCB1cHBlcik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFJhbmdl
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVy
KTsKIHRlbXBsYXRlPENTU1ZhbHVlSUQsIENTU1ZhbHVlSUQuLi4+IGlubGluZSBib29sIGlkZW50
TWF0Y2hlcyhDU1NWYWx1ZUlEIGlkKTsKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElk
ZW50cz4gT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmKTsKIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElkZW50cz4gUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogCiBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDdXN0b21JZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJik7CkBAIC0xMTUsNiArMTMwLDQwIEBAIGVudW0gY2xhc3MgQWxsb3dlZEZpbHRlckZ1
bmN0aW9ucyB7CiBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zKTsK
IFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFk
KTsKIAorc3RydWN0IEZvbnRTdHlsZVJhdyB7CisgICAgQ1NTVmFsdWVJRCBzdHlsZTsKKyAgICBP
cHRpb25hbDxBbmdsZVJhdz4gYW5nbGU7Cit9OwordXNpbmcgRm9udFdlaWdodFJhdyA9IFdURjo6
VmFyaWFudDxDU1NWYWx1ZUlELCBkb3VibGU+OwordXNpbmcgRm9udFNpemVSYXcgPSBXVEY6OlZh
cmlhbnQ8Q1NTVmFsdWVJRCwgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNl
bnRSYXc+OwordXNpbmcgTGluZUhlaWdodFJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBk
b3VibGUsIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3PjsKK3Vz
aW5nIEZvbnRGYW1pbHlSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NTVmFsdWVJRCwgU3RyaW5nPjsKKwor
c3RydWN0IEZvbnRSYXcgeworICAgIE9wdGlvbmFsPEZvbnRTdHlsZVJhdz4gc3R5bGU7CisgICAg
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gdmFyaWFudENhcHM7CisgICAgT3B0aW9uYWw8Rm9udFdlaWdo
dFJhdz4gd2VpZ2h0OworICAgIE9wdGlvbmFsPENTU1ZhbHVlSUQ+IHN0cmV0Y2g7CisgICAgRm9u
dFNpemVSYXcgc2l6ZTsKKyAgICBPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBsaW5lSGVpZ2h0Owor
ICAgIFdURjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+IGZhbWlseTsKK307CisKK09wdGlvbmFsPENT
U1ZhbHVlSUQ+IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
KTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVG
b250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+
IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7
CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZvbnRT
dHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitTdHJpbmcgY29u
Y2F0ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK1N0cmluZyBjb25zdW1l
RmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlE
PiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25h
bDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVu
aXRsZXNzUXVpcms6OkZvcmJpZCk7CitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGlu
ZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitPcHRpb25h
bDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1BhcnNlck1vZGUpOworY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFs
dWVJRChDU1NWYWx1ZUlEKTsKKwogLy8gVGVtcGxhdGUgaW1wbGVtZW50YXRpb25zIGFyZSBhdCB0
aGUgYm90dG9tIG9mIHRoZSBmaWxlIGZvciByZWFkYWJpbGl0eS4KIAogdGVtcGxhdGU8dHlwZW5h
bWUuLi4gZW1wdHlCYXNlQ2FzZT4gaW5saW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQp
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMjMsNiArMTcyLDEzIEBAIHRlbXBsYXRlPENTU1ZhbHVl
SUQgaGVhZCwgQ1NTVmFsdWVJRC4uLiB0YWlsPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NT
VmFsdWVJCiAgICAgcmV0dXJuIGlkID09IGhlYWQgfHwgaWRlbnRNYXRjaGVzPHRhaWwuLi4+KGlk
KTsKIH0KIAordGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBuYW1lcz4gT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlm
IChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1l
cy4uLj4ocmFuZ2UucGVlaygpLmlkKCkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7Cit9CisK
IHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5n
ZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1lcy4uLj4o
cmFuZ2UucGVlaygpLmlkKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggMjgzNjRhZmExYTc2YTVkZThh
ZTY0ZWYzODZiMjUyYzZhYzZlNjBhNi4uNzNjMjhkMzhhOTgxYjZmYTc5ODYyMjI0NDU4ZWQ0OTk1
NWM0MjczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0zNiwxNiArMzYsMjEgQEAKICNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhdGgyRC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
Rm9yRm9udFJhdy5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMTM0LDE2ICsxMzks
MTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5n
JiBuZXdGb250KQogICAgIGlmIChuZXdGb250ID09IHN0YXRlKCkudW5wYXJzZWRGb250ICYmIHN0
YXRlKCkuZm9udC5yZWFsaXplZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHBhcnNl
ZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLCBDU1NQcm9wZXJ0eUZvbnQsIG5ld0ZvbnQsIHRydWUs
IHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkp
OwotICAgIGlmIChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgZm9udFZhbHVlID0gcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJv
cGVydHlGb250KTsKLQogICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vbGlzdHMudzMub3JnL0Fy
Y2hpdmVzL1B1YmxpYy9wdWJsaWMtaHRtbC8yMDA5SnVsLzA5NDcuaHRtbCwKLSAgICAvLyB0aGUg
ImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdub3JlZC4KLSAgICBpZiAo
Zm9udFZhbHVlID09ICJpbmhlcml0IiB8fCBmb250VmFsdWUgPT0gImluaXRpYWwiKQorICAgIC8v
IHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLiBwYXJz
ZUZvbnRXb3JrZXJTYWZlKCkgaWdub3JlcyB0aGVzZS4KKyAgICBhdXRvIGZvbnRSYXcgPSBDU1NQ
YXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUobmV3Rm9udCwgc3RyaWN0VG9DU1NQYXJzZXJNb2Rl
KCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CisgICAgaWYgKCFmb250UmF3KQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFyc2Ugc3VjY2VlZGVkLgpAQCAtMTUzLDM4
ICsxNTIsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3Qg
U3RyaW5nJiBuZXdGb250KQogCiAgICAgLy8gTWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8gdGhl
IHRleHQgc3R5bGUuIElmIHRoZSBmb250IHVzZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21hbGxl
ciwgdGhlc2Ugd2lsbCB3b3JrCiAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KLSAgICBh
dXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigpOwotCiAgICAgRG9jdW1lbnQm
IGRvY3VtZW50ID0gY2FudmFzKCkuZG9jdW1lbnQoKTsKICAgICBkb2N1bWVudC51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CiAKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IGNhbnZhcygpLmNvbXB1dGVkU3R5bGUo
KSkKLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIHsgY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgfSk7CisgICAgICAgIGZv
bnREZXNjcmlwdGlvbiA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKSB9OwogICAgIGVsc2UgewotICAgICAgICBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247Ci0gICAgICAgIGRlZmF1bHRGb250RGVzY3Jp
cHRpb24uc2V0T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKLSAgICAgICAgZGVmYXVsdEZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKERlZmF1bHRGb250U2l6ZSk7Ci0gICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6ZSk7
Ci0KLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlZmF1bHRG
b250RGVzY3JpcHRpb24pKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShE
ZWZhdWx0Rm9udEZhbWlseSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKERlZmF1bHRGb250U2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9udENhc2Nh
ZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLQotICAgIC8vIE5vdyBtYXAg
dGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgotCi0gICAgU3R5bGU6
Ok1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIGF1dG8gcGFyZW50U3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoKm5ld1N0eWxlKTsKLSAgICBTdHlsZTo6QnVpbGRlciBzdHlsZUJ1aWxkZXIo
Km5ld1N0eWxlLCB7IGRvY3VtZW50LCBwYXJlbnRTdHlsZSB9LCBtYXRjaFJlc3VsdCwgeyB9KTsK
LQotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFt
aWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1p
bHkpLmdldCgpKTsKLSAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVy
LmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwotICAgIHN0
eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2Vk
U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOwot
ICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQp
LmdldCgpKTsKLQotICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVu
dC5mb250U2VsZWN0b3IoKSwgKm5ld1N0eWxlKTsKKyAgICBpZiAoYXV0byBmb250U3R5bGUgPSBT
dHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcoKmZvbnRSYXcsIFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSwgZG9jdW1lbnQpKQorICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUo
ZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpmb250U3R5bGUpOwogfQogCiBzdGF0aWMgQ2FudmFz
VGV4dEFsaWduIHRvQ2FudmFzVGV4dEFsaWduKFRleHRBbGlnbiB0ZXh0QWxpZ24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IGU2NjZkZTI4MzEzYzBiZjk4
OGQ0MWYzYzA0OTEzYzQ4MmU0N2E0OTcuLmExYTcyYWI3NGUyYzhiOTBhZTJjYjU4ZjE4NDFjOTlj
MWFjMGZkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1
c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
R3JhZGllbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NSZWdp
c3RlcmVkQ3VzdG9tUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNvdW50ZXIuaCIKQEAgLTEwMTIsNDAgKzEwMTMsMTEgQEAgaW5saW5lIHZvaWQgQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUsIENTU1YKICAgICAgICAgICAgIC8vIElmIHRoZSBmYW1pbHkgbmFtZSB3YXMgcmVzb2x2ZWQg
YnkgdGhlIENTUyBwYXJzZXIgZnJvbSBhIHN5c3RlbSBmb250IElELCB0aGVuIGl0IGlzIGdlbmVy
aWMuCiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBmb250RmFtaWx5LmZyb21TeXN0ZW1G
b250SUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1
ZS52YWx1ZUlEKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgorICAg
ICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRCb2R5
KQogICAgICAgICAgICAgICAgIGZhbWlseSA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnNldHRp
bmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc2Vy
aWZGYW1pbHk7CisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpc0dlbmVyaWNG
YW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzYW5zU2VyaWZGYW1p
bHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IGN1cnNpdmVGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmlj
RmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVGYW50YXN5OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbnRhc3lGYW1pbHk7
Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0gICAgICAgICAg
ICAgICAgZmFtaWx5ID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJp
Y0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBwaWN0
b2dyYXBoRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3lzdGVtVWk6
Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc3lzdGVtVWlGYW1pbHk7Ci0gICAgICAgICAgICAg
ICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZmFtaWx5ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUZyb21W
YWx1ZUlEKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGZhNTA4MjYwZWFhMjE5MzAwZjA5MmIwY2FjMWViOWUxMGQ2ZDhiNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxl
Y3Rvci5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM7CisKK09wdGlvbmFsPFJlbmRlclN0eWxlPiBy
ZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb250UmF3JiBmb250UmF3LCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiYgZm9udERlc2NyaXB0aW9uLCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgYXV0
byBmb250U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisKKyAgICBhdXRvIGdldFBhcmVu
dFN0eWxlID0gWyZdICgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4geworICAgICAg
ICBhdXRvIHBhcmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKGZvbnRTdHlsZSk7Cisg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pKTsKKyAgICAgICAgcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRl
KCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisgICAgICAgIHJldHVybiBwYXJl
bnRTdHlsZTsKKyAgICB9OworCisgICAgLy8gTWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5k
cyBpbnRvIHRoZSBzdHlsZS4KKyAgICBmbG9hdCBwYXJlbnRTaXplID0gZm9udERlc2NyaXB0aW9u
LnNwZWNpZmllZFNpemUoKTsKKworICAgIC8vIEZvbnQgZmFtaWx5IGFwcGxpZWQgaW4gdGhlIHNh
bWUgd2F5IGFzIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkKKyAgICAv
LyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxk
IHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KKyAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERl
ZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKKworICAg
IFZlY3RvcjxBdG9tU3RyaW5nPiBmYW1pbGllczsKKyAgICBmYW1pbGllcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGZvbnRSYXcuZmFtaWx5LnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBmb250UmF3LmZhbWlseSkgeworICAgICAgICBBdG9tU3RyaW5nIGZhbWlseTsKKyAgICAgICAg
Ym9vbCBpc0dlbmVyaWNGYW1pbHkgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZd
IChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVu
dCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7CisgICAgICAgICAgICBmYW1pbHkgPSBpc0dlbmVyaWNG
YW1pbHkgPyBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZh
bHVlSUQoaWRlbnQpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5k
YXJkRm9udEZhbWlseSgpOworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5U3Ry
aW5nKSB7CisgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlTdHJpbmc7CisgICAgICAgIH0pOwor
CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNTcGVjaWZpZWRGb250KCFpc0dlbmVyaWNGYW1pbHkpOworICAgICAgICBmYW1pbGll
cy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5KTsKKyAgICB9CisKKyAgICBpZiAoZmFtaWxpZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbGllcyhmYW1pbGllcyk7CisKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLnVzZUZp
eGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkgeworICAg
ICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICBhdXRvIHNpemUgPSBTdHlsZTo6
Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVm
YXVsdFNpemUsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKHNpemUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmYWxzZSwgJmZvbnRTdHlsZSwgZG9jdW1lbnQp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvbnQgc3R5bGUgYXBwbGllZCBpbiB0aGUg
c2FtZSB3YXkgYXMgQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTdHlsZUZyb21WYWx1ZQor
ICAgIGlmIChmb250UmF3LnN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9udFJhdy5zdHlsZS0+
c3R5bGUpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXRhbGljKGl0YWxpY1ZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9ibGlxdWU6IHsKKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZXM7
CisgICAgICAgICAgICBpZiAoZm9udFJhdy5zdHlsZS0+YW5nbGUpCisgICAgICAgICAgICAgICAg
ZGVncmVlcyA9IHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURl
Z3JlZXMoZm9udFJhdy5zdHlsZS0+YW5nbGUtPnR5cGUsIGZvbnRSYXcuc3R5bGUtPmFuZ2xlLT52
YWx1ZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlZ3JlZXMgPSAwOwor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250U2VsZWN0aW9uVmFsdWUo
ZGVncmVlcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhp
cygoZm9udFJhdy5zdHlsZSAmJiBmb250UmF3LnN0eWxlLT5zdHlsZSA9PSBDU1NWYWx1ZUl0YWxp
YykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6c2xudCk7CisKKyAgICBp
ZiAoZm9udFJhdy52YXJpYW50Q2FwcykgeworICAgICAgICBzd2l0Y2ggKCpmb250UmF3LnZhcmlh
bnRDYXBzKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpTbWFs
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2Fw
czoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFu
dENhcHM6OkFsbFNtYWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2Fw
cyhGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRpdGxpbmdDYXBzOgorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VGl0
bGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZm9udFJhdy53ZWlnaHQpIHsKKyAgICAgICAgYXV0byB3ZWlnaHQgPSBz
d2l0Y2hPbigqZm9udFJhdy53ZWlnaHQsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgeworICAgICAg
ICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsV2VpZ2h0VmFsdWUoKTsKKyAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVCb2xkOgorICAgICAgICAgICAgICAgIHJldHVybiBib2xkV2VpZ2h0VmFs
dWUoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb2xkZXI6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodChmb250RGVzY3JpcHRp
b24ud2VpZ2h0KCkpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpZ2h0ZXI6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQoZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1h
bFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIFsmXSAoZG91YmxlIHdl
aWdodCkgeworICAgICAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZTo6Y2xhbXBGbG9h
dCh3ZWlnaHQpOworICAgICAgICB9KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdo
dCh3ZWlnaHQpOworICAgIH0KKworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZy
b21JZGVudGlmaWVyKENTU1ZhbHVlSW52YWxpZCk7CisgICAgZmxvYXQgc2l6ZSA9IHN3aXRjaE9u
KGZvbnRSYXcuc2l6ZSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgIHN3aXRjaCAo
aWRlbnQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVYU21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZU1lZGl1bToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgorICAgICAgICBjYXNl
IENTU1ZhbHVlWExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQpOworICAgICAgICAgICAgcmV0dXJu
IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhl
ZERlZmF1bHRTaXplKCksIGRvY3VtZW50KTsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoK
KyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4yZjsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZVNtYWxsZXI6CisgICAgICAgICAgICByZXR1cm4gcGFyZW50U2l6ZSAvIDEuMmY7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMC5mOworICAgICAgICB9CisgICAgfSwg
WyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYg
bGVuZ3RoT3JQZXJjZW50KSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNl
bnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0
aCkgeworICAgICAgICAgICAgYXV0byBwYXJlbnRTdHlsZSA9IGdldFBhcmVudFN0eWxlKCk7Cisg
ICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhIHsgcGFy
ZW50U3R5bGUuZ2V0KCksIG51bGxwdHIsIHBhcmVudFN0eWxlLmdldCgpLCBkb2N1bWVudC5yZW5k
ZXJWaWV3KCksIDEuMGYsIENTU1Byb3BlcnR5Rm9udFNpemUgfTsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVu
Z3RoRG91YmxlKGNvbnZlcnNpb25EYXRhLCBsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlKSk7Cisg
ICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC4wKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CisgICAgfQorCisgICAgaWYgKGZvbnRSYXcubGluZUhl
aWdodCkgeworICAgICAgICBPcHRpb25hbDxMZW5ndGg+IGxpbmVIZWlnaHQgPSBzd2l0Y2hPbigq
Zm9udFJhdy5saW5lSGVpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAg
IGlmIChpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0
aW9uYWw8TGVuZ3RoPihSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihXVEY6Om51bGxvcHQpOworICAgICAgICB9LCBb
Jl0gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxMZW5ndGg+
KExlbmd0aChudW1iZXIgKiAxMDAuMCwgUGVyY2VudCkpOworICAgICAgICB9LCBbJl0gKGNvbnN0
IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBl
cmNlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsm
XSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50U3R5bGUgPSBnZXRQYXJlbnRTdHlsZSgpOworICAg
ICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBw
YXJlbnRTdHlsZS5nZXQoKSwgbnVsbHB0ciwgcGFyZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJl
bmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0IH07CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1p
dGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSwgbGVu
Z3RoLnR5cGUsIGxlbmd0aC52YWx1ZSksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZv
ckNzc0xlbmd0aCksIEZpeGVkKSk7CisgICAgICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50
YWdlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKChm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHBlcmNlbnRh
Z2UpKSAvIDEwMCwgRml4ZWQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAg
ICAgICBpZiAobGluZUhlaWdodCkKKyAgICAgICAgICAgIGZvbnRTdHlsZS5zZXRMaW5lSGVpZ2h0
KFdURk1vdmUobGluZUhlaWdodC52YWx1ZSgpKSk7CisgICAgfQorCisgICAgZm9udFN0eWxlLnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGZvbnRTdHls
ZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworCisgICAg
cmV0dXJuIGZvbnRTdHlsZTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRm9udFJhdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMTBhNTAzNWQyZDk2M2ZlYThlZWI2
NjRiZGE5YmI2ODk1MmM2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCituYW1lc3BhY2UgQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCituYW1lc3BhY2Ug
U3R5bGUgeworCitPcHRpb25hbDxSZW5kZXJTdHlsZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3Qg
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3JiwgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYmLCBEb2N1bWVudCYpOworCit9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414446</attachid>
            <date>2020-11-18 07:08:12 -0800</date>
            <delta_ts>2020-11-18 08:04:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202794-20201118150811.patch</filename>
            <type>text/plain</type>
            <size>64665</size>
            <attacher name="Chris Lord">clord</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5OTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ1YWYwMTI5ZmJmMGIy
ZWFkNGMzZGU4MzQ4MWZlYmI1NWFlZjhjMy4uYTIzNmIzMmYxOTcxMGEwYzA5YjI0ZmY5YWFlZGRj
NjI2ZDY4NWUzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDIwLTEwLTE1ICBDaHJp
cyBMb3JkICA8Y2xvcmRAaWdhbGlhLmNvbT4KKworICAgICAgICBNYWtlIENTUyBmb250IHNob3J0
aGFuZHMgcGFyc2FibGUgd2l0aGluIGEgd29ya2VyIChpLmUuIHdpdGhvdXQgQ1NTVmFsdWVQb29s
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNzk0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkIGZ1bmN0
aW9ucyB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHBhcnNlIENTUyBmb250IHNob3J0aGFuZAorICAg
ICAgICBwcm9wZXJ0aWVzIHdpdGhvdXQgdXNpbmcgQ1NTIHZhbHVlcywgc28gaXQgY2FuIGJlIGRv
bmUgc2FmZWx5IG9mZiBvZgorICAgICAgICB0aGUgbWFpbiB0aHJlYWQuIFRvIHN1cHBvcnQgYW5k
IHRlc3QgdGhpcywgYWxzbyBhZGQgZnVuY3Rpb25zIHRvIG1ha2UKKyAgICAgICAgaXQgcG9zc2li
bGUgdG8gcmVzb2x2ZSB0aG9zZSBwcm9wZXJ0aWVzIGludG8gYSBzdHlsZSB3aXRob3V0CisgICAg
ICAgIFN0eWxlQnVpbGRlciBhbmQgdXNlIHRoYXQgd2l0aGluIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRXb3JrZXJTYWZlKToKKyAgICAgICAg
KiBjc3MvcGFyc2VyL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVy
dHlQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRXZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3VtZUZvbnRTdHJldGNoS2V5d29yZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3VtZUZh
bWlseU5hbWUpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoKKyAg
ICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVQ
ZXJjZW50UmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Q2FsY1BhcnNlcjo6Y29uc3VtZUFuZ2xlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3Bl
cnR5UGFyc2VySGVscGVyczo6Q2FsY1BhcnNlcjo6Y29uc3VtZUxlbmd0aFJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkNhbGNQYXJzZXI6OmNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzOjpjb25zdW1lTnVtYmVyUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5
UGFyc2VySGVscGVyczo6Y29uc3VtZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHROdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
TGVuZ3RoUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnM6OmNvbnN1bWVQZXJjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVyczo6Y29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVMZW5ndGhPclBlcmNlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lQW5nbGVSYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRS
YXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1l
SWRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25z
dW1lSWRlbnRSYW5nZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnM6OmNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZvbnRXZWlnaHRLZXl3b3JkVmFsdWVSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9u
dFdlaWdodFJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6
OmNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250U3R5bGVLZXl3b3JkVmFsdWVSYXcp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lRm9u
dFN0eWxlUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uY2F0ZW5hdGVGYW1pbHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFy
c2VySGVscGVyczo6Y29uc3VtZUZhbWlseU5hbWVSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmNvbnN1bWVGb250RmFtaWx5UmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6Y29uc3VtZUZv
bnRTaXplUmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6
Y29uc3VtZUxpbmVIZWlnaHRSYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpjb25zdW1lRm9udFdvcmtlclNhZmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUZyb21WYWx1ZUlEKToKKyAg
ICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpjb25zdW1lSWRlbnRSYXcpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAq
IHN0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KToKKyAgICAgICAgKiBzdHlsZS9TdHls
ZVJlc29sdmVGb3JGb250UmF3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
cmVzb2x2ZUZvckZvbnRSYXcpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuaDogQWRkZWQuCisKIDIwMjAtMTEtMTggIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2OTQzNSk6IFtEZWJ1Z11bR1N0cmVh
bWVyXSBTZXZlcmFsIHRlc3RzIGFyZSBjcmFzaGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA5NmJmZDU1
YjE0NTA2MjMwMGEyMzVjOWNlMmIzNGYwMzllOWEwZThlLi5kYThjODI5OGI4MDBkNzY0M2Y2MzY1
YzZkOWY4YTMxZDAyNDQ1ZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQyNyw2ICsyNDI3LDcgQEAg
c3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKIHN0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5j
cHAKIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogc3R5bGUvU3R5bGVSZXNvbHZlRm9yRG9jdW1l
bnQuY3BwCitzdHlsZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcAogc3R5bGUvU3R5bGVSZXNv
bHZlci5jcHAKIHN0eWxlL1N0eWxlU2NvcGUuY3BwCiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggZTNmNjE1NTM4NzlhNjZiMjA3MzQ3YjEzNDg4ZWUyMTBhNzFjYmZkOC4uNzBlNDI2
NjlkMzlmMTc2NzhlNjRkYWYzNTI2ODY1NTVhZmEyZDAxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTEzNiw2ICs1MTM2LDcg
QEAKIAkJRTREMzNGNDQyNTJDNTBFMjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTGVnYWN5UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTREMzNGNDMyNTJDNTBFMjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGlu
ZUl0ZXJhdG9yTGVnYWN5UGF0aC5oICovOyB9OwogCQlFNEQzM0Y0NjI1MkM1MEZDMDA4MzdEMDUg
LyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0Y0NTI1MkM1MEZCMDA4MzdE
MDUgLyogTGF5b3V0SW50ZWdyYXRpb25MaW5lSXRlcmF0b3JNb2Rlcm5QYXRoLmggKi87IH07CiAJ
CUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjMxN0I0
REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi87IH07CisJCUU0RDY4
RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ2OEVCMzE3QjREQkRDMDBD
QkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICovOyB9OwogCQlFNEQ1OEVCOTE3QjRF
RDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENThFQjcxN0I0RUQ4OTAwQ0JEQ0E4IC8q
IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLzsgfTsKIAkJRTRENThFQkIxN0I4RjEyODAwQ0JE
Q0E4IC8qIEVsZW1lbnRUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RDU4RUJBMTdCOEYxMjgwMENCRENBOCAvKiBFbGVtZW50VHJhdmVy
c2FsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RTREOTg4QjQxN0JGRDFGNjAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ5ODhCMzE3QkZEMUY2MDA4
NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuaCAqLzsgfTsKQEAgLTE2Mjg2LDYgKzE2Mjg3LDgg
QEAKIAkJRTREMzNGNDUyNTJDNTBGQjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9uTGluZUl0
ZXJhdG9yTW9kZXJuUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXlv
dXRJbnRlZ3JhdGlvbkxpbmVJdGVyYXRvck1vZGVyblBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTRENThFQjIxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRv
Y3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUmVz
b2x2ZUZvckRvY3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRENThF
QjMxN0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDY4RUIyMTdCNERCREMwMENCRENBOCAvKiBTdHls
ZVJlc29sdmVGb3JGb250UmF3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFNEQ2OEVCMzE3QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlc29sdmVGb3JGb250UmF3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUI2MTdCNEVEODkwMENCRENB
OCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEQ1OEVCNzE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUZvbnRTaXpl
RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RDU4RUJBMTdCOEYx
MjgwMENCRENBOCAvKiBFbGVtZW50VHJhdmVyc2FsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVsZW1lbnRUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI4ODY3LDYgKzI4ODcwLDggQEAKIAkJCQlFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMgLyog
U3R5bGVSZWxhdGlvbnMuaCAqLywKIAkJCQlFNEQ1OEVCMjE3QjREQkRDMDBDQkRDQTggLyogU3R5
bGVSZXNvbHZlRm9yRG9jdW1lbnQuY3BwICovLAogCQkJCUU0RDU4RUIzMTdCNERCREMwMENCRENB
OCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oICovLAorCQkJCUU0RDY4RUIyMTdCNERCREMw
MENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JGb250UmF3LmNwcCAqLywKKwkJCQlFNEQ2OEVCMzE3
QjREQkRDMDBDQkRDQTggLyogU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oICovLAogCQkJCUUxMzk4
NjYxMTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmNwcCAqLywKIAkJCQlFMTM5ODY2
MjE1NDc4NDc0MDAxRTNGNjUgLyogU3R5bGVSZXNvbHZlci5oICovLAogCQkJCUU0NjFENjVDMUJC
MEM3RjAwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmNwcCAqLywKQEAgLTM0NTE4LDYgKzM0NTIzLDcg
QEAKIAkJCQlCQzIyNzI4NzBFODJFNzA3MDBFN0Y5NzUgLyogU3R5bGVSZWZsZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0RDU4RUI1MTdCNERCREMwMENCRENBOCAvKiBTdHls
ZVJlc29sdmVGb3JEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRENjhFQjUxN0I0REJE
QzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxMzk4NjY0MTU0Nzg0NzQwMDFFM0Y2NSAvKiBTdHlsZVJlc29sdmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFNEJCRUQ0RDE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0Lmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRl
eCA5M2FiZjBkY2FiNzBjZDEzMWRlYjExNzBiMzIxMDk1NDg4N2RlZjFjLi40NDEyYWViYjg3OGVi
NDk1MzY1OWE5YWEwYmU1ZDYzZmRhNjgzZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuY3BwCkBAIC0xMzgsNiArMTM4LDE1IEBAIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+
PiBDU1NQYXJzZXI6OnBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyBzdHJpbmcpCiAgICAgcmV0dXJu
IENTU1BhcnNlckZhc3RQYXRoczo6cGFyc2VIZXhDb2xvcihzdHJpbmcpOwogfQogCitPcHRpb25h
bDxDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OkZvbnRSYXc+IENTU1BhcnNlcjo6cGFyc2VGb250
V29ya2VyU2FmZShjb25zdCBTdHJpbmcmIHN0cmluZywgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJN
b2RlKQoreworICAgIENTU1Rva2VuaXplciB0b2tlbml6ZXIoc3RyaW5nKTsKKyAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIHJhbmdlKHRva2VuaXplci50b2tlblJhbmdlKCkpOworICAgIHJhbmdlLmNv
bnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
Ojpjb25zdW1lRm9udFdvcmtlclNhZmUocmFuZ2UsIGNzc1BhcnNlck1vZGUpOworfQorCiBSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUGFyc2VyLmgKaW5kZXggYmExMjZlNWJiNzBjMWY5ODlhZDEwNmYzOTc4N2M5YWUwNzU1
Mzg0Mi4uY2JlMGM1YzgxNWU3MWU3ZTQ3MzQ1ODlhZjE5YTAxNWJhMDkzMWM5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBAIC00NCw2ICs0NCwxMCBAQCBjbGFzcyBTdHls
ZVNoZWV0Q29udGVudHM7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgU1JHQkE7CiAKK25hbWVzcGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMgeworc3Ry
dWN0IEZvbnRSYXc7Cit9CisKIG5hbWVzcGFjZSBTdHlsZSB7CiBjbGFzcyBCdWlsZGVyU3RhdGU7
CiB9CkBAIC05Miw2ICs5Niw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8
dWludDhfdD4+IHBhcnNlTmFtZWRDb2xvcihTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgT3B0aW9u
YWw8U1JHQkE8dWludDhfdD4+IHBhcnNlSGV4Q29sb3IoU3RyaW5nVmlldyk7CiAKKyAgICBzdGF0
aWMgT3B0aW9uYWw8Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3PiBwYXJzZUZvbnRX
b3JrZXJTYWZlKGNvbnN0IFN0cmluZyYsIENTU1BhcnNlck1vZGUgPSBIVE1MU3RhbmRhcmRNb2Rl
KTsKKwogcHJpdmF0ZToKICAgICBQYXJzZVJlc3VsdCBwYXJzZVZhbHVlKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMmLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAK
aW5kZXggNWQ0YTcwNTVkYmViMTAwZDA3NzgxMTY2N2Y3YWVhZmNlYjNmMmIyOC4uNmRkNmQ3Mzk4
YjdmY2ZhZDFiYmNkYTMyYWViZWMwNzdjOGY5Y2MwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNs
dWRlICJDU1NQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJDU1NQZW5kaW5nU3Vic3RpdHV0aW9u
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5jbHVk
ZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NUaW1pbmdGdW5j
dGlvblZhbHVlLmgiCkBAIC04NjQsMTYgKzg2MywxNiBAQCBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFZhcmlhbnRDU1MyMShDU1NQYXJzZXJUb2tlblJhbmdlJiBy
YQogICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlU21hbGxD
YXBzPihyYW5nZSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQotewot
ICAgIHJldHVybiBjb25zdW1lSWRlbnQ8Q1NTVmFsdWVOb3JtYWwsIENTU1ZhbHVlQm9sZCwgQ1NT
VmFsdWVCb2xkZXIsIENTU1ZhbHVlTGlnaHRlcj4ocmFuZ2UpOwotfQotCiBzdGF0aWMgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodChDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSkKIHsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1lRm9udFdlaWdodEtleXdv
cmRWYWx1ZShyYW5nZSkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgcmV0dXJuIGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKHJhbmdlKTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb25zdW1l
Rm9udFdlaWdodFJhdyhyYW5nZSkpIHsKKyAgICAgICAgcmV0dXJuIHN3aXRjaE9uKCpyZXN1bHQs
IFtdIChDU1NWYWx1ZUlEIHZhbHVlSUQpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUlEKTsKKyAgICAgICAg
fSwgW10gKGRvdWJsZSB3ZWlnaHROdW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBDU1NWYWx1
ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKHdlaWdodE51bWJlciwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKIHN0YXRpYyBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0QWJz
b2x1dGVLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCkBAIC05MTAsNyAr
OTA5LDkgQEAgc3RhdGljIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUZvbnRXZWln
aHRBYnNvbHV0ZShDU1NQYXJzZXJUb2tlblJhbmdlJgogCiBzdGF0aWMgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjb25zdW1lRm9udFN0cmV0Y2hLZXl3b3JkVmFsdWUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbnN1bWVJZGVudDxDU1NWYWx1ZVVsdHJhQ29u
ZGVuc2VkLCBDU1NWYWx1ZUV4dHJhQ29uZGVuc2VkLCBDU1NWYWx1ZUNvbmRlbnNlZCwgQ1NTVmFs
dWVTZW1pQ29uZGVuc2VkLCBDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTZW1pRXhwYW5kZWQsIENT
U1ZhbHVlRXhwYW5kZWQsIENTU1ZhbHVlRXh0cmFFeHBhbmRlZCwgQ1NTVmFsdWVVbHRyYUV4cGFu
ZGVkPihyYW5nZSk7CisgICAgaWYgKGF1dG8gdmFsdWVJRCA9IGNvbnN1bWVGb250U3RyZXRjaEtl
eXdvcmRWYWx1ZVJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqdmFsdWVJRCk7CisgICAgcmV0dXJuIG51bGxw
dHI7CiB9CiAKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQpAQCAtOTY1LDI2ICs5NjYsMTYg
QEAgc3RhdGljIGJvb2wgZm9udFN0eWxlSXNXaXRoaW5SYW5nZShmbG9hdCBvYmxpcXVlKQogCiBz
dGF0aWMgUmVmUHRyPENTU0ZvbnRTdHlsZVZhbHVlPiBjb25zdW1lRm9udFN0eWxlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCiB7Ci0gICAg
YXV0byByZXN1bHQgPSBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlKHJhbmdlKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHZhbHVlSUQg
PSByZXN1bHQtPnZhbHVlSUQoKTsKLSAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZU5vcm1hbCB8
fCB2YWx1ZUlEID09IENTU1ZhbHVlSXRhbGljKQotICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxl
VmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWx1ZUlEKSk7Ci0gICAgQVNTRVJUKHJlc3VsdC0+dmFsdWVJRCgpID09IENTU1ZhbHVl
T2JsaXF1ZSk7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZVJhdyhyYW5n
ZSwgY3NzUGFyc2VyTW9kZSkpIHsKICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIGlm
ICghcmFuZ2UuYXRFbmQoKSkgewotICAgICAgICBpZiAoYXV0byBhbmdsZSA9IGNvbnN1bWVBbmds
ZShyYW5nZSwgY3NzUGFyc2VyTW9kZSkpIHsKLSAgICAgICAgICAgIGlmIChmb250U3R5bGVJc1dp
dGhpblJhbmdlKGFuZ2xlLT52YWx1ZTxmbG9hdD4oQ1NTVW5pdFR5cGU6OkNTU19ERUcpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBv
b2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpLCBX
VEZNb3ZlKGFuZ2xlKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYg
KHJlc3VsdC0+c3R5bGUgPT0gQ1NTVmFsdWVPYmxpcXVlICYmIHJlc3VsdC0+YW5nbGUpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NGb250U3R5bGVWYWx1ZTo6Y3JlYXRlKENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT2JsaXF1ZSksCisgICAg
ICAgICAgICAgICAgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQt
PmFuZ2xlLT52YWx1ZSwgcmVzdWx0LT5hbmdsZS0+dHlwZSkpOwogICAgICAgICB9Ci0gICAgfQot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CiAjZW5kaWYKLSAgICByZXR1
cm4gQ1NTRm9udFN0eWxlVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU9ibGlxdWUpKTsKKyAgICAgICAgcmV0dXJuIENT
U0ZvbnRTdHlsZVZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUocmVzdWx0LT5zdHlsZSkpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCkBAIC0xMDE4LDMwICsxMDA5LDkg
QEAgc3RhdGljIFJlZlB0cjxDU1NGb250U3R5bGVSYW5nZVZhbHVlPiBjb25zdW1lRm9udFN0eWxl
UmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYKIH0KICNlbmRpZgogCi1zdGF0aWMgU3RyaW5nIGNv
bmNhdGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKLXsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7Ci0gICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7Ci0gICAgd2hp
bGUgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgewotICAgICAgICBpZiAoIWJ1
aWxkZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAg
ICAgICAgICAgYWRkZWRTcGFjZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci5h
cHBlbmQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsKLSAgICB9
Ci0gICAgaWYgKCFhZGRlZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tlbi5pZCgp
KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7Ci19Ci0KIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGYW1pbHlOYW1lKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpID09
IFN0cmluZ1Rva2VuKQotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5j
cmVhdGVGb250RmFtaWx5VmFsdWUocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52
YWx1ZSgpLnRvU3RyaW5nKCkpOwotICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFN0cmluZyBmYW1pbHlOYW1lID0g
Y29uY2F0ZW5hdGVGYW1pbHlOYW1lKHJhbmdlKTsKKyAgICBhdXRvIGZhbWlseU5hbWUgPSBjb25z
dW1lRmFtaWx5TmFtZVJhdyhyYW5nZSk7CiAgICAgaWYgKGZhbWlseU5hbWUuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZShmYW1pbHlOYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCBiN2UxOWZiZDY0YTc4YzBmN2Q1
OWM3MTQ4N2Q3OTY2ZTdhMGIwOTllLi5jZjNkOWMxYmE5YmI3ZDljZGZiZTNhMTU4OTEzODcxMjQw
YjExMzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ci5oCkBAIC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU1BhcnNl
clRva2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNp
bmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcAppbmRleCBkY2RjM2ZiNjdkZWExMjViNWQzYzJkMWIyYWU3YWM4MTk5MjFiZjBm
Li5jZjM0NWMyMGRmMjNlMjNlZThmNDNjYTNhNTJlMGQ0MDJmYzg0MWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3Bw
CkBAIC0xMzAsMTMgKzEzMCwxNiBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25hbDxkb3VibGU+IGNv
bnN1bWVQZXJjZW50UmF3KCkKICAgICB7Ci0gICAgICAgIGlmICghbV9jYWxjVmFsdWUgfHwgbV9j
YWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCkKKyAg
ICAgICAgaWYgKCFtX2NhbGNWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKTsKKyAgICAg
ICAgaWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBtX3NvdXJjZVJhbmdlID0gbV9yYW5n
ZTsKICAgICAgICAgcmV0dXJuIG1fY2FsY1ZhbHVlLT5kb3VibGVWYWx1ZSgpOwogICAgIH0KIAot
ICAgIE9wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoKQorICAgIE9wdGlvbmFsPEFuZ2xl
UmF3PiBjb25zdW1lQW5nbGVSYXcoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NhbGNWYWx1ZSB8
fCBtX2NhbGNWYWx1ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xNDQsNiArMTQ3LDMzIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHsgeyBtX2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBt
X2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9IH07CiAgICAgfQogCisgICAgT3B0aW9uYWw8TGVu
Z3RoUmF3PiBjb25zdW1lTGVuZ3RoUmF3KCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYWxjVmFs
dWUgfHwgbV9jYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgbV9zb3VyY2VS
YW5nZSA9IG1fcmFuZ2U7CisgICAgICAgIHJldHVybiB7IHsgbV9jYWxjVmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSwgbV9jYWxjVmFsdWUtPmRvdWJsZVZhbHVlKCkgfSB9OworICAgIH0KKworICAgIE9w
dGlvbmFsPExlbmd0aE9yUGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdygpCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FsY1ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgICAgICBzd2l0Y2ggKG1fY2FsY1ZhbHVlLT5jYXRlZ29yeSgpKSB7Cisg
ICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgICAgICAgICAgbV9z
b3VyY2VSYW5nZSA9IG1fcmFuZ2U7CisgICAgICAgICAgICByZXR1cm4geyBMZW5ndGhSYXcoeyBt
X2NhbGNWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpLCBtX2NhbGNWYWx1ZS0+ZG91YmxlVmFsdWUoKSB9
KSB9OworICAgICAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6CisgICAgICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKKyAgICAgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgICAgICAgICAgbV9zb3VyY2VS
YW5nZSA9IG1fcmFuZ2U7CisgICAgICAgICAgICByZXR1cm4geyB7IG1fY2FsY1ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpIH0gfTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgbV9zb3VyY2VSYW5nZTsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIG1fcmFuZ2U7
CkBAIC0xNzcsMTAgKzIwNywxMiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQ
b3NpdGl2ZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgcmV0dXJuIGNv
bnN1bWVJbnRlZ2VyKHJhbmdlLCAxKTsKIH0KIAotYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKK2Jvb2wgY29uc3VtZU51bWJl
clJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgZG91YmxlJiByZXN1bHQsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSkKIHsKICAgICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5n
ZS5wZWVrKCk7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbikgeworICAgICAg
ICBpZiAodmFsdWVSYW5nZSA9PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJp
Y1ZhbHVlKCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXN1bHQg
PSByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xODgsNyArMjIwLDcgQEAgYm9vbCBjb25zdW1l
TnVtYmVyUmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBkb3VibGUmIHJlc3VsdCkKICAg
ICBpZiAodG9rZW4udHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyLCBWYWx1ZVJhbmdlQWxsKTsKKyAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFu
Z2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7CiAgICAgcmV0dXJu
IGNhbGNQYXJzZXIuY29uc3VtZU51bWJlclJhdyhyZXN1bHQpOwogfQogCkBAIC0xOTYsMjIgKzIy
OCwxOSBAQCBib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGRvdWJsZSYgcmVzdWx0KQogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTnVtYmVy
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UpCiB7CiAg
ICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0
b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4pIHsKLSAgICAgICAgaWYgKHZhbHVlUmFuZ2UgPT0g
VmFsdWVSYW5nZU5vbk5lZ2F0aXZlICYmIHRva2VuLm51bWVyaWNWYWx1ZSgpIDwgMCkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51
bWVyaWNWYWx1ZSgpLCB0b2tlbi51bml0VHlwZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAodG9rZW4u
dHlwZSgpICE9IEZ1bmN0aW9uVG9rZW4pCisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBGdW5jdGlv
blRva2VuKSB7CisgICAgICAgIENhbGNQYXJzZXIgY2FsY1BhcnNlcihyYW5nZSwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyLCB2YWx1ZVJhbmdlKTsKKyAgICAgICAgaWYgKGNvbnN0IGF1dG8q
IGNhbGNWYWx1ZSA9IGNhbGNQYXJzZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKGNhbGNW
YWx1ZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2Us
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgdmFsdWVSYW5nZSk7Ci0gICAgaWYgKGNvbnN0
IENTU0NhbGNWYWx1ZSogY2FsY1ZhbHVlID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7Ci0gICAgICAg
IGlmIChjYWxjVmFsdWUtPmNhdGVnb3J5KCkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjYWxjUGFyc2Vy
LmNvbnN1bWVWYWx1ZSgpOwogICAgIH0KIAorICAgIGRvdWJsZSBudW1iZXI7CisgICAgaWYgKGNv
bnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwgdmFsdWVSYW5nZSkpCisgICAgICAgIHJldHVy
biBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVlKG51bWJlciwgdG9rZW4udW5p
dFR5cGUoKSk7CisKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMjIyLDcgKzI1MSw3IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBkaXZpc2libGVCeTEwMChkb3VibGUgdmFsdWUpCiB9CiAjZW5k
aWYKIAotUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lRm9udFdlaWdodE51bWJlcihD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK09wdGlvbmFsPGRvdWJsZT4gY29uc3VtZUZvbnRX
ZWlnaHROdW1iZXJSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gVmFs
dWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAx
MDAwIGFyZSBwYXJzZSBlcnJvcnMuCiAgICAgYXV0byYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CkBA
IC0yMzAsMTEgKzI1OSwxNSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVGb250
V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2lmICFFTkFCTEUoVkFS
SUFUSU9OX0ZPTlRTKQogICAgICAgICAmJiB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50
ZWdlclZhbHVlVHlwZSAmJiBkaXZpc2libGVCeTEwMCh0b2tlbi5udW1lcmljVmFsdWUoKSkKICNl
bmRpZgotICAgICkKLSAgICAgICAgcmV0dXJuIGNvbnN1bWVOdW1iZXIocmFuZ2UsIFZhbHVlUmFu
Z2VBbGwpOworICAgICkgeworICAgICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICBpZiAoY29u
c3VtZU51bWJlclJhdyhyYW5nZSwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQogCiAgICAgaWYgKHRva2VuLnR5
cGUoKSAhPSBGdW5jdGlvblRva2VuKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vICJbRm9yIGNhbGMoKV0sIHRoZSB1c2VkIHZh
bHVlIHJlc3VsdGluZyBmcm9tIGFuIGV4cHJlc3Npb24gbXVzdCBiZSBjbGFtcGVkIHRvIHRoZSBy
YW5nZSBhbGxvd2VkIGluIHRoZSB0YXJnZXQgY29udGV4dC4iCiAgICAgQ2FsY1BhcnNlciBjYWxj
UGFyc2VyKHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIFZhbHVlUmFuZ2VBbGwp
OwpAQCAtMjQ1LDkgKzI3OCwxNiBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVG
b250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogI2VuZGlmCiAgICAg
KSB7CiAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJlc3VsdCwgc3RkOjpuZXh0
YWZ0ZXIoMC4sIDEuKSksIHN0ZDo6bmV4dGFmdGVyKDEwMDAuLCAwLikpOwotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyZXN1bHQsIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1
bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlm
IChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAg
ICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoKnJlc3VsdCwg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0y
NTksMTQgKzI5OSwxNCBAQCBpbmxpbmUgYm9vbCBzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVlKGRv
dWJsZSB2YWx1ZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLAogICAgICAgICB8fCAoY3Nz
UGFyc2VyTW9kZSA9PSBIVE1MUXVpcmtzTW9kZSAmJiB1bml0bGVzcyA9PSBVbml0bGVzc1F1aXJr
OjpBbGxvdyk7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aChD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBW
YWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxM
ZW5ndGhSYXc+IGNvbnN1bWVMZW5ndGhSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENT
U1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlLCBVbml0bGVz
c1F1aXJrIHVuaXRsZXNzKQogewogICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbiA9IHJh
bmdlLnBlZWsoKTsKICAgICBpZiAodG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSB7CiAg
ICAgICAgIHN3aXRjaCAodG9rZW4udW5pdFR5cGUoKSkgewogICAgICAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUVVJUktZX0VNUzoKICAgICAgICAgICAgIGlmIChjc3NQYXJzZXJNb2RlICE9IFVB
U2hlZXRNb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAgICAg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKICAgICAgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1JFTVM6CkBAIC0yODcsMjggKzMyNywzOSBAQCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvbnN1bWVMZW5ndGgoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlck1vZAog
ICAgICAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGlmICgodmFsdWVSYW5nZSA9
PSBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUgJiYgdG9rZW4ubnVtZXJpY1ZhbHVlKCkgPCAwKSB8fCBz
dGQ6OmlzaW5mKHRva2VuLm51bWVyaWNWYWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB0b2tl
bi51bml0VHlwZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
IHJldHVybiB7IHsgdG9rZW4udW5pdFR5cGUoKSwgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKS5udW1lcmljVmFsdWUoKSB9IH07CiAgICAgfQogICAgIGlmICh0b2tlbi50eXBlKCkg
PT0gTnVtYmVyVG9rZW4pIHsKICAgICAgICAgaWYgKCFzaG91bGRBY2NlcHRVbml0bGVzc1ZhbHVl
KHRva2VuLm51bWVyaWNWYWx1ZSgpLCBjc3NQYXJzZXJNb2RlLCB1bml0bGVzcykKICAgICAgICAg
ICAgIHx8ICh2YWx1ZVJhbmdlID09IFZhbHVlUmFuZ2VOb25OZWdhdGl2ZSAmJiB0b2tlbi5udW1l
cmljVmFsdWUoKSA8IDApKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoc3RkOjppc2luZih0b2tlbi5udW1l
cmljVmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgQ1NTVW5p
dFR5cGUgdW5pdFR5cGUgPSBDU1NVbml0VHlwZTo6Q1NTX1BYOwotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1ZShyYW5nZS5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpLm51bWVyaWNWYWx1ZSgpLCB1bml0VHlwZSk7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4geyB7IENTU1VuaXRUeXBlOjpDU1NfUFgs
IHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCkubnVtZXJpY1ZhbHVlKCkgfSB9Owog
ICAgIH0KIAogICAgIGlmICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxj
UGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFs
dWVSYW5nZSk7Ci0gICAgaWYgKGNhbGNQYXJzZXIudmFsdWUoKSAmJiBjYWxjUGFyc2VyLnZhbHVl
KCktPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lVmFsdWUoKTsKKyAgICByZXR1cm4gY2FsY1BhcnNlci5j
b25zdW1lTGVuZ3RoUmF3KCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZUxlbmd0aChDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7
CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlm
ICh0b2tlbi50eXBlKCkgPT0gRnVuY3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNh
bGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7
CisgICAgICAgIGlmIChjYWxjUGFyc2VyLnZhbHVlKCkgJiYgY2FsY1BhcnNlci52YWx1ZSgpLT5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybiBjYWxjUGFyc2VyLmNvbnN1bWVWYWx1ZSgpOworICAgIH0KKworICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1vZGUsIHZhbHVlUmFuZ2Us
IHVuaXRsZXNzKSkKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3Jl
YXRlVmFsdWUocmVzdWx0LT52YWx1ZSwgcmVzdWx0LT50eXBlKTsKIAogICAgIHJldHVybiBudWxs
cHRyOwogfQpAQCAtMzMzLDcgKzM4NCw3IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29u
c3VtZVBlcmNlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIFZhbHVlUmFuZ2UKIHsKICAg
ICBjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4gPSByYW5nZS5wZWVrKCk7CiAgICAgaWYgKHRv
a2VuLnR5cGUoKSA9PSBGdW5jdGlvblRva2VuKSB7Ci0gICAgICAgIENhbGNQYXJzZXIgY2FsY1Bh
cnNlcihyYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsIHZhbHVlUmFuZ2UpOworICAg
ICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQsIHZhbHVlUmFuZ2UpOwogICAgICAgICBpZiAoY29uc3QgQ1NTQ2FsY1ZhbHVlKiBjYWxj
dWxhdGlvbiA9IGNhbGNQYXJzZXIudmFsdWUoKSkgewogICAgICAgICAgICAgaWYgKGNhbGN1bGF0
aW9uLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZhbHVlKCk7CkBAIC0zNjEsMjYgKzQx
Miw1NCBAQCBzdGF0aWMgYm9vbCBjYW5Db25zdW1lQ2FsY1ZhbHVlKENhbGN1bGF0aW9uQ2F0ZWdv
cnkgY2F0ZWdvcnksIENTU1BhcnNlck1vZGUgY3NzUAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFZhbHVlUmFu
Z2UgdmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayB1bml0bGVzcykKK09wdGlvbmFsPExlbmd0aE9y
UGVyY2VudFJhdz4gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhDU1NQYXJzZXJUb2tlblJhbmdl
JiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZhbHVlUmFu
Z2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4m
IHRva2VuID0gcmFuZ2UucGVlaygpOwotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9u
VG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKQotICAgICAgICByZXR1cm4gY29u
c3VtZUxlbmd0aChyYW5nZSwgY3NzUGFyc2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpOwot
ICAgIGlmICh0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFnZVRva2VuKQotICAgICAgICByZXR1cm4g
Y29uc3VtZVBlcmNlbnQocmFuZ2UsIHZhbHVlUmFuZ2UpOworICAgIGlmICh0b2tlbi50eXBlKCkg
PT0gRGltZW5zaW9uVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IE51bWJlclRva2VuKSB7CisgICAg
ICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVMZW5ndGhSYXcocmFuZ2UsIGNzc1BhcnNlck1v
ZGUsIHZhbHVlUmFuZ2UsIHVuaXRsZXNzKSkKKyAgICAgICAgICAgIHJldHVybiB7ICpyZXN1bHQg
fTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgaWYgKHRva2VuLnR5
cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4pIHsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29u
c3VtZVBlcmNlbnRSYXcocmFuZ2UsIHZhbHVlUmFuZ2UpKQorICAgICAgICAgICAgcmV0dXJuIHsg
KnJlc3VsdCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KIAogICAgIGlm
ICh0b2tlbi50eXBlKCkgIT0gRnVuY3Rpb25Ub2tlbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBDYWxjUGFyc2VyIGNhbGNQYXJz
ZXIocmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CiAgICAg
aWYgKGNvbnN0IENTU0NhbGNWYWx1ZSogY2FsY3VsYXRpb24gPSBjYWxjUGFyc2VyLnZhbHVlKCkp
IHsKICAgICAgICAgaWYgKGNhbkNvbnN1bWVDYWxjVmFsdWUoY2FsY3VsYXRpb24tPmNhdGVnb3J5
KCksIGNzc1BhcnNlck1vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3Vt
ZVZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gY2FsY1BhcnNlci5jb25zdW1lTGVuZ3RoT3JQ
ZXJjZW50UmF3KCk7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUxlbmd0aE9yUGVyY2VudChDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlIHZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgdW5pdGxlc3MpCit7CisgICAgY29uc3QgQ1NTUGFyc2Vy
VG9rZW4mIHRva2VuID0gcmFuZ2UucGVlaygpOworICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRnVu
Y3Rpb25Ub2tlbikgeworICAgICAgICBDYWxjUGFyc2VyIGNhbGNQYXJzZXIocmFuZ2UsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgdmFsdWVSYW5nZSk7CisgICAgICAgIGlmIChjb25zdCBD
U1NDYWxjVmFsdWUqIGNhbGN1bGF0aW9uID0gY2FsY1BhcnNlci52YWx1ZSgpKSB7CisgICAgICAg
ICAgICBpZiAoY2FuQ29uc3VtZUNhbGNWYWx1ZShjYWxjdWxhdGlvbi0+Y2F0ZWdvcnkoKSwgY3Nz
UGFyc2VyTW9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGNQYXJzZXIuY29uc3VtZVZh
bHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhyYW5nZSwgY3NzUGFy
c2VyTW9kZSwgdmFsdWVSYW5nZSwgdW5pdGxlc3MpKSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hP
bigqcmVzdWx0LCBbXSAoTGVuZ3RoUmF3IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUobGVuZ3RoLnZhbHVlLCBsZW5ndGgu
dHlwZSk7CisgICAgICAgIH0sIFtdIChkb3VibGUgcGVyY2VudGFnZSkgeworICAgICAgICAgICAg
cmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUocGVyY2VudGFnZSwg
Q1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgfSk7CiAgICAgfQogICAgIHJl
dHVybiBudWxscHRyOwogfQogCi1PcHRpb25hbDxBbmdsZT4gY29uc3VtZUFuZ2xlUmF3KENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVuaXRs
ZXNzUXVpcmsgdW5pdGxlc3MpCitPcHRpb25hbDxBbmdsZVJhdz4gY29uc3VtZUFuZ2xlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFVu
aXRsZXNzUXVpcmsgdW5pdGxlc3MpCiB7CiAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2Vu
ID0gcmFuZ2UucGVlaygpOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4p
IHsKQEAgLTUwMiwxMSArNTgxLDI1IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3Vt
ZVJlc29sdXRpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIEFsbG93WFJlCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLVJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQorT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3Vt
ZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5nZS5w
ZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShy
YW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCkpOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpLmlkKCk7Cit9CisKK1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUlkZW50KENT
U1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1
bWVJZGVudFJhdyhyYW5nZSkpCisgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRv
bigpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgqcmVzdWx0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmFuZ2VSYXcoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgcmFuZ2UsIENTU1ZhbHVlSUQgbG93ZXIsIENTU1ZhbHVlSUQgdXBwZXIpCit7
CisgICAgaWYgKHJhbmdlLnBlZWsoKS5pZCgpIDwgbG93ZXIgfHwgcmFuZ2UucGVlaygpLmlkKCkg
PiB1cHBlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29uc3Vt
ZUlkZW50UmF3KHJhbmdlKTsKIH0KIAogUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1l
SWRlbnRSYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTVmFsdWVJRCBsb3dlciwg
Q1NTVmFsdWVJRCB1cHBlcikKQEAgLTE4MTgsNiArMTkxMSwyMjUgQEAgUmVmUHRyPENTU1ZhbHVl
PiBjb25zdW1lSW1hZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENTU1BhcnNlckNvbnRl
eHQgY29udGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorT3B0aW9uYWw8Q1NTVmFsdWVJRD4g
Y29uc3VtZUZvbnRWYXJpYW50Q1NTMjFSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7
CisgICAgcmV0dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVTbWFs
bENhcHM+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRXZWln
aHRLZXl3b3JkVmFsdWVSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0
dXJuIGNvbnN1bWVJZGVudFJhdzxDU1NWYWx1ZU5vcm1hbCwgQ1NTVmFsdWVCb2xkLCBDU1NWYWx1
ZUJvbGRlciwgQ1NTVmFsdWVMaWdodGVyPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRXZWln
aHRSYXc+IGNvbnN1bWVGb250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQor
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3
KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsgKnJlc3VsdCB9OworICAgIGlmIChhdXRvIHJlc3Vs
dCA9IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyUmF3KHJhbmdlKSkKKyAgICAgICAgcmV0dXJuIHsg
KnJlc3VsdCB9OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPENTU1Zh
bHVlSUQ+IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJh
bmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlVWx0cmFD
b25kZW5zZWQsIENTU1ZhbHVlRXh0cmFDb25kZW5zZWQsIENTU1ZhbHVlQ29uZGVuc2VkLCBDU1NW
YWx1ZVNlbWlDb25kZW5zZWQsIENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZVNlbWlFeHBhbmRlZCwg
Q1NTVmFsdWVFeHBhbmRlZCwgQ1NTVmFsdWVFeHRyYUV4cGFuZGVkLCBDU1NWYWx1ZVVsdHJhRXhw
YW5kZWQ+KHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUZvbnRTdHls
ZUtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1
cm4gY29uc3VtZUlkZW50UmF3PENTU1ZhbHVlTm9ybWFsLCBDU1NWYWx1ZUl0YWxpYywgQ1NTVmFs
dWVPYmxpcXVlPihyYW5nZSk7Cit9CisKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZv
bnRTdHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQ
YXJzZXJNb2RlKQoreworICAgIGF1dG8gcmVzdWx0ID0gY29uc3VtZUZvbnRTdHlsZUtleXdvcmRW
YWx1ZVJhdyhyYW5nZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIGlkZW50ID0gKnJlc3VsdDsKKyAgICBpZiAoaWRlbnQgPT0gQ1NT
VmFsdWVOb3JtYWwgfHwgaWRlbnQgPT0gQ1NTVmFsdWVJdGFsaWMpCisgICAgICAgIHJldHVybiB7
IHsgaWRlbnQsIFdURjo6bnVsbG9wdCB9IH07CisgICAgQVNTRVJUKGlkZW50ID09IENTU1ZhbHVl
T2JsaXF1ZSk7CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICBpZiAoIXJhbmdlLmF0
RW5kKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gYW5nbGUgPSBjb25zdW1lQW5nbGVSYXcocmFuZ2Us
IGNzc1BhcnNlck1vZGUpKSB7CisgICAgICAgICAgICBhdXRvIGFuZ2xlSW5EZWdyZWVzID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVEZWdyZWVzKGFuZ2xlLT50eXBlLCBhbmdsZS0+dmFsdWUp
OworICAgICAgICAgICAgaWYgKGZvbnRTdHlsZUlzV2l0aGluUmFuZ2UoYW5nbGVJbkRlZ3JlZXMp
KQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgQ1NTVmFsdWVPYmxpcXVlLCBXVEZNb3ZlKGFu
Z2xlKSB9IH07CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3NzUGFyc2VyTW9kZSk7CisjZW5kaWYKKyAg
ICByZXR1cm4geyB7IENTU1ZhbHVlT2JsaXF1ZSwgV1RGOjpudWxsb3B0IH0gfTsKK30KKworU3Ry
aW5nIGNvbmNhdGVuYXRlRmFtaWx5TmFtZShDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYm9vbCBhZGRlZFNwYWNlID0gZmFsc2U7
CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIGZpcnN0VG9rZW4gPSByYW5nZS5wZWVrKCk7Cisg
ICAgd2hpbGUgKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gSWRlbnRUb2tlbikgeworICAgICAgICBp
ZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcp
OworICAgICAgICAgICAgYWRkZWRTcGFjZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnVp
bGRlci5hcHBlbmQocmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS52YWx1ZSgpKTsK
KyAgICB9CisgICAgaWYgKCFhZGRlZFNwYWNlICYmIGlzQ1NTV2lkZUtleXdvcmQoZmlyc3RUb2tl
bi5pZCgpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Cit9CisKK1N0cmluZyBjb25zdW1lRmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBTdHJpbmdU
b2tlbikKKyAgICAgICAgcmV0dXJuIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCku
dmFsdWUoKS50b1N0cmluZygpOworICAgIGlmIChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50
VG9rZW4pCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gY29uY2F0ZW5hdGVG
YW1pbHlOYW1lKHJhbmdlKTsKK30KKworT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUdlbmVy
aWNGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGNv
bnN1bWVJZGVudFJhbmdlUmF3KHJhbmdlLCBDU1NWYWx1ZVNlcmlmLCBDU1NWYWx1ZVdlYmtpdEJv
ZHkpOworfQorCitPcHRpb25hbDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZv
bnRGYW1pbHlSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgV1RGOjpWZWN0
b3I8Rm9udEZhbWlseVJhdz4gbGlzdDsKKyAgICBkbyB7CisgICAgICAgIGlmIChhdXRvIGlkZW50
ID0gY29uc3VtZUdlbmVyaWNGYW1pbHlSYXcocmFuZ2UpKQorICAgICAgICAgICAgbGlzdC5hcHBl
bmQoeyAqaWRlbnQgfSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBmYW1pbHlO
YW1lID0gY29uc3VtZUZhbWlseU5hbWVSYXcocmFuZ2UpOworICAgICAgICAgICAgaWYgKGZhbWls
eU5hbWUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKHsgZmFtaWx5TmFtZSB9KTsKKyAgICAgICAgfQorICAgIH0g
d2hpbGUgKGNvbnN1bWVDb21tYUluY2x1ZGluZ1doaXRlc3BhY2UocmFuZ2UpKTsKKyAgICByZXR1
cm4gbGlzdDsKK30KKworT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJhdyhD
U1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBV
bml0bGVzc1F1aXJrIHVuaXRsZXNzKQoreworICAgIGlmIChyYW5nZS5wZWVrKCkuaWQoKSA+PSBD
U1NWYWx1ZVh4U21hbGwgJiYgcmFuZ2UucGVlaygpLmlkKCkgPD0gQ1NTVmFsdWVMYXJnZXIpIHsK
KyAgICAgICAgaWYgKGF1dG8gaWRlbnQgPSBjb25zdW1lSWRlbnRSYXcocmFuZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuIHsgKmlkZW50IH07CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgfQorCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY29uc3VtZUxlbmd0aE9yUGVyY2VudFJhdyhy
YW5nZSwgY3NzUGFyc2VyTW9kZSwgVmFsdWVSYW5nZU5vbk5lZ2F0aXZlLCB1bml0bGVzcykpCisg
ICAgICAgIHJldHVybiB7ICpyZXN1bHQgfTsKKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK09wdGlvbmFsPExpbmVIZWlnaHRSYXc+IGNvbnN1bWVMaW5lSGVpZ2h0UmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmIHJhbmdlLCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUpCit7CisgICAg
aWYgKHJhbmdlLnBlZWsoKS5pZCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgIGlmIChh
dXRvIGlkZW50ID0gY29uc3VtZUlkZW50UmF3KHJhbmdlKSkKKyAgICAgICAgICAgIHJldHVybiB7
ICppZGVudCB9OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIGRv
dWJsZSBudW1iZXI7CisgICAgaWYgKGNvbnN1bWVOdW1iZXJSYXcocmFuZ2UsIG51bWJlciwgVmFs
dWVSYW5nZU5vbk5lZ2F0aXZlKSkKKyAgICAgICAgcmV0dXJuIHsgbnVtYmVyIH07CisKKyAgICBp
ZiAoYXV0byBsZW5ndGhPclBlcmNlbnQgPSBjb25zdW1lTGVuZ3RoT3JQZXJjZW50UmF3KHJhbmdl
LCBjc3NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlTm9uTmVnYXRpdmUpKQorICAgICAgICByZXR1cm4g
eyAqbGVuZ3RoT3JQZXJjZW50IH07CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitP
cHRpb25hbDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgcmFuZ2UsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKK3sKKyAgICAvLyBMZXQncyBj
aGVjayBpZiB0aGVyZSBpcyBhbiBpbmhlcml0IG9yIGluaXRpYWwgc29tZXdoZXJlIGluIHRoZSBz
aG9ydGhhbmQuCisgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZUNvcHkgPSByYW5nZTsKKyAg
ICB3aGlsZSAoIXJhbmdlQ29weS5hdEVuZCgpKSB7CisgICAgICAgIENTU1ZhbHVlSUQgaWQgPSBy
YW5nZUNvcHkuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKS5pZCgpOworICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVJbmhlcml0IHx8IGlkID09IENTU1ZhbHVlSW5pdGlhbCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgRm9udFJhdyByZXN1bHQ7CisK
KyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkpIHsKKyAgICAgICAgQ1NTVmFsdWVJRCBpZCA9IHJh
bmdlLnBlZWsoKS5pZCgpOworICAgICAgICBpZiAoIXJlc3VsdC5zdHlsZSkgeworICAgICAgICAg
ICAgaWYgKChyZXN1bHQuc3R5bGUgPSBjb25zdW1lRm9udFN0eWxlUmF3KHJhbmdlLCBjc3NQYXJz
ZXJNb2RlKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFyZXN1bHQudmFyaWFudENhcHMgJiYgKGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09
IENTU1ZhbHVlU21hbGxDYXBzKSkgeworICAgICAgICAgICAgLy8gRm9udCB2YXJpYW50IGluIHRo
ZSBzaG9ydGhhbmQgaXMgcGFydGljdWxhciwgaXQgb25seSBhY2NlcHRzIG5vcm1hbCBvciBzbWFs
bC1jYXBzLgorICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3Mt
Zm9udHMvI3Byb3BkZWYtZm9udAorICAgICAgICAgICAgaWYgKChyZXN1bHQudmFyaWFudENhcHMg
PSBjb25zdW1lRm9udFZhcmlhbnRDU1MyMVJhdyhyYW5nZSkpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcmVzdWx0LndlaWdodCkgeworICAgICAg
ICAgICAgaWYgKChyZXN1bHQud2VpZ2h0ID0gY29uc3VtZUZvbnRXZWlnaHRSYXcocmFuZ2UpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlc3Vs
dC5zdHJldGNoKSB7CisgICAgICAgICAgICBpZiAoKHJlc3VsdC5zdHJldGNoID0gY29uc3VtZUZv
bnRTdHJldGNoS2V5d29yZFZhbHVlUmF3KHJhbmdlKSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJhbmdlLmF0
RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBOb3cgYSBmb250
IHNpemUgX211c3RfIGNvbWUuCisgICAgaWYgKGF1dG8gc2l6ZSA9IGNvbnN1bWVGb250U2l6ZVJh
dyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpCisgICAgICAgIHJlc3VsdC5zaXplID0gKnNpemU7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKHJhbmdlLmF0
RW5kKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoY29uc3VtZVNs
YXNoSW5jbHVkaW5nV2hpdGVzcGFjZShyYW5nZSkpIHsKKyAgICAgICAgaWYgKCEocmVzdWx0Lmxp
bmVIZWlnaHQgPSBjb25zdW1lTGluZUhlaWdodFJhdyhyYW5nZSwgY3NzUGFyc2VyTW9kZSkpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICAvLyBGb250IGZh
bWlseSBtdXN0IGNvbWUgbm93LgorICAgIGlmIChhdXRvIGZhbWlseSA9IGNvbnN1bWVGb250RmFt
aWx5UmF3KHJhbmdlKSkKKyAgICAgICAgcmVzdWx0LmZhbWlseSA9ICpmYW1pbHk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFyYW5nZS5hdEVuZCgp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFsdWVJRChDU1NWYWx1
ZUlEIGlkZW50KQoreworICAgIHN3aXRjaCAoaWRlbnQpIHsKKyAgICBjYXNlIENTU1ZhbHVlU2Vy
aWY6CisgICAgICAgIHJldHVybiBzZXJpZkZhbWlseS5nZXQoKTsKKyAgICBjYXNlIENTU1ZhbHVl
U2Fuc1NlcmlmOgorICAgICAgICByZXR1cm4gc2Fuc1NlcmlmRmFtaWx5LmdldCgpOworICAgIGNh
c2UgQ1NTVmFsdWVDdXJzaXZlOgorICAgICAgICByZXR1cm4gY3Vyc2l2ZUZhbWlseS5nZXQoKTsK
KyAgICBjYXNlIENTU1ZhbHVlRmFudGFzeToKKyAgICAgICAgcmV0dXJuIGZhbnRhc3lGYW1pbHku
Z2V0KCk7CisgICAgY2FzZSBDU1NWYWx1ZU1vbm9zcGFjZToKKyAgICAgICAgcmV0dXJuIG1vbm9z
cGFjZUZhbWlseS5nZXQoKTsKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKKyAg
ICAgICAgcmV0dXJuIHBpY3RvZ3JhcGhGYW1pbHkuZ2V0KCk7CisgICAgY2FzZSBDU1NWYWx1ZVN5
c3RlbVVpOgorICAgICAgICByZXR1cm4gc3lzdGVtVWlGYW1pbHkuZ2V0KCk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGVtcHR5QXRvbSgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVy
cy5oCmluZGV4IGE4N2JkMjBhYTJhNTIzNjE0YmQzODNiYzA4MzU3NDQ4NGZhNDA2YmIuLmFmMDA4
MDE3NTE5OWMwMzY3MDdlM2RhOWU1YWIxNmUyODMyNDdlZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaApAQCAtMzcsNiAr
MzcsOCBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIiAv
LyBGb3IgVmFsdWVSYW5nZQogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01NSwyOCArNTcsNDEgQEAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBjb25zdW1lRnVu
Y3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogZW51bSBjbGFzcyBVbml0bGVzc1F1aXJrIHsg
QWxsb3csIEZvcmJpZCB9OwogZW51bSBjbGFzcyBBbGxvd1hSZXNvbHV0aW9uVW5pdCB7IEFsbG93
LCBGb3JiaWQgfTsKIAotc3RydWN0IEFuZ2xlIHsKK3N0cnVjdCBBbmdsZVJhdyB7CiAgICAgQ1NT
VW5pdFR5cGUgdHlwZTsKICAgICBkb3VibGUgdmFsdWU7CiB9OwogCitzdHJ1Y3QgTGVuZ3RoUmF3
IHsKKyAgICBDU1NVbml0VHlwZSB0eXBlOworICAgIGRvdWJsZSB2YWx1ZTsKK307CisKK3VzaW5n
IExlbmd0aE9yUGVyY2VudFJhdyA9IFdURjo6VmFyaWFudDxMZW5ndGhSYXcsIGRvdWJsZT47CisK
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZUludGVnZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGRvdWJsZSBtaW5pbXVtVmFsdWUgPSAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjptYXgoKSk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVQb3NpdGl2ZUludGVn
ZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwotYm9vbCBjb25zdW1lTnVtYmVyUmF3KENTU1BhcnNl
clRva2VuUmFuZ2UmLCBkb3VibGUmIHJlc3VsdCk7Citib29sIGNvbnN1bWVOdW1iZXJSYXcoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIGRvdWJsZSYgcmVzdWx0LCBWYWx1ZVJhbmdlID0gVmFsdWVSYW5n
ZUFsbCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVOdW1iZXIoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIFZhbHVlUmFuZ2UpOworT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lRm9udFdl
aWdodE51bWJlclJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbnN1bWVGb250V2VpZ2h0TnVtYmVyKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09w
dGlvbmFsPExlbmd0aFJhdz4gY29uc3VtZUxlbmd0aFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwg
Q1NTUGFyc2VyTW9kZSwgVmFsdWVSYW5nZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6
OkZvcmJpZCk7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVMZW5ndGgoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZhbHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsg
PSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lUGVyY2Vu
dFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2VBbGwpOwog
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lUGVyY2VudChDU1NQYXJzZXJUb2tlblJh
bmdlJiwgVmFsdWVSYW5nZSk7CitPcHRpb25hbDxMZW5ndGhPclBlcmNlbnRSYXc+IGNvbnN1bWVM
ZW5ndGhPclBlcmNlbnRSYXcoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFZh
bHVlUmFuZ2UsIFVuaXRsZXNzUXVpcmsgPSBVbml0bGVzc1F1aXJrOjpGb3JiaWQpOwogUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lTGVuZ3RoT3JQZXJjZW50KENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBDU1NQYXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxl
c3NRdWlyazo6Rm9yYmlkKTsKLU9wdGlvbmFsPEFuZ2xlPiBjb25zdW1lQW5nbGVSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIENTU1BhcnNlck1vZGUsIFVuaXRsZXNzUXVpcmspOworT3B0aW9uYWw8
QW5nbGVSYXc+IGNvbnN1bWVBbmdsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2Vy
TW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVBbmdsZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFy
c2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVuaXRsZXNzUXVpcms6OkZvcmJpZCk7CiBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVUaW1lKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NQ
YXJzZXJNb2RlLCBWYWx1ZVJhbmdlLCBVbml0bGVzc1F1aXJrID0gVW5pdGxlc3NRdWlyazo6Rm9y
YmlkKTsKIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29uc3VtZVJlc29sdXRpb24oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIEFsbG93WFJlc29sdXRpb25Vbml0ID0gQWxsb3dYUmVzb2x1dGlvblVu
aXQ6OkZvcmJpZCk7CiAKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVJZGVudFJhdyhDU1NQ
YXJzZXJUb2tlblJhbmdlJik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVu
dChDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lSWRl
bnRSYW5nZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCBsb3dlciwgQ1NTVmFs
dWVJRCB1cHBlcik7CiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVJZGVudFJhbmdl
KENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlEIGxvd2VyLCBDU1NWYWx1ZUlEIHVwcGVy
KTsKIHRlbXBsYXRlPENTU1ZhbHVlSUQsIENTU1ZhbHVlSUQuLi4+IGlubGluZSBib29sIGlkZW50
TWF0Y2hlcyhDU1NWYWx1ZUlEIGlkKTsKK3RlbXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElk
ZW50cz4gT3B0aW9uYWw8Q1NTVmFsdWVJRD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2Vu
UmFuZ2UmKTsKIHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gYWxsb3dlZElkZW50cz4gUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBjb25zdW1lSWRlbnQoQ1NTUGFyc2VyVG9rZW5SYW5nZSYpOwogCiBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbnN1bWVDdXN0b21JZGVudChDU1NQYXJzZXJUb2tl
blJhbmdlJik7CkBAIC0xMTUsNiArMTMwLDQwIEBAIGVudW0gY2xhc3MgQWxsb3dlZEZpbHRlckZ1
bmN0aW9ucyB7CiBSZWZQdHI8Q1NTVmFsdWU+IGNvbnN1bWVGaWx0ZXIoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmLCBBbGxvd2VkRmlsdGVyRnVuY3Rpb25zKTsK
IFJlZlB0cjxDU1NTaGFkb3dWYWx1ZT4gY29uc3VtZVNpbmdsZVNoYWRvdyhDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgYm9vbCBhbGxvd0luc2V0LCBib29sIGFsbG93U3ByZWFk
KTsKIAorc3RydWN0IEZvbnRTdHlsZVJhdyB7CisgICAgQ1NTVmFsdWVJRCBzdHlsZTsKKyAgICBP
cHRpb25hbDxBbmdsZVJhdz4gYW5nbGU7Cit9OwordXNpbmcgRm9udFdlaWdodFJhdyA9IFdURjo6
VmFyaWFudDxDU1NWYWx1ZUlELCBkb3VibGU+OwordXNpbmcgRm9udFNpemVSYXcgPSBXVEY6OlZh
cmlhbnQ8Q1NTVmFsdWVJRCwgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhPclBlcmNl
bnRSYXc+OwordXNpbmcgTGluZUhlaWdodFJhdyA9IFdURjo6VmFyaWFudDxDU1NWYWx1ZUlELCBk
b3VibGUsIENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3PjsKK3Vz
aW5nIEZvbnRGYW1pbHlSYXcgPSBXVEY6OlZhcmlhbnQ8Q1NTVmFsdWVJRCwgU3RyaW5nPjsKKwor
c3RydWN0IEZvbnRSYXcgeworICAgIE9wdGlvbmFsPEZvbnRTdHlsZVJhdz4gc3R5bGU7CisgICAg
T3B0aW9uYWw8Q1NTVmFsdWVJRD4gdmFyaWFudENhcHM7CisgICAgT3B0aW9uYWw8Rm9udFdlaWdo
dFJhdz4gd2VpZ2h0OworICAgIE9wdGlvbmFsPENTU1ZhbHVlSUQ+IHN0cmV0Y2g7CisgICAgRm9u
dFNpemVSYXcgc2l6ZTsKKyAgICBPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBsaW5lSGVpZ2h0Owor
ICAgIFdURjo6VmVjdG9yPEZvbnRGYW1pbHlSYXc+IGZhbWlseTsKK307CisKK09wdGlvbmFsPENT
U1ZhbHVlSUQ+IGNvbnN1bWVGb250VmFyaWFudENTUzIxUmF3KENTU1BhcnNlclRva2VuUmFuZ2Um
KTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+IGNvbnN1bWVGb250V2VpZ2h0S2V5d29yZFZhbHVlUmF3
KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPEZvbnRXZWlnaHRSYXc+IGNvbnN1bWVG
b250V2VpZ2h0UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPENTU1ZhbHVlSUQ+
IGNvbnN1bWVGb250U3RyZXRjaEtleXdvcmRWYWx1ZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7
CitPcHRpb25hbDxDU1NWYWx1ZUlEPiBjb25zdW1lRm9udFN0eWxlS2V5d29yZFZhbHVlUmF3KENT
U1BhcnNlclRva2VuUmFuZ2UmKTsKK09wdGlvbmFsPEZvbnRTdHlsZVJhdz4gY29uc3VtZUZvbnRT
dHlsZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitTdHJpbmcgY29u
Y2F0ZW5hdGVGYW1pbHlOYW1lKENTU1BhcnNlclRva2VuUmFuZ2UmKTsKK1N0cmluZyBjb25zdW1l
RmFtaWx5TmFtZVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25hbDxDU1NWYWx1ZUlE
PiBjb25zdW1lR2VuZXJpY0ZhbWlseVJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJik7CitPcHRpb25h
bDxXVEY6OlZlY3RvcjxGb250RmFtaWx5UmF3Pj4gY29uc3VtZUZvbnRGYW1pbHlSYXcoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYpOworT3B0aW9uYWw8Rm9udFNpemVSYXc+IGNvbnN1bWVGb250U2l6ZVJh
dyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSwgVW5pdGxlc3NRdWlyayA9IFVu
aXRsZXNzUXVpcms6OkZvcmJpZCk7CitPcHRpb25hbDxMaW5lSGVpZ2h0UmF3PiBjb25zdW1lTGlu
ZUhlaWdodFJhdyhDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTUGFyc2VyTW9kZSk7CitPcHRpb25h
bDxGb250UmF3PiBjb25zdW1lRm9udFdvcmtlclNhZmUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENT
U1BhcnNlck1vZGUpOworY29uc3QgQXRvbVN0cmluZyYgZ2VuZXJpY0ZvbnRGYW1pbHlGcm9tVmFs
dWVJRChDU1NWYWx1ZUlEKTsKKwogLy8gVGVtcGxhdGUgaW1wbGVtZW50YXRpb25zIGFyZSBhdCB0
aGUgYm90dG9tIG9mIHRoZSBmaWxlIGZvciByZWFkYWJpbGl0eS4KIAogdGVtcGxhdGU8dHlwZW5h
bWUuLi4gZW1wdHlCYXNlQ2FzZT4gaW5saW5lIGJvb2wgaWRlbnRNYXRjaGVzKENTU1ZhbHVlSUQp
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMjMsNiArMTcyLDEzIEBAIHRlbXBsYXRlPENTU1ZhbHVl
SUQgaGVhZCwgQ1NTVmFsdWVJRC4uLiB0YWlsPiBpbmxpbmUgYm9vbCBpZGVudE1hdGNoZXMoQ1NT
VmFsdWVJCiAgICAgcmV0dXJuIGlkID09IGhlYWQgfHwgaWRlbnRNYXRjaGVzPHRhaWwuLi4+KGlk
KTsKIH0KIAordGVtcGxhdGU8Q1NTVmFsdWVJRC4uLiBuYW1lcz4gT3B0aW9uYWw8Q1NTVmFsdWVJ
RD4gY29uc3VtZUlkZW50UmF3KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQoreworICAgIGlm
IChyYW5nZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1l
cy4uLj4ocmFuZ2UucGVlaygpLmlkKCkpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiByYW5nZS5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpLmlkKCk7Cit9CisK
IHRlbXBsYXRlPENTU1ZhbHVlSUQuLi4gbmFtZXM+IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29uc3VtZUlkZW50KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIGlmIChyYW5n
ZS5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4gfHwgIWlkZW50TWF0Y2hlczxuYW1lcy4uLj4o
cmFuZ2UucGVlaygpLmlkKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggMjgzNjRhZmExYTc2YTVkZThh
ZTY0ZWYzODZiMjUyYzZhYzZlNjBhNi4uNzNjMjhkMzhhOTgxYjZmYTc5ODYyMjI0NDU4ZWQ0OTk1
NWM0MjczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0zNiwxNiArMzYsMjEgQEAKICNpbmNsdWRlICJD
U1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhdGgyRC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTdHlsZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJTdHlsZUZvbnRTaXplRnVuY3Rpb25z
LmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
Rm9yRm9udFJhdy5oIgogI2luY2x1ZGUgIlRleHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1
bi5oIgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgpAQCAtMTM0LDE2ICsxMzks
MTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5n
JiBuZXdGb250KQogICAgIGlmIChuZXdGb250ID09IHN0YXRlKCkudW5wYXJzZWRGb250ICYmIHN0
YXRlKCkuZm9udC5yZWFsaXplZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHBhcnNl
ZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKHBhcnNlZFN0eWxlLCBDU1NQcm9wZXJ0eUZvbnQsIG5ld0ZvbnQsIHRydWUs
IHN0cmljdFRvQ1NTUGFyc2VyTW9kZSghbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkp
OwotICAgIGlmIChwYXJzZWRTdHlsZS0+aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgZm9udFZhbHVlID0gcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJv
cGVydHlGb250KTsKLQogICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vbGlzdHMudzMub3JnL0Fy
Y2hpdmVzL1B1YmxpYy9wdWJsaWMtaHRtbC8yMDA5SnVsLzA5NDcuaHRtbCwKLSAgICAvLyB0aGUg
ImluaGVyaXQiIGFuZCAiaW5pdGlhbCIgdmFsdWVzIG11c3QgYmUgaWdub3JlZC4KLSAgICBpZiAo
Zm9udFZhbHVlID09ICJpbmhlcml0IiB8fCBmb250VmFsdWUgPT0gImluaXRpYWwiKQorICAgIC8v
IHRoZSAiaW5oZXJpdCIgYW5kICJpbml0aWFsIiB2YWx1ZXMgbXVzdCBiZSBpZ25vcmVkLiBwYXJz
ZUZvbnRXb3JrZXJTYWZlKCkgaWdub3JlcyB0aGVzZS4KKyAgICBhdXRvIGZvbnRSYXcgPSBDU1NQ
YXJzZXI6OnBhcnNlRm9udFdvcmtlclNhZmUobmV3Rm9udCwgc3RyaWN0VG9DU1NQYXJzZXJNb2Rl
KCFtX3VzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CisgICAgaWYgKCFmb250UmF3KQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgcGFyc2Ugc3VjY2VlZGVkLgpAQCAtMTUzLDM4
ICsxNTIsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoY29uc3Qg
U3RyaW5nJiBuZXdGb250KQogCiAgICAgLy8gTWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8gdGhl
IHRleHQgc3R5bGUuIElmIHRoZSBmb250IHVzZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21hbGxl
ciwgdGhlc2Ugd2lsbCB3b3JrCiAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KLSAgICBh
dXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZVB0cigpOwotCiAgICAgRG9jdW1lbnQm
IGRvY3VtZW50ID0gY2FudmFzKCkuZG9jdW1lbnQoKTsKICAgICBkb2N1bWVudC51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CiAKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBpZiAoYXV0byogY29tcHV0ZWRTdHlsZSA9IGNhbnZhcygpLmNvbXB1dGVkU3R5bGUo
KSkKLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIHsgY29tcHV0ZWRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgfSk7CisgICAgICAgIGZv
bnREZXNjcmlwdGlvbiA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24geyBjb21wdXRlZFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKSB9OwogICAgIGVsc2UgewotICAgICAgICBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIGRlZmF1bHRGb250RGVzY3JpcHRpb247Ci0gICAgICAgIGRlZmF1bHRGb250RGVzY3Jp
cHRpb24uc2V0T25lRmFtaWx5KERlZmF1bHRGb250RmFtaWx5KTsKLSAgICAgICAgZGVmYXVsdEZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKERlZmF1bHRGb250U2l6ZSk7Ci0gICAgICAg
IGRlZmF1bHRGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKERlZmF1bHRGb250U2l6ZSk7
Ci0KLSAgICAgICAgbmV3U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlZmF1bHRG
b250RGVzY3JpcHRpb24pKTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldE9uZUZhbWlseShE
ZWZhdWx0Rm9udEZhbWlseSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKERlZmF1bHRGb250U2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoRGVmYXVsdEZvbnRTaXplKTsKICAgICB9CiAKLSAgICBuZXdTdHlsZS0+Zm9udENhc2Nh
ZGUoKS51cGRhdGUoJmRvY3VtZW50LmZvbnRTZWxlY3RvcigpKTsKLQotICAgIC8vIE5vdyBtYXAg
dGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxlLgotCi0gICAgU3R5bGU6
Ok1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0OwotICAgIGF1dG8gcGFyZW50U3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y2xvbmUoKm5ld1N0eWxlKTsKLSAgICBTdHlsZTo6QnVpbGRlciBzdHlsZUJ1aWxkZXIo
Km5ld1N0eWxlLCB7IGRvY3VtZW50LCBwYXJlbnRTdHlsZSB9LCBtYXRjaFJlc3VsdCwgeyB9KTsK
LQotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFt
aWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1p
bHkpLmdldCgpKTsKLSAgICBzdHlsZUJ1aWxkZXIuYXBwbHlQcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUo
Q1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7Ci0gICAgc3R5bGVCdWlsZGVy
LmFwcGx5UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwotICAgIHN0
eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2Vk
U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOwot
ICAgIHN0eWxlQnVpbGRlci5hcHBseVByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQp
LmdldCgpKTsKLQotICAgIG1vZGlmaWFibGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVu
dC5mb250U2VsZWN0b3IoKSwgKm5ld1N0eWxlKTsKKyAgICBpZiAoYXV0byBmb250U3R5bGUgPSBT
dHlsZTo6cmVzb2x2ZUZvckZvbnRSYXcoKmZvbnRSYXcsIFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSwgZG9jdW1lbnQpKQorICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUo
ZG9jdW1lbnQuZm9udFNlbGVjdG9yKCksICpmb250U3R5bGUpOwogfQogCiBzdGF0aWMgQ2FudmFz
VGV4dEFsaWduIHRvQ2FudmFzVGV4dEFsaWduKFRleHRBbGlnbiB0ZXh0QWxpZ24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IGU2NjZkZTI4MzEzYzBiZjk4
OGQ0MWYzYzA0OTEzYzQ4MmU0N2E0OTcuLmExYTcyYWI3NGUyYzhiOTBhZTJjYjU4ZjE4NDFjOTlj
MWFjMGZkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1
c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
R3JhZGllbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuaCIKICNpbmNsdWRlICJDU1NSZWdp
c3RlcmVkQ3VzdG9tUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NTaGFkb3dWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNvdW50ZXIuaCIKQEAgLTEwMTIsNDAgKzEwMTMsMTEgQEAgaW5saW5lIHZvaWQgQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoQnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUsIENTU1YKICAgICAgICAgICAgIC8vIElmIHRoZSBmYW1pbHkgbmFtZSB3YXMgcmVzb2x2ZWQg
YnkgdGhlIENTUyBwYXJzZXIgZnJvbSBhIHN5c3RlbSBmb250IElELCB0aGVuIGl0IGlzIGdlbmVy
aWMuCiAgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBmb250RmFtaWx5LmZyb21TeXN0ZW1G
b250SUQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1
ZS52YWx1ZUlEKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgorICAg
ICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRCb2R5
KQogICAgICAgICAgICAgICAgIGZhbWlseSA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnNldHRp
bmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc2Vy
aWZGYW1pbHk7CisgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpc0dlbmVyaWNG
YW1pbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBD
U1NWYWx1ZVNhbnNTZXJpZjoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBzYW5zU2VyaWZGYW1p
bHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDdXJzaXZlOgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IGN1cnNpdmVGYW1pbHk7Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmlj
RmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVGYW50YXN5OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbnRhc3lGYW1pbHk7
Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVNb25vc3BhY2U6Ci0gICAgICAgICAg
ICAgICAgZmFtaWx5ID0gbW9ub3NwYWNlRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJp
Y0ZhbWlseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0UGljdG9ncmFwaDoKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBwaWN0
b2dyYXBoRmFtaWx5OwotICAgICAgICAgICAgICAgIGlzR2VuZXJpY0ZhbWlseSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlU3lzdGVtVWk6
Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gc3lzdGVtVWlGYW1pbHk7Ci0gICAgICAgICAgICAg
ICAgaXNHZW5lcmljRmFtaWx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZmFtaWx5ID0gQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpnZW5lcmljRm9udEZhbWlseUZyb21W
YWx1ZUlEKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZGZhNTA4MjYwZWFhMjE5MzAwZjA5MmIwY2FjMWViOWUxMGQ2ZDhiNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZUZvckZvbnRS
YXcuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckZvbnRSYXcuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxl
Y3Rvci5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM7CisKK09wdGlvbmFsPFJlbmRlclN0eWxlPiBy
ZXNvbHZlRm9yRm9udFJhdyhjb25zdCBGb250UmF3JiBmb250UmF3LCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiYgZm9udERlc2NyaXB0aW9uLCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgYXV0
byBmb250U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisKKyAgICBhdXRvIGdldFBhcmVu
dFN0eWxlID0gWyZdICgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4geworICAgICAg
ICBhdXRvIHBhcmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKGZvbnRTdHlsZSk7Cisg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pKTsKKyAgICAgICAgcGFyZW50U3R5bGUtPmZvbnRDYXNjYWRl
KCkudXBkYXRlKCZkb2N1bWVudC5mb250U2VsZWN0b3IoKSk7CisgICAgICAgIHJldHVybiBwYXJl
bnRTdHlsZTsKKyAgICB9OworCisgICAgLy8gTWFwIHRoZSBmb250IHByb3BlcnR5IGxvbmdoYW5k
cyBpbnRvIHRoZSBzdHlsZS4KKyAgICBmbG9hdCBwYXJlbnRTaXplID0gZm9udERlc2NyaXB0aW9u
LnNwZWNpZmllZFNpemUoKTsKKworICAgIC8vIEZvbnQgZmFtaWx5IGFwcGxpZWQgaW4gdGhlIHNh
bWUgd2F5IGFzIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkKKyAgICAv
LyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxk
IHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KKyAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERl
ZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKKworICAg
IFZlY3RvcjxBdG9tU3RyaW5nPiBmYW1pbGllczsKKyAgICBmYW1pbGllcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGZvbnRSYXcuZmFtaWx5LnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBmb250UmF3LmZhbWlseSkgeworICAgICAgICBBdG9tU3RyaW5nIGZhbWlseTsKKyAgICAgICAg
Ym9vbCBpc0dlbmVyaWNGYW1pbHkgPSBmYWxzZTsKKyAgICAgICAgc3dpdGNoT24oaXRlbSwgWyZd
IChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgICAgICBpc0dlbmVyaWNGYW1pbHkgPSBpZGVu
dCAhPSBDU1NWYWx1ZVdlYmtpdEJvZHk7CisgICAgICAgICAgICBmYW1pbHkgPSBpc0dlbmVyaWNG
YW1pbHkgPyBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6OmdlbmVyaWNGb250RmFtaWx5RnJvbVZh
bHVlSUQoaWRlbnQpCisgICAgICAgICAgICAgICAgOiBkb2N1bWVudC5zZXR0aW5ncygpLnN0YW5k
YXJkRm9udEZhbWlseSgpOworICAgICAgICB9LCBbJl0gKGNvbnN0IFN0cmluZyYgZmFtaWx5U3Ry
aW5nKSB7CisgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlTdHJpbmc7CisgICAgICAgIH0pOwor
CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChmYW1pbGllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNTcGVjaWZpZWRGb250KCFpc0dlbmVyaWNGYW1pbHkpOworICAgICAgICBmYW1pbGll
cy51bmNoZWNrZWRBcHBlbmQoZmFtaWx5KTsKKyAgICB9CisKKyAgICBpZiAoZmFtaWxpZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbGllcyhmYW1pbGllcyk7CisKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLnVzZUZp
eGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkgeworICAg
ICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9IGZvbnREZXNjcmlwdGlvbi5rZXl3
b3JkU2l6ZUFzSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICBhdXRvIHNpemUgPSBTdHlsZTo6
Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVm
YXVsdFNpemUsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVj
aWZpZWRTaXplKHNpemUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVk
U2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKHNpemUsIGZvbnRE
ZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmYWxzZSwgJmZvbnRTdHlsZSwgZG9jdW1lbnQp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZvbnQgc3R5bGUgYXBwbGllZCBpbiB0aGUg
c2FtZSB3YXkgYXMgQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTdHlsZUZyb21WYWx1ZQor
ICAgIGlmIChmb250UmF3LnN0eWxlKSB7CisgICAgICAgIHN3aXRjaCAoZm9udFJhdy5zdHlsZS0+
c3R5bGUpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgQ1NTVmFsdWVJdGFsaWM6CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXRhbGljKGl0YWxpY1ZhbHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9ibGlxdWU6IHsKKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZXM7
CisgICAgICAgICAgICBpZiAoZm9udFJhdy5zdHlsZS0+YW5nbGUpCisgICAgICAgICAgICAgICAg
ZGVncmVlcyA9IHN0YXRpY19jYXN0PGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZURl
Z3JlZXMoZm9udFJhdy5zdHlsZS0+YW5nbGUtPnR5cGUsIGZvbnRSYXcuc3R5bGUtPmFuZ2xlLT52
YWx1ZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRlZ3JlZXMgPSAwOwor
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250U2VsZWN0aW9uVmFsdWUo
ZGVncmVlcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhp
cygoZm9udFJhdy5zdHlsZSAmJiBmb250UmF3LnN0eWxlLT5zdHlsZSA9PSBDU1NWYWx1ZUl0YWxp
YykgPyBGb250U3R5bGVBeGlzOjppdGFsIDogRm9udFN0eWxlQXhpczo6c2xudCk7CisKKyAgICBp
ZiAoZm9udFJhdy52YXJpYW50Q2FwcykgeworICAgICAgICBzd2l0Y2ggKCpmb250UmF3LnZhcmlh
bnRDYXBzKSB7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpOb3JtYWwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHM6CisgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpTbWFs
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFsbFNtYWxsQ2Fw
czoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2FwcyhGb250VmFyaWFu
dENhcHM6OkFsbFNtYWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlUGV0aXRlQ2FwczoKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q2Fw
cyhGb250VmFyaWFudENhcHM6OlBldGl0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUFsbFBldGl0ZUNhcHM6CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudENhcHMoRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmljYXNlOgorICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VW5pY2FzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRpdGxpbmdDYXBzOgorICAgICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDYXBzKEZvbnRWYXJpYW50Q2Fwczo6VGl0
bGluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoZm9udFJhdy53ZWlnaHQpIHsKKyAgICAgICAgYXV0byB3ZWlnaHQgPSBz
d2l0Y2hPbigqZm9udFJhdy53ZWlnaHQsIFsmXSAoQ1NTVmFsdWVJRCBpZGVudCkgeworICAgICAg
ICAgICAgc3dpdGNoIChpZGVudCkgeworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsV2VpZ2h0VmFsdWUoKTsKKyAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVCb2xkOgorICAgICAgICAgICAgICAgIHJldHVybiBib2xkV2VpZ2h0VmFs
dWUoKTsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb2xkZXI6CisgICAgICAgICAgICAgICAg
cmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldlaWdodChmb250RGVzY3JpcHRp
b24ud2VpZ2h0KCkpOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpZ2h0ZXI6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQoZm9u
dERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1h
bFdlaWdodFZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIFsmXSAoZG91YmxlIHdl
aWdodCkgeworICAgICAgICAgICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZTo6Y2xhbXBGbG9h
dCh3ZWlnaHQpOworICAgICAgICB9KTsKKyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdo
dCh3ZWlnaHQpOworICAgIH0KKworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZy
b21JZGVudGlmaWVyKENTU1ZhbHVlSW52YWxpZCk7CisgICAgZmxvYXQgc2l6ZSA9IHN3aXRjaE9u
KGZvbnRSYXcuc2l6ZSwgWyZdIChDU1NWYWx1ZUlEIGlkZW50KSB7CisgICAgICAgIHN3aXRjaCAo
aWRlbnQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVYU21hbGw6CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKKyAgICAgICAgY2FzZSBD
U1NWYWx1ZU1lZGl1bToKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlOgorICAgICAgICBjYXNl
IENTU1ZhbHVlWExhcmdlOgorICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgorICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQpOworICAgICAgICAgICAgcmV0dXJu
IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhl
ZERlZmF1bHRTaXplKCksIGRvY3VtZW50KTsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoK
KyAgICAgICAgICAgIHJldHVybiBwYXJlbnRTaXplICogMS4yZjsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZVNtYWxsZXI6CisgICAgICAgICAgICByZXR1cm4gcGFyZW50U2l6ZSAvIDEuMmY7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMC5mOworICAgICAgICB9CisgICAgfSwg
WyZdIChjb25zdCBDU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnM6Okxlbmd0aE9yUGVyY2VudFJhdyYg
bGVuZ3RoT3JQZXJjZW50KSB7CisgICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNl
bnQsIFsmXSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0
aCkgeworICAgICAgICAgICAgYXV0byBwYXJlbnRTdHlsZSA9IGdldFBhcmVudFN0eWxlKCk7Cisg
ICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhIHsgcGFy
ZW50U3R5bGUuZ2V0KCksIG51bGxwdHIsIHBhcmVudFN0eWxlLmdldCgpLCBkb2N1bWVudC5yZW5k
ZXJWaWV3KCksIDEuMGYsIENTU1Byb3BlcnR5Rm9udFNpemUgfTsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVu
Z3RoRG91YmxlKGNvbnZlcnNpb25EYXRhLCBsZW5ndGgudHlwZSwgbGVuZ3RoLnZhbHVlKSk7Cisg
ICAgICAgIH0sIFsmXSAoZG91YmxlIHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oKHBhcmVudFNpemUgKiBwZXJjZW50YWdlKSAvIDEwMC4wKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRDb21wdXRlZFNpemUoc2l6ZSk7CisgICAgfQorCisgICAgaWYgKGZvbnRSYXcubGluZUhl
aWdodCkgeworICAgICAgICBPcHRpb25hbDxMZW5ndGg+IGxpbmVIZWlnaHQgPSBzd2l0Y2hPbigq
Zm9udFJhdy5saW5lSGVpZ2h0LCBbJl0gKENTU1ZhbHVlSUQgaWRlbnQpIHsKKyAgICAgICAgICAg
IGlmIChpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0
aW9uYWw8TGVuZ3RoPihSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8TGVuZ3RoPihXVEY6Om51bGxvcHQpOworICAgICAgICB9LCBb
Jl0gKGRvdWJsZSBudW1iZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxMZW5ndGg+
KExlbmd0aChudW1iZXIgKiAxMDAuMCwgUGVyY2VudCkpOworICAgICAgICB9LCBbJl0gKGNvbnN0
IENTU1Byb3BlcnR5UGFyc2VySGVscGVyczo6TGVuZ3RoT3JQZXJjZW50UmF3JiBsZW5ndGhPclBl
cmNlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBzd2l0Y2hPbihsZW5ndGhPclBlcmNlbnQsIFsm
XSAoY29uc3QgQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpMZW5ndGhSYXcmIGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50U3R5bGUgPSBnZXRQYXJlbnRTdHlsZSgpOworICAg
ICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgeyBw
YXJlbnRTdHlsZS5nZXQoKSwgbnVsbHB0ciwgcGFyZW50U3R5bGUuZ2V0KCksIGRvY3VtZW50LnJl
bmRlclZpZXcoKSwgMS4wZiwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0IH07CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1p
dGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSwgbGVu
Z3RoLnR5cGUsIGxlbmd0aC52YWx1ZSksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZv
ckNzc0xlbmd0aCksIEZpeGVkKSk7CisgICAgICAgICAgICB9LCBbJl0gKGRvdWJsZSBwZXJjZW50
YWdlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPExlbmd0aD4oTGVuZ3RoKChm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHBlcmNlbnRh
Z2UpKSAvIDEwMCwgRml4ZWQpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAg
ICAgICBpZiAobGluZUhlaWdodCkKKyAgICAgICAgICAgIGZvbnRTdHlsZS5zZXRMaW5lSGVpZ2h0
KFdURk1vdmUobGluZUhlaWdodC52YWx1ZSgpKSk7CisgICAgfQorCisgICAgZm9udFN0eWxlLnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGZvbnRTdHls
ZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQuZm9udFNlbGVjdG9yKCkpOworCisgICAg
cmV0dXJuIGZvbnRTdHlsZTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVSZXNvbHZlRm9yRm9udFJhdy5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVSZXNvbHZlRm9yRm9udFJhdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMTBhNTAzNWQyZDk2M2ZlYThlZWI2
NjRiZGE5YmI2ODk1MmM2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVJlc29sdmVGb3JGb250UmF3LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQKKyAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCituYW1lc3BhY2UgQ1NT
UHJvcGVydHlQYXJzZXJIZWxwZXJzIHsKK3N0cnVjdCBGb250UmF3OworfQorCituYW1lc3BhY2Ug
U3R5bGUgeworCitPcHRpb25hbDxSZW5kZXJTdHlsZT4gcmVzb2x2ZUZvckZvbnRSYXcoY29uc3Qg
Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpGb250UmF3JiwgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYmLCBEb2N1bWVudCYpOworCit9Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRl
eCAwODJmMDZmZjQxYTg5Nzc4ZDhkODg3YzAwNjExZTA1MzUwMDU3MmE0Li5jYWU2MmU2NjgzNTY1
Njc3MGM4NjVjYWU3NWExNmM4ZDJjNzE5NmQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0xMS0xOCAgQ2hyaXMgTG9yZCAgPGNsb3JkQGlnYWxp
YS5jb20+CisKKyAgICAgICAgTWFrZSBDU1MgZm9udCBzaG9ydGhhbmRzIHBhcnNhYmxlIHdpdGhp
biBhIHdvcmtlciAoaS5lLiB3aXRob3V0IENTU1ZhbHVlUG9vbCkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjc5NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvY2Fu
dmFzL2VsZW1lbnQvdGV4dC1zdHlsZXMvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQtZXhwZWN0
ZWQudHh0OgorCiAyMDIwLTExLTE4ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2OTk0MC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52
YXMvZWxlbWVudC90ZXh0LXN0eWxlcy8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
Y2FudmFzL2VsZW1lbnQvdGV4dC1zdHlsZXMvMmQudGV4dC5mb250LnBhcnNlLmludmFsaWQtZXhw
ZWN0ZWQudHh0CmluZGV4IGNhNDg2ZGY4ZDk0ZTNlZjk2NTgzNmFlMjdjMWFmNzg5YThkZTEzYWEu
LmU5NWIyZDRhN2E5OWM0NzA4OTRlYWNjODZkMjQ4Y2JlMDFlM2E0NGEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9jYW52YXMvZWxl
bWVudC90ZXh0LXN0eWxlcy8yZC50ZXh0LmZvbnQucGFyc2UuaW52YWxpZC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL2Nh
bnZhcy9lbGVtZW50L3RleHQtc3R5bGVzLzJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkLWV4cGVj
dGVkLnR4dApAQCAtMSw1ICsxLDUgQEAKIDJkLnRleHQuZm9udC5wYXJzZS5pbnZhbGlkCiBBY3R1
YWwgb3V0cHV0OgogCi1GQUlMIENhbnZhcyB0ZXN0OiAyZC50ZXh0LmZvbnQucGFyc2UuaW52YWxp
ZCBhc3NlcnRfZXF1YWxzOiBjdHguZm9udCA9PT0gJzIwcHggc2VyaWYnIChnb3QgMTNweCBzYW5z
LXNlcmlmW3N0cmluZ10sIGV4cGVjdGVkIDIwcHggc2VyaWZbc3RyaW5nXSkgZXhwZWN0ZWQgIjIw
cHggc2VyaWYiIGJ1dCBnb3QgIjEzcHggc2Fucy1zZXJpZiIKK1BBU1MgQ2FudmFzIHRlc3Q6IDJk
LnRleHQuZm9udC5wYXJzZS5pbnZhbGlkCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>