<?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>156921</bug_id>
          
          <creation_ts>2016-04-22 12:50:07 -0700</creation_ts>
          <short_desc>Move selection and drawing of stretchy operators into a separate MathOperator class</short_desc>
          <delta_ts>2016-06-08 23:16:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>MathML</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>156906</dependson>
    
    <dependson>156910</dependson>
    
    <dependson>156913</dependson>
          <blocked>152244</blocked>
    
    <blocked>156950</blocked>
    
    <blocked>157071</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>alex</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rego</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1186375</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-22 12:50:07 -0700</bug_when>
    <thetext>Yet another step towards bug 152244.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186381</commentid>
    <comment_count>1</comment_count>
      <attachid>277087</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-22 13:02:38 -0700</bug_when>
    <thetext>Created attachment 277087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186382</commentid>
    <comment_count>2</comment_count>
      <attachid>277088</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-22 13:03:11 -0700</bug_when>
    <thetext>Created attachment 277088
Patch for EWS testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186602</commentid>
    <comment_count>3</comment_count>
      <attachid>277144</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-23 01:32:14 -0700</bug_when>
    <thetext>Created attachment 277144
Patch for EWS testing

I&apos;m removing the ASSERT for large operator until we know the exact operator type (bug 156950).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186879</commentid>
    <comment_count>4</comment_count>
      <attachid>277231</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-25 01:03:44 -0700</bug_when>
    <thetext>Created attachment 277231
Patch

Update patch to fix conflict after bug 156846 and bug 156906.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186951</commentid>
    <comment_count>5</comment_count>
      <attachid>277253</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-25 09:14:53 -0700</bug_when>
    <thetext>Created attachment 277253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187322</commentid>
    <comment_count>6</comment_count>
      <attachid>277355</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-26 05:07:51 -0700</bug_when>
    <thetext>Created attachment 277355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187733</commentid>
    <comment_count>7</comment_count>
      <attachid>277473</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-27 06:24:01 -0700</bug_when>
    <thetext>Created attachment 277473
Patch

Minor change: Remove useless MathOperator:: prefix in setGlyphAssembly during the code move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191145</commentid>
    <comment_count>8</comment_count>
      <attachid>278390</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-05-09 00:50:56 -0700</bug_when>
    <thetext>Created attachment 278390
Patch

Updating after https://trac.webkit.org/changeset/200569</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199569</commentid>
    <comment_count>9</comment_count>
      <attachid>278390</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-06-06 09:06:22 -0700</bug_when>
    <thetext>Comment on attachment 278390
Patch

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

Most of this is just code movement, so it looks good to me. I have a couple quick questions and nits though:

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:85
&gt; +    : m_baseCharacter(0)
&gt; +    , m_isVertical(false)
&gt; +    , m_stretchType(StretchType::Unstretched)
&gt; +    , m_width(0)
&gt; +    , m_ascent(0)
&gt; +    , m_descent(0)
&gt; +    , m_italicCorrection(0)

I think we are preferring in-class declaration initializers now. Perhaps that will allow you to remove this constructor.

http://www.stroustrup.com/C++11FAQ.html#member-init

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:103
&gt; +    ASSERT(sizeVariant.isValid() &amp;&amp; sizeVariant.font-&gt;mathData());

Make this ASSERT two separate ASSERTs so it is easier to tell from a stack trace which one failed.

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:128
&gt; +    baseGlyph.font-&gt;mathData()-&gt;getMathVariants(baseGlyph.glyph, true, sizeVariants, assemblyParts);

Move the declaration of sizeVariants and assemblyParts right before this line.

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:137
&gt; +        GlyphData glyphData(sizeVariant, baseGlyph.font);
&gt; +        setSizeVariant(glyphData);
&gt; +        m_italicCorrection = glyphData.font-&gt;mathData()-&gt;getItalicCorrection(*glyphData.font, glyphData.glyph);
&gt; +        if (heightForGlyph(glyphData) &gt;= displayOperatorMinHeight)
&gt; +            break;
&gt; +    }

Why not wait to call setSizeVariant and set m_italicCorrection until heightForGlyph(glyphData) &gt;= displayOperatorMinHeight is true?

&gt; Source/WebCore/rendering/mathml/MathOperator.cpp:140
&gt; +bool MathOperator::calculateGlyphAssemblyFallBack(const RenderStyle&amp; style, const Vector&lt;OpenTypeMathData::AssemblyPart&gt;&amp; assemblyParts, GlyphAssemblyData&amp; assemblyData) const

Nit: FallBack -&gt; Fallback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199572</commentid>
    <comment_count>10</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-06 09:11:30 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Source/WebCore/rendering/mathml/MathOperator.cpp:85
&gt; &gt; +    : m_baseCharacter(0)
&gt; &gt; +    , m_isVertical(false)
&gt; &gt; +    , m_stretchType(StretchType::Unstretched)
&gt; &gt; +    , m_width(0)
&gt; &gt; +    , m_ascent(0)
&gt; &gt; +    , m_descent(0)
&gt; &gt; +    , m_italicCorrection(0)
&gt; 
&gt; I think we are preferring in-class declaration initializers now. Perhaps
&gt; that will allow you to remove this constructor.

OK, I think I already did that in my branch after feedback in other patches :-)

&gt; &gt; Source/WebCore/rendering/mathml/MathOperator.cpp:137
&gt; &gt; +        GlyphData glyphData(sizeVariant, baseGlyph.font);
&gt; &gt; +        setSizeVariant(glyphData);
&gt; &gt; +        m_italicCorrection = glyphData.font-&gt;mathData()-&gt;getItalicCorrection(*glyphData.font, glyphData.glyph);
&gt; &gt; +        if (heightForGlyph(glyphData) &gt;= displayOperatorMinHeight)
&gt; &gt; +            break;
&gt; &gt; +    }
&gt; 
&gt; Why not wait to call setSizeVariant and set m_italicCorrection until
&gt; heightForGlyph(glyphData) &gt;= displayOperatorMinHeight is true?

So the idea is that if we were not able to find a large enough stretchy operator, we use the latest (largest) one in the list as a fallback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1199596</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-06-06 10:01:42 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; &gt; Source/WebCore/rendering/mathml/MathOperator.cpp:137
&gt; &gt; &gt; +        GlyphData glyphData(sizeVariant, baseGlyph.font);
&gt; &gt; &gt; +        setSizeVariant(glyphData);
&gt; &gt; &gt; +        m_italicCorrection = glyphData.font-&gt;mathData()-&gt;getItalicCorrection(*glyphData.font, glyphData.glyph);
&gt; &gt; &gt; +        if (heightForGlyph(glyphData) &gt;= displayOperatorMinHeight)
&gt; &gt; &gt; +            break;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Why not wait to call setSizeVariant and set m_italicCorrection until
&gt; &gt; heightForGlyph(glyphData) &gt;= displayOperatorMinHeight is true?
&gt; 
&gt; So the idea is that if we were not able to find a large enough stretchy
&gt; operator, we use the latest (largest) one in the list as a fallback.

Ah, I understand. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200366</commentid>
    <comment_count>12</comment_count>
      <attachid>280783</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-08 00:05:21 -0700</bug_when>
    <thetext>Created attachment 280783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1200737</commentid>
    <comment_count>13</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-08 23:16:21 -0700</bug_when>
    <thetext>Committed r201854: &lt;http://trac.webkit.org/changeset/201854&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277087</attachid>
            <date>2016-04-22 13:02:38 -0700</date>
            <delta_ts>2016-04-25 01:03:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>156921.patch</filename>
            <type>text/plain</type>
            <size>75754</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTIyODZiNi4uOTQ5NDZjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTEsNiArMjUxMSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA0ZTM4ZC4uNGFm
YmM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY1IEBACiAyMDE2LTA0LTIyICBGcmVkZXJpYyBX
YW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAorICAgICAgICBNb3ZlIHNlbGVjdGlvbiBhbmQgZHJh
d2luZyBvZiBzdHJldGNoeSBvcGVyYXRvcnMgaW50byBhIHNlcGFyYXRlIE1hdGhPcGVyYXRvciBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OiBBZGQgdGhlIE1hdGhPcGVyYXRvciBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpib3VuZHNGb3JH
bHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpoZWlnaHRGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAg
ICAgIChXZWJDb3JlOjphZHZhbmNlV2lkdGhGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0
aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogTW92ZWQgZnJvbSBSZW5k
ZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0U2l6
ZVZhcmlhbnQpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogTW92ZWQgZnJvbSBSZW5kZXJN
YXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmluZERpc3Bs
YXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yIHdp
dGggYWRkaXRpb25hbCBzdHlsZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lv
bkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50VmVy
dGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0
b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OmlzU3RyZXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6dW5z
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURh
dGE6OkdseXBoQXNzZW1ibHlEYXRhKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c3RyZXRjaFNpemUpOgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIEZvciBub3cg
d2UgY2FsbCBzZXRPcGVyYXRvciB0byB0cmFuc21pdCBpbmZvcm1hdGlvbiB0byBtX21hdGhPcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHls
ZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICBGb3Igbm93
IHdlIHNldCBzb21lIG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBp
bmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJz
dExpbmVCYXNlbGluZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQp
OiBEaXR0by4KKyAgICAgICAgRm9yIG5vdyB3ZSBzZXQgc29tZSBtX21hdGhPcGVyYXRvciBtZW1i
ZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbik6IFVwZGF0ZWQgdG8gdXNlIE1hdGhP
cGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnRyYWlsaW5nU3BhY2VFcnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW1i
bHlGYWxsQmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRo
VmVydGljYWxFeHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGlj
YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IFVwZGF0ZWQg
dG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IERlbGV0
ZWQuCisKKzIwMTYtMDQtMjIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOiByZWZhY3RvciBtYW5hZ2VtZW50IG9mIHN0cmV0
Y2h5IGRhdGEgYW5kIGl0YWxpYyBjb3JyZWN0aW9uCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5MTMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFiODM0YjguLmZhZDAyY2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE2NTksNiArMTY1OSw4IEBACiAJCTQzOTA0NkU4MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MzkwNDZENDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5o
ICovOyB9OwogCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
OTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovOyB9
OwogCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENjEy
REEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggKi87IH07CisJCTQzOTA0
NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODEyQUY4MEFDIC8q
IE1hdGhPcGVyYXRvci5jcHAgKi87IH07CisJCTQzOTA0NkVBMTJEQTI1RTgxMkFGODBBQyAvKiBN
YXRoT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAqLzsgfTsKIAkJ
NDM5MDQ2RUIxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ3MTJEQTI1RTgw
MEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgKi87IH07CiAJCTQzOTA0NkVDMTJEQTI1
RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRl
ck1hdGhNTFRva2VuLmggKi87IH07CiAJCTQzOUQzMzQzMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdB
bmltYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLzsgfTsK
QEAgLTkxODksNiArOTE5MSw4IEBACiAJCTQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxTY3JpcHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ck1hdGhNTFNjcmlwdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDUx
MkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1hdGhNTFVuZGVyT3Zlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0Mzkw
NDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhPcGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE9wZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ3MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJN
YXRoTUxUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJNYXRoTUxUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ4
MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzlEMzM0MDEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0ZWRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5MTIsNiArMTY5MTYsOCBAQAogCQkJCTQzOTA0
NkQ4MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovLAogCQkJCTQzOTA0
NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovLAogCQkJ
CTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLywK
KwkJCQk0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLywKKwkJ
CQk0MzkwNDZENjEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IG1hdGhtbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNzYxMiw2
ICsyNzYxOCw3IEBACiAJCQkJNDM5MDQ2RTYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFNxdWFyZVJvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBB
OSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250
cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZD
NSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjc1LDYgKzMx
MjgyLDcgQEAKIAkJCQk0MzkwNDZFNTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkg
LyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2RTkxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MzkwNDZFOTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlERTQ5QjMwOTE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVyTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGQTMwM0UxMzE2QzI5
QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjMzY3MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApAQCAtMCww
ICsxLDUxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKE1BVEhNTCkKKyNpbmNsdWRlICJNYXRoT3BlcmF0b3IuaCIKKworI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBGbG9hdFJlY3QgYm91bmRzRm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBkYXRhLmZvbnQgJiYgZGF0
YS5nbHlwaCA/IGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlwaCkgOiBGbG9hdFJl
Y3QoKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBoZWlnaHRGb3JHbHlwaChjb25zdCBHbHlw
aERhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIGJvdW5kc0ZvckdseXBoKGRhdGEpLmhlaWdodCgp
OworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFkdmFuY2VXaWR0aEZvckdseXBoKGNvbnN0IEds
eXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gZGF0YS5mb250ICYmIGRhdGEuZ2x5cGggPyBk
YXRhLmZvbnQtPndpZHRoRm9yR2x5cGgoZGF0YS5nbHlwaCkgOiAwOworfQorCisvLyBGSVhNRTog
VGhpcyBoYXJkY29kZWQgZGF0YSBjYW4gYmUgcmVtb3ZlZCB3aGVuIE9wZW5UeXBlIE1BVEggZm9u
dCBhcmUgd2lkZWx5IGF2YWlsYWJsZSAoaHR0cDovL3drYnVnLzE1NjgzNykuCitzdHJ1Y3QgU3Ry
ZXRjaHlDaGFyYWN0ZXIgeworICAgIFVDaGFyIGNoYXJhY3RlcjsKKyAgICBVQ2hhciB0b3BDaGFy
OworICAgIFVDaGFyIGV4dGVuc2lvbkNoYXI7CisgICAgVUNoYXIgYm90dG9tQ2hhcjsKKyAgICBV
Q2hhciBtaWRkbGVDaGFyOworfTsKKy8vIFRoZSBmaXJzdCBsZWZ0UmlnaHRQYWlyc0NvdW50IHBh
aXJzIGNvcnJlc3BvbmQgdG8gbGVmdC9yaWdodCBmZW5jZXMgdGhhdCBjYW4gZWFzaWx5IGJlIG1p
cnJvcmVkIGluIFJUTC4KK3N0YXRpYyBjb25zdCBzaG9ydCBsZWZ0UmlnaHRQYWlyc0NvdW50ID0g
NTsKK3N0YXRpYyBjb25zdCBTdHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRd
ID0geworICAgIHsgMHgyOCAgLCAweDIzOWIsIDB4MjM5YywgMHgyMzlkLCAweDAgICAgfSwgLy8g
bGVmdCBwYXJlbnRoZXNpcworICAgIHsgMHgyOSAgLCAweDIzOWUsIDB4MjM5ZiwgMHgyM2EwLCAw
eDAgICAgfSwgLy8gcmlnaHQgcGFyZW50aGVzaXMKKyAgICB7IDB4NWIgICwgMHgyM2ExLCAweDIz
YTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4NWQg
ICwgMHgyM2E0LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IHNxdWFyZSBicmFj
a2V0CisgICAgeyAweDdiICAsIDB4MjNhNywgMHgyM2FhLCAweDIzYTksIDB4MjNhOCB9LCAvLyBs
ZWZ0IGN1cmx5IGJyYWNrZXQKKyAgICB7IDB4N2QgICwgMHgyM2FiLCAweDIzYWEsIDB4MjNhZCwg
MHgyM2FjIH0sIC8vIHJpZ2h0IGN1cmx5IGJyYWNrZXQKKyAgICB7IDB4MjMwOCwgMHgyM2ExLCAw
eDIzYTIsIDB4MjNhMiwgMHgwICAgIH0sIC8vIGxlZnQgY2VpbGluZworICAgIHsgMHgyMzA5LCAw
eDIzYTQsIDB4MjNhNSwgMHgyM2E1LCAweDAgICAgfSwgLy8gcmlnaHQgY2VpbGluZworICAgIHsg
MHgyMzBhLCAweDIzYTIsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBmbG9vcgor
ICAgIHsgMHgyMzBiLCAweDIzYTUsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQg
Zmxvb3IKKyAgICB7IDB4N2MgICwgMHg3YywgICAweDdjLCAgIDB4N2MsICAgMHgwICAgIH0sIC8v
IHZlcnRpY2FsIGJhcgorICAgIHsgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDAg
ICAgfSwgLy8gZG91YmxlIHZlcnRpY2FsIGxpbmUKKyAgICB7IDB4MjIyNSwgMHgyMjI1LCAweDIy
MjUsIDB4MjIyNSwgMHgwICAgIH0sIC8vIHBhcmFsbGVsIHRvCisgICAgeyAweDIyMmIsIDB4MjMy
MCwgMHgyM2FlLCAweDIzMjEsIDB4MCAgICB9IC8vIGludGVncmFsIHNpZ24KK307CisKK01hdGhP
cGVyYXRvcjo6TWF0aE9wZXJhdG9yKCkKKyAgICA6IG1fYmFzZUNoYXJhY3RlcigwKQorICAgICwg
bV9pc1ZlcnRpY2FsKGZhbHNlKQorICAgICwgbV9zdHJldGNoVHlwZShVbnN0cmV0Y2hlZCkKKyAg
ICAsIG1fd2lkdGgoMCkKKyAgICAsIG1fYXNjZW50KDApCisgICAgLCBtX2Rlc2NlbnQoMCkKKyAg
ICAsIG1faXRhbGljQ29ycmVjdGlvbigwKQoreworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6c2V0
T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKQoreworICAgIG1f
YmFzZUNoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXI7CisgICAgbV9pc1ZlcnRpY2FsID0gaXNWZXJ0
aWNhbDsKK30KKworYm9vbCBNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdAoreworICAgIGJhc2VHbHlw
aCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fYmFzZUNoYXJh
Y3RlciwgIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGJhc2VH
bHlwaC5pc1ZhbGlkKCkgJiYgYmFzZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnQoKTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KGNv
bnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCit7CisgICAgQVNTRVJUKHNpemVWYXJpYW50Lmlz
VmFsaWQoKSAmJiBzaXplVmFyaWFudC5mb250LT5tYXRoRGF0YSgpKTsKKyAgICBtX3N0cmV0Y2hU
eXBlID0gU2l6ZVZhcmlhbnQ7CisgICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7Cit9CisKK3Zv
aWQgTWF0aE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IE1hdGhPcGVyYXRvcjo6R2x5
cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKK3sKKyAgICBtX3N0cmV0Y2hUeXBlID0gR2x5
cGhBc3NlbWJseTsKKyAgICBtX2Fzc2VtYmx5ID0gYXNzZW1ibHlEYXRhOworfQorCit2b2lkIE1h
dGhPcGVyYXRvcjo6ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQoreworICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9y
SW5EaXNwbGF5U3R5bGUoKSk7CisKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICgh
Z2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERh
dGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7
CisgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0
czsKKworICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29t
ZXRpbWVzIHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7
Mn0gdGltZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCisgICAgZmxvYXQgZGlzcGxheU9w
ZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBo
KGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZv
bnQtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBl
TWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOworCisgICAgYmFzZUdseXBoLmZv
bnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNp
emVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisKKyAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0
IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3Bl
cmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJp
YW50LgorICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAg
ICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOworICAgICAgICBtX2l0YWxpY0NvcnJlY3Rp
b24gPSBnbHlwaERhdGEuZm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5
cGhEYXRhLmZvbnQsIGdseXBoRGF0YS5nbHlwaCk7CisgICAgICAgIGlmIChoZWlnaHRGb3JHbHlw
aChnbHlwaERhdGEpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworYm9vbCBNYXRoT3BlcmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxs
QmFjayhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhE
YXRhOjpBc3NlbWJseVBhcnQ+JiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNz
ZW1ibHlEYXRhKQoreworICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRo
IHRhYmxlIGlzIGEgYml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQg
YnkgdGhlIE1hdGhPcGVyYXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFz
b25hYmxlIHdheS4KKyAgICAvLyBGSVhNRTogTWF0aE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRo
ZSBtb3N0IGdlbmVyYWwgZm9ybWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMwMzI3KS4KKyAgICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29t
cG9uZW50cyBmdW5jdGlvbiBpbiBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9t
YXN0ZXIvZm9udHMvT3BlblR5cGVNYXRoL2ZvbnRVdGlsLnB5CisKKyAgICAvLyBXZSBjb3VudCB0
aGUgbnVtYmVyIG9mIG5vbiBleHRlbmRlciBwaWVjZXMuCisgICAgaW50IG5vbkV4dGVuZGVyQ291
bnQgPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAg
aWYgKCFwYXJ0LmlzRXh0ZW5kZXIpCisgICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7Cisg
ICAgfQorICAgIGlmIChub25FeHRlbmRlckNvdW50ID4gMykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCisK
KyAgICAvLyBXZSBub3cgYnJvd3NlIHRoZSBsaXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmln
aHQgZm9yIGhvcml6b250YWwgb3BlcmF0b3JzIGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZl
cnRpY2FsIG9wZXJhdG9ycy4KKyAgICBlbnVtIFBhcnRUeXBlIHsKKyAgICAgICAgU3RhcnQsCisg
ICAgICAgIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlLAorICAgICAgICBNaWRkbGUsCisg
ICAgICAgIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZCwKKyAgICAgICAgRW5kLAorICAgICAg
ICBOb25lCisgICAgfTsKKyAgICBQYXJ0VHlwZSBleHBlY3RlZCA9IFN0YXJ0OworICAgIGFzc2Vt
Ymx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOworICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5
cGggPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAg
aWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBvbmx5IGhh
dmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVuIHdlIHNraXAgdGhlIG1pZGRsZSBnbHlw
aC4KKyAgICAgICAgICAgIGlmIChleHBlY3RlZCA9PSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1p
ZGRsZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFu
ZEVuZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkID09IE1pZGRsZSkKKyAgICAgICAg
ICAgICAgICBleHBlY3RlZCA9IEVuZDsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydC5pc0V4
dGVuZGVyKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgp
CisgICAgICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5
cGg7IC8vIFdlIGNvcHkgdGhlIGV4dGVuZGVyIHBhcnQuCisgICAgICAgICAgICBlbHNlIGlmIChh
c3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBo
YXMgZGlmZmVyZW50IGV4dGVuZGVycy4KKworICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZCkg
eworICAgICAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUg
dGhlIGxlZnQvYm90dG9tIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBFeHRlbmRl
ckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbWlk
ZGxlIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBFeHRlbmRlckJldHdlZW5NaWRk
bGVBbmRFbmQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXNlIEVu
ZDoKKyAgICAgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5v
dCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRB
bmRNaWRkbGU6CisgICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoK
KyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZXh0ZW5k
ZXJzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZCkgeworICAgICAgICBjYXNlIFN0YXJ0OgorICAg
ICAgICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KKyAgICAgICAgICAgIGFz
c2VtYmx5RGF0YS5ib3R0b20uZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAgZXhwZWN0
ZWQgPSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICBj
YXNlIE1pZGRsZToKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgorICAg
ICAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAg
ICAgICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKKyAg
ICAgICAgY2FzZSBFbmQ6CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFy
dC4KKyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS50b3AuZ2x5cGggPSBwYXJ0LmdseXBoOworICAg
ICAgICAgICAgZXhwZWN0ZWQgPSBOb25lOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNhc2UgTm9uZToKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290
IGFuIHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQuCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24u
Z2x5cGgpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3
ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCisKKyAgICAv
LyBJZiB3ZSBkb24ndCBoYXZlIHRvcC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lv
biBnbHlwaC4KKyAgICBpZiAoIWFzc2VtYmx5RGF0YS50b3AuZ2x5cGgpCisgICAgICAgIGFzc2Vt
Ymx5RGF0YS50b3AuZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOworICAgIGlm
ICghYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRv
bS5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisKKyAgICBhc3NlbWJseURh
dGEudG9wLmZvbnQgPSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGFz
c2VtYmx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0YS50b3AuZm9udDsKKyAgICBh
c3NlbWJseURhdGEuYm90dG9tLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZvbnQ7CisgICAgYXNz
ZW1ibHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA/IGFzc2Vt
Ymx5RGF0YS50b3AuZm9udCA6IG51bGxwdHI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkKK3sKKyAg
ICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7CisKKyAgICBHbHlw
aERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CisgICAg
ICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3Vn
aC4KKyAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlw
aChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKyAgICAgICAg
aWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7CisgICAg
aWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CisgICAgICAgIFZlY3RvcjxHbHlwaD4g
c2l6ZVZhcmlhbnRzOworICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOworICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+
Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFu
dHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFu
dHMuCisgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAg
ICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250
KTsKKyAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKKyAgICAgICAgICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGdseXBoRGF0YSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBz
aXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VX
aWR0aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFy
Z2V0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9u
LgorICAgICAgICBpZiAoIWdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHlsZSwgYXNzZW1ibHlQ
YXJ0cywgYXNzZW1ibHlEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sg
dG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgorICAgICAgICBjb25zdCBTdHJldGNo
eUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmNoYXJhY3Rl
ciA9PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdHJldGNoeUNoYXJhY3Rl
ciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghc3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3Vu
dCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxl
ZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRpbmcgLTEgb3Ig
KzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCisgICAgICAgICAgICAgICAgICAg
IGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRoaXMgY2hhcmFj
dGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgorICAgICAgICBpZiAoIXN0cmV0
Y2h5Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdlIGNvbnZl
cnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRh
dGEuCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOworICAg
ICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsK
KyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbSA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7Cisg
ICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hh
ciA/IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hh
cmFjdGVyLT5taWRkbGVDaGFyLCBmYWxzZSkgOiBHbHlwaERhdGEoKTsKKyAgICB9CisKKyAgICAv
LyBJZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBtYXhpbXVtIHdpZHRoLCB2ZXJpZnkgZWFjaCBjb21w
b25lbnQuCisgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAgICptYXhpbXVtR2x5
cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5
cGgoYXNzZW1ibHlEYXRhLnRvcCkpOworICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6
Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0
YS5leHRlbnNpb24pKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1h
eGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxl
KSk7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhX
aWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZW5zdXJlIHRoYXQgdGhlIHNpemUgaXMgbGFy
Z2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBzLgorICAgIGZsb2F0IG1pblNpemUgPSBt
X2lzVmVydGljYWwgPworICAgICAgICBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEudG9wKSAr
IGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNz
ZW1ibHlEYXRhLmJvdHRvbSkKKyAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJs
eURhdGEubGVmdCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSAr
IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5yaWdodCk7CisgICAgaWYgKG1pblNp
emUgPiB0YXJnZXRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRHbHlwaEFzc2VtYmx5
KGFzc2VtYmx5RGF0YSk7Cit9CisKK0xheW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEdseXBo
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERh
dGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0
cmltKQoreworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEp
OworCisgICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5
cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkp
KTsKKyAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkp
OworCisgICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBh
bm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcwor
ICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291
bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUgbGVzcworICAgIC8v
IHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFs
bCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCisgICAgRmxvYXRSZWN0IGNsaXBCb3Vu
ZHMgPSBpbmZvLnJlY3Q7CisgICAgc3dpdGNoICh0cmltKSB7CisgICAgY2FzZSBUcmltVG9wOgor
ICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNl
aWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVj
dC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Cb3R0b206CisgICAgICAgIGds
eXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3Io
KSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVj
dC5tYXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206Cisg
ICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2Vp
bCgpICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBh
aW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRy
aW1MZWZ0OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QueCgpLmNlaWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlw
aFBhaW50UmVjdC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1SaWdodDoKKyAg
ICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgo
KS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBo
UGFpbnRSZWN0Lm1heFgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUxlZnRBbmRS
aWdodDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0
LngoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRv
KGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMu
c2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hp
ZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7CisgICAgfQorCisgICAgLy8gQ2xp
cHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBh
dCBqb2luZWQgZWRnZXMuCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGluZm8uY29udGV4dCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwor
CisgICAgR2x5cGhCdWZmZXIgYnVmZmVyOworICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0
YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7CisgICAgaW5mby5jb250ZXh0KCku
ZHJhd0dseXBocyhzdHlsZS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEs
IG9yaWdpbik7CisKKyAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Cit9CisKK3ZvaWQgTWF0aE9w
ZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBM
YXlvdXRQb2ludCYgdG8pCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJU
KG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHku
ZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7CisK
KyAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2Ug
ZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoaW5mby5jb250ZXh0KCkpOworCisgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV9hc3NlbWJseS5leHRlbnNpb24pOworCisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4
dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIg
Z2x5cGggaW50byB0aGUKKyAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91
dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBs
YXRlciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Cisg
ICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55KCkpOworICAgIGNsaXBCb3VuZHMuc2hp
ZnRNYXhZRWRnZVRvKHRvLnkoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRz
KTsKKworICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRo
ZSB0b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhl
bHMuCisgICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7Cisg
ICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55
KCkgLSBvZmZzZXRUb0dseXBoVG9wKTsKKyAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJl
Y3QoZnJvbSwgRmxvYXRTaXplKCkpOworCisgICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0
Lm1heFkoKSA8IHRvLnkoKSkgeworICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50
R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJp
bVRvcEFuZEJvdHRvbSk7CisgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZ2x5cGhPcmlnaW4ueSgp
ICsgbGFzdFBhaW50ZWRHbHlwaFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVub3VnaCB0aGUgZ2x1ZSBn
bHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3RhbmdsZQorICAgICAgICAvLyB3
aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5vdGhpbmcuCisgICAgICAg
IGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNp
b25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sKKyAgICBBU1NFUlQo
IW1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJs
eSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CisgICAgQVNT
RVJUKGZyb20ueCgpIDw9IHRvLngoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBm
b3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAg
ICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOworCisgICAgLy8g
Q2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBi
b3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0
b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBh
bmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMg
PSBpbmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZnJvbS54KCkpOworICAg
IGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngoKSk7CisgICAgaW5mby5jb250ZXh0KCku
Y2xpcChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdv
IHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92ZSBp
dCBsZWZ0IGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQgb2Zmc2V0VG9HbHlwaExlZnQgPSAtMjsK
KyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpICsgb2Zm
c2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgpLCB0by55KCkpKTsKKyAgICBGbG9hdFJl
Y3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOworCisgICAgd2hpbGUg
KGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkgeworICAgICAgICBsYXN0UGFp
bnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5z
aW9uLCBnbHlwaE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7CisgICAgICAgIGdseXBoT3JpZ2lu
LnNldFgoZ2x5cGhPcmlnaW4ueCgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qud2lkdGgoKSk7CisK
KyAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21h
bGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVj
dGFuZ2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRy
YXcgbm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50
VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgQVNTRVJUKG1f
aXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7
CisgICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wLmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKG1fYXNz
ZW1ibHkuYm90dG9tLmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhl
IGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1
cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0UG9p
bnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0ID0g
Y2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBGbG9hdFJlY3QgdG9wR2x5cGhC
b3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcCk7CisgICAgTGF5b3V0UG9pbnQg
dG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAt
IHRvcEdseXBoQm91bmRzLnkoKSk7CisgICAgTGF5b3V0UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9
IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkudG9wLCB0b3BHbHlwaE9yaWdpbiwg
VHJpbUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhCb3VuZHMgPSBib3VuZHNG
b3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbSk7CisgICAgTGF5b3V0UG9pbnQgYm90dG9tR2x5cGhP
cmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIHN0cmV0Y2hT
aXplKCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5kcy55
KCkpKTsKKyAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChz
dHlsZSwgaW5mbywgbV9hc3NlbWJseS5ib3R0b20sIGJvdHRvbUdseXBoT3JpZ2luLCBUcmltVG9w
KTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8g
Q2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBw
YWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50IGhlaWdodCB0b3dhcmQg
dGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRSZWN0IG1pZGRsZUdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAgICAgICBMYXlvdXRQb2ludCBt
aWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BHbHlwaE9yaWdpbi55KCkp
OworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgKGJvdHRv
bUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1heFkoKSkgLyAyLjApKTsK
KyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KDAsIG1pZGRsZUds
eXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVH
bHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkubWlkZGxl
LCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAgICAgIGZpbGxXaXRo
VmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWlu
WE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Cisg
ICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbWlkZGxl
R2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWlu
WE1pbllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRl
bnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIo
KSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Cit9CisKK3ZvaWQgTWF0
aE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Cit7CisgICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBl
ID09IEdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmxlZnQuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5yaWdodC5pc1ZhbGlkKCkpOworCisgICAgLy8gV2Ug
YXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQg
Z2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQg
Ym94LgorICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50T2Zmc2V0OworICAg
IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7CisgICAg
TGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9y
VG9wTGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCBsZWZ0R2x5cGhQYWludFJl
Y3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmxlZnQsIGxlZnRHbHlwaE9y
aWdpbiwgVHJpbVJpZ2h0KTsKKworICAgIEZsb2F0UmVjdCByaWdodEdseXBoQm91bmRzID0gYm91
bmRzRm9yR2x5cGgobV9hc3NlbWJseS5yaWdodCk7CisgICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlw
aE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpICsgbV93aWR0aCAtIHJpZ2h0R2x5cGhCb3VuZHMu
d2lkdGgoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsKKyAgICBMYXlvdXRSZWN0
IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5
LnJpZ2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVmdCk7CisKKyAgICBMYXlvdXRQb2ludCBi
YXNlbGluZVNoaWZ0KDAsIG1fYXNjZW50KTsKKyAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNW
YWxpZCgpKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhl
IHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KKyAgICAgICAgTGF5b3V0UG9pbnQg
bWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVmdEdseXBoT3JpZ2luLnko
KSk7CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgocmlnaHRH
bHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4WCgpKSAvIDIuMCwgMCkp
OworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChz
dHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltTGVm
dEFuZFJpZ2h0KTsKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5
bGUsIGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVT
aGlmdCwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hp
ZnQpOworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5m
bywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQs
IHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOwor
ICAgIH0gZWxzZQorICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHls
ZSwgaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNo
aWZ0LCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0
KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L01hdGhPcGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGRl
MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01h
dGhPcGVyYXRvci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIE1hdGhPcGVyYXRvcl9oCisjZGVmaW5lIE1hdGhPcGVyYXRvcl9oCisKKyNpZiBFTkFC
TEUoTUFUSE1MKQorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKKyNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
CisjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZW5kZXJTdHlsZTsKKworY2xhc3MgTWF0aE9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBN
YXRoT3BlcmF0b3IoKTsKKyAgICB2b2lkIHNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIs
IGJvb2wgaXNWZXJ0aWNhbCk7CisKKyAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KKworICAgIGJvb2wgaXNTdHJldGNo
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0Y2hUeXBlICE9IFVuc3RyZXRjaGVkOyB9CisgICAg
dm9pZCB1bnN0cmV0Y2goKSB7IG1fc3RyZXRjaFR5cGUgPSBVbnN0cmV0Y2hlZDsgfQorCisgICAg
Ly8gRklYTUU6IEFsbCB0aGUgY29kZSBiZWxvdyBzaG91bGQgYmUgcHJpdmF0ZSB3aGVuIGl0IGlz
IG5vIGxvbmdlciBuZWVkZWQgYnkgUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTUyMjQ0KS4KKworICAgIHN0cnVjdCBHbHlwaEFzc2VtYmx5RGF0YSB7CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSB0b3A7CisgICAgICAgICAgICBHbHlwaERh
dGEgcmlnaHQ7CisgICAgICAgIH07CisgICAgICAgIEdseXBoRGF0YSBleHRlbnNpb247CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSBib3R0b207CisgICAgICAgICAgICBH
bHlwaERhdGEgbGVmdDsKKyAgICAgICAgfTsKKyAgICAgICAgR2x5cGhEYXRhIG1pZGRsZTsKKyAg
ICBHbHlwaEFzc2VtYmx5RGF0YSgpCisgICAgOiB0b3AoKSwgZXh0ZW5zaW9uKCksIGJvdHRvbSgp
LCBtaWRkbGUoKSB7IH0KKyAgICB9OworICAgIGVudW0gU3RyZXRjaFR5cGUgeworICAgICAgICBV
bnN0cmV0Y2hlZCwKKyAgICAgICAgU2l6ZVZhcmlhbnQsCisgICAgICAgIEdseXBoQXNzZW1ibHkK
KyAgICB9OworICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKKyAgICAgICAgVHJpbVRvcCwK
KyAgICAgICAgVHJpbUJvdHRvbSwKKyAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKKyAgICAgICAg
VHJpbUxlZnQsCisgICAgICAgIFRyaW1SaWdodCwKKyAgICAgICAgVHJpbUxlZnRBbmRSaWdodAor
ICAgIH07CisKKyAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9p
c1ZlcnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOyB9OworICAgIGJvb2wg
Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7CisgICAg
dm9pZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKKyAgICB2b2lkIHNldEdseXBo
QXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSYpOworICAgIHZv
aWQgZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAg
ICB2b2lkIGZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCogbWF4aW11
bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOworICAgIGJvb2wgZ2V0R2x5
cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgVmVjdG9yPE9wZW5U
eXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpOworCisgICAg
TGF5b3V0UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29u
c3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1t
aW5nKTsKKyAgICB2b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5k
ZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlv
dXRQb2ludCYgdG8pOworICAgIHZvaWQgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgo
Y29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwg
Y29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFzc2Vt
Ymx5KGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
KyAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUm
LCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgVUNoYXIgbV9iYXNlQ2hh
cmFjdGVyOworICAgIGJvb2wgbV9pc1ZlcnRpY2FsOworICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRj
aFR5cGU7CisgICAgdW5pb24geworICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OworICAgICAg
ICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5OworICAgIH07CisgICAgTGF5b3V0VW5pdCBt
X3dpZHRoOworICAgIExheW91dFVuaXQgbV9hc2NlbnQ7CisgICAgTGF5b3V0VW5pdCBtX2Rlc2Nl
bnQ7CisgICAgTGF5b3V0VW5pdCBtX2l0YWxpY0NvcnJlY3Rpb247Cit9OworCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTUFUSE1MKQorI2VuZGlmIC8vIE1hdGhPcGVyYXRvcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwCmluZGV4IDc5MDkwMmQuLjI3ZjFiZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC00NSwzMyAr
NDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB1c2luZyBuYW1lc3BhY2UgTWF0aE1M
TmFtZXM7CiAKLS8vIEZJWE1FOiBUaGUgT3BlblR5cGUgTUFUSCB0YWJsZSBjb250YWlucyBpbmZv
cm1hdGlvbiB0aGF0IHNob3VsZCBvdmVycmlkZSB0aGlzIHRhYmxlIChodHRwOi8vd2tidWcvMTIy
Mjk3KS4KLXN0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7Ci0gICAgVUNoYXIgY2hhcmFjdGVyOwot
ICAgIFVDaGFyIHRvcENoYXI7Ci0gICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKLSAgICBVQ2hhciBi
b3R0b21DaGFyOwotICAgIFVDaGFyIG1pZGRsZUNoYXI7Ci19OwotLy8gVGhlIGZpcnN0IGxlZnRS
aWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0
IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgotc3RhdGljIGNvbnN0IHNob3J0IGxlZnRS
aWdodFBhaXJzQ291bnQgPSA1Owotc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0
Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7Ci0gICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAweDIz
OWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCi0gICAgeyAweDI5ICAsIDB4MjM5ZSwg
MHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcwotICAgIHsgMHg1
YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJh
Y2tldAotICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8g
cmlnaHQgc3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNh
OSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAotICAgIHsgMHg3ZCAgLCAweDIzYWIs
IDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAotICAgIHsg
MHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWlsaW5n
Ci0gICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyByaWdo
dCBjZWlsaW5nCi0gICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAgICB9
LCAvLyBsZWZ0IGZsb29yCi0gICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4
MCAgICB9LCAvLyByaWdodCBmbG9vcgotICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3
YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCi0gICAgeyAweDIwMTYsIDB4MjAxNiwgMHgy
MDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQotICAgIHsgMHgy
MjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8KLSAg
ICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwg
c2lnbgotfTsKLQogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhNTE9wZXJhdG9yKE1h
dGhNTEVsZW1lbnQmIGVsZW1lbnQsIFJlZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSkKICAgICA6IFJl
bmRlck1hdGhNTFRva2VuKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9zdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSgwKQpAQCAtMjk0LDggKzI2Nyw5IEBAIHZvaWQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRl
bnQsIG1faXNWZXJ0aWNhbCk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBmbG9hdCBt
YXhpbXVtR2x5cGhXaWR0aCA9IGdldEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpID8gYWR2
YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKSA6IDA7CisgICAgZmxvYXQgbWF4aW11bUdseXBo
V2lkdGggPSBtX21hdGhPcGVyYXRvci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/
IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCkgOiAwOwogICAgIGlmICghbV9pc1ZlcnRp
Y2FsKSB7CiAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCiAg
ICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IHN0cmV0Y2hTaXplKCk7CkBAIC0zMDUsMTIg
KzI3OSwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpCiAgICAgfQogICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHls
ZSgpKSB7CiAgICAgICAgIC8vIExhcmdlIG9wZXJhdG9ycyBpbiBTVElYIFdvcmQgaGF2ZSBpbmNv
cnJlY3QgYWR2YW5jZSB3aWR0aCwgY2F1c2luZyBtaXNwbGFjZW1lbnQgb2Ygc3VwZXJzY3JpcHQs
IHNvIHdlIHVzZSB0aGUgZ2x5cGggYm91bmQgaW5zdGVhZCAoaHR0cDovL3NvdXJjZWZvcmdlLm5l
dC9wL3N0aXhmb250cy90cmFja2luZy80OS8pLgotICAgICAgICBmaW5kRGlzcGxheVN0eWxlTGFy
Z2VPcGVyYXRvcigpOwotICAgICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFudCkK
LSAgICAgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50
KS53aWR0aCgpOworICAgICAgICBtX21hdGhPcGVyYXRvci5maW5kRGlzcGxheVN0eWxlTGFyZ2VP
cGVyYXRvcihzdHlsZSgpKTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5
cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFyaWFudCkKKyAgICAgICAgICAgIG1heGltdW1HbHlw
aFdpZHRoID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KS53aWR0aCgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAoZS5nLiB0aGUg
b25lIGZvciAiRlJBQ1RJT04gU0xBU0giIGluIHRoZSBTVElYIE1hdGggZm9udCBvciBsYXJnZSBv
cGVyYXRvcnMpIGhhdmUgYSB3aWR0aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdodCwgcmVzdWx0
aW5nIGluIGxhcmdlIGdhcHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzAzMjYpLgotICAgICAgICBmaW5kU3RyZXRjaHlEYXRhKCZtYXhpbXVtR2x5cGhXaWR0aCk7
CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRTdHJldGNoeURhdGEoc3R5bGUoKSwgJm1heGlt
dW1HbHlwaFdpZHRoKTsKICAgICB9CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBt
X21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgbWF4aW11bUdseXBo
V2lkdGggKyBtX3RyYWlsaW5nU3BhY2U7CiB9CkBAIC0zNzQsMjQ1ICszNDgsMTQgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWwKICAgICB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKIH0KIAot
Ym9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgpIGNvbnN0Ci17Ci0gICAgYmFzZUdseXBoID0g
c3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwg
IXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGJhc2VHbHlwaC5p
c1ZhbGlkKCkgJiYgYmFzZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQo
Y29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFudCkKLXsKLSAgICBBU1NFUlQoc2l6ZVZhcmlhbnQu
aXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZvbnQtPm1hdGhEYXRhKCkpOwotICAgIG1fc3RyZXRj
aFR5cGUgPSBTaXplVmFyaWFudDsKLSAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKLX0KLQot
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFz
c2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQotewotICAgIG1fc3RyZXRjaFR5cGUgPSBHbHlwaEFz
c2VtYmx5OwotICAgIG1fYXNzZW1ibHkgPSBhc3NlbWJseURhdGE7Ci19Ci0KLWJvb2wgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhWZWN0b3I8T3BlblR5cGVN
YXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYg
YXNzZW1ibHlEYXRhKSBjb25zdAotewotICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4g
VHlwZSBNYXRoIHRhYmxlIGlzIGEgYml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVu
dGx5IHVzZWQgYnkgdGhlIFJlbmRlck1hdGhNTE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBm
YWxsYmFjayBpbiBhIHJlYXNvbmFibGUgd2F5LgotICAgIC8vIEZJWE1FOiBSZW5kZXJNYXRoTUxP
cGVyYXRvciBzaG91bGQgc3VwcG9ydCB0aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNykuCi0gICAgLy8gV2UgdXNlIHRo
ZSBhcHByb2FjaCBvZiB0aGUgY29weUNvbXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9t
YXRoamF4L01hdGhKYXgtZGV2L2Jsb2IvbWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRp
bC5weQotCi0gICAgLy8gV2UgY291bnQgdGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2Vz
LgotICAgIGludCBub25FeHRlbmRlckNvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBh
c3NlbWJseVBhcnRzKSB7Ci0gICAgICAgIGlmICghcGFydC5pc0V4dGVuZGVyKQotICAgICAgICAg
ICAgbm9uRXh0ZW5kZXJDb3VudCsrOwotICAgIH0KLSAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+
IDMpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVy
ZSBhcmUgdG9vIG1hbnkgcGllY2VzLgotCi0gICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBv
ZiBwaWVjZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQg
ZnJvbSBib3R0b20gdG8gdG9wIGZvciB2ZXJ0aWNhbCBvcGVyYXRvcnMuCi0gICAgZW51bSBQYXJ0
VHlwZSB7Ci0gICAgICAgIFN0YXJ0LAotICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1p
ZGRsZSwKLSAgICAgICAgTWlkZGxlLAotICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRF
bmQsCi0gICAgICAgIEVuZCwKLSAgICAgICAgTm9uZQotICAgIH07Ci0gICAgUGFydFR5cGUgZXhw
ZWN0ZWQgPSBTdGFydDsKLSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKLSAg
ICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBh
c3NlbWJseVBhcnRzKSB7Ci0gICAgICAgIGlmIChub25FeHRlbmRlckNvdW50IDwgMykgewotICAg
ICAgICAgICAgLy8gSWYgd2Ugb25seSBoYXZlIGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhl
biB3ZSBza2lwIHRoZSBtaWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBpZiAoZXhwZWN0ZWQgPT0g
RXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQg
PSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChleHBl
Y3RlZCA9PSBNaWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBFbmQ7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHBhcnQuaXNFeHRlbmRlcikgewotICAgICAgICAgICAgaWYgKCFhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZ2x5cGggPSBwYXJ0LmdseXBoOyAvLyBXZSBjb3B5IHRoZSBleHRlbmRlciBwYXJ0
LgotICAgICAgICAgICAgZWxzZSBpZiAoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCAhPSBw
YXJ0LmdseXBoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qg
c3VwcG9ydGVkOiB0aGUgYXNzZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCi0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZXhwZWN0ZWQpIHsKLSAgICAgICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgotICAgICAgICAg
ICAgICAgIGV4cGVjdGVkID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAg
ICAgICAvLyBXZSBpZ25vcmUgdGhlIG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVj
dGVkID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY2FzZSBFbmQ6Ci0gICAgICAgICAgICBjYXNlIE5vbmU6Ci0gICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3Rl
ZCBleHRlbmRlci4KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBj
YXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgotICAgICAgICAgICAgY2FzZSBFeHRl
bmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIG11
bHRpcGxlIGNvbnNlY3V0aXZlIGV4dGVuZGVycy4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZXhwZWN0ZWQpIHsK
LSAgICAgICAgY2FzZSBTdGFydDoKLSAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxlZnQvYm90
dG9tIHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0gcGFydC5n
bHlwaDsKLSAgICAgICAgICAgIGV4cGVjdGVkID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRk
bGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5T
dGFydEFuZE1pZGRsZToKLSAgICAgICAgY2FzZSBNaWRkbGU6Ci0gICAgICAgICAgICAvLyBXZSBj
b3B5IHRoZSBtaWRkbGUgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5
cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhwZWN0ZWQgPSBFeHRlbmRlckJldHdlZW5N
aWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRlbmRl
ckJldHdlZW5NaWRkbGVBbmRFbmQ6Ci0gICAgICAgIGNhc2UgRW5kOgotICAgICAgICAgICAgLy8g
V2UgY29weSB0aGUgcmlnaHQvdG9wIHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEudG9w
LmdseXBoID0gcGFydC5nbHlwaDsKLSAgICAgICAgICAgIGV4cGVjdGVkID0gTm9uZTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIE5vbmU6Ci0gICAgICAgICAgICAvLyBUaGlz
IGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIG5vbi1leHRlbmRlciBwYXJ0
LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGhhdmUgYW4g
ZXh0ZW5zaW9uIGdseXBoLgotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0b3AvYm90dG9tIGds
eXBocywgd2UgdXNlIHRoZSBleHRlbnNpb24gZ2x5cGguCi0gICAgaWYgKCFhc3NlbWJseURhdGEu
dG9wLmdseXBoKQotICAgICAgICBhc3NlbWJseURhdGEudG9wLmdseXBoID0gYXNzZW1ibHlEYXRh
LmV4dGVuc2lvbi5nbHlwaDsKLSAgICBpZiAoIWFzc2VtYmx5RGF0YS5ib3R0b20uZ2x5cGgpCi0g
ICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20uZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9u
LmdseXBoOwotCi0gICAgYXNzZW1ibHlEYXRhLnRvcC5mb250ID0gJnN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFz
c2VtYmx5RGF0YS50b3AuZm9udDsKLSAgICBhc3NlbWJseURhdGEuYm90dG9tLmZvbnQgPSBhc3Nl
bWJseURhdGEudG9wLmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1i
bHlEYXRhLm1pZGRsZS5nbHlwaCA/IGFzc2VtYmx5RGF0YS50b3AuZm9udCA6IG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZERp
c3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKQotewotICAgIEFTU0VSVChtX2lzVmVydGljYWwgJiYg
aXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7Ci0KLSAgICBHbHlwaERhdGEgYmFzZUds
eXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgfHwgIWJhc2VH
bHlwaC5mb250LT5tYXRoRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8R2x5
cGg+IHNpemVWYXJpYW50czsKLSAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQ
YXJ0PiBhc3NlbWJseVBhcnRzOwotCi0gICAgLy8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBp
cyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4KLSAg
ICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1heChiYXNlR2x5cGguZm9u
dC0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zs
b2F0LCBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KCpiYXNlR2x5
cGguZm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7Ci0K
LSAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlw
aC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKLQotICAgIC8vIFdl
IGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4
cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRv
IHRoZSBsYXJnZXN0IHZhcmlhbnQuCi0gICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVW
YXJpYW50cykgewotICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNl
R2x5cGguZm9udCk7Ci0gICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7Ci0gICAgICAg
IG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFs
aWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKLSAgICAgICAg
aWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpmaW5kU3RyZXRjaHlEYXRhKGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5p
dCB0YXJnZXRTaXplKQotewotICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9pc1Zl
cnRpY2FsKTsKLQotICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAgaWYgKCFnZXRCYXNlR2x5
cGgoc3R5bGUoKSwgYmFzZUdseXBoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICgh
bWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhl
IGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1f
aXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JH
bHlwaChiYXNlR2x5cGgpOwotICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6ZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJs
eURhdGE7Ci0gICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7Ci0gICAgICAgIFZl
Y3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwotICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0
YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBiYXNlR2x5cGguZm9udC0+
bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2Fs
LCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwotICAgICAgICAvLyBXZSB2ZXJpZnkgdGhl
IHNpemUgdmFyaWFudHMuCi0gICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFy
aWFudHMpIHsKLSAgICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJh
c2VHbHlwaC5mb250KTsKLSAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKLSAgICAg
ICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lk
dGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRh
KSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHNpemUgPj0gc3RyZXRjaFNpemUoKSkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIHZlcmlmeSBpZiB0aGVyZSBp
cyBhIGNvbnN0cnVjdGlvbi4KLSAgICAgICAgaWYgKCFnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2so
YXNzZW1ibHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2Ug
ZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgotICAgICAgICBjb25z
dCBTdHJldGNoeUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlDaGFy
YWN0ZXJzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4SW5k
ZXg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhd
LmNoYXJhY3RlciA9PSBtX3RleHRDb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgc3RyZXRjaHlD
aGFyYWN0ZXIgPSAmc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0
UGFpcnNDb3VudCAqIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJp
Z2h0LXRvLWxlZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRp
bmcgLTEgb3IgKzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCi0gICAgICAgICAg
ICAgICAgICAgIGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRo
aXMgY2hhcmFjdGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgotICAgICAgICBp
ZiAoIXN0cmV0Y2h5Q2hhcmFjdGVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8v
IFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9m
IGdseXBoIGRhdGEuCi0gICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBm
YWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24gPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25D
aGFyLCBmYWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20gPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21D
aGFyLCBmYWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJh
Y3Rlci0+bWlkZGxlQ2hhciA/IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKSA6IEdseXBoRGF0YSgp
OwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1heGltdW0gd2lkdGgs
IHZlcmlmeSBlYWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpIHsKLSAg
ICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wKSk7Ci0gICAgICAgICptYXhpbXVt
R2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9y
R2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lk
dGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFz
c2VtYmx5RGF0YS5taWRkbGUpKTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjpt
YXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEu
Ym90dG9tKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBlbnN1cmUgdGhh
dCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3ZlcmxhcHMuCi0gICAg
ZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/Ci0gICAgICAgIGhlaWdodEZvckdseXBoKGFz
c2VtYmx5RGF0YS50b3ApICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBo
ZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKQotICAgICAgICA6IGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS5sZWZ0KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2Vt
Ymx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnJpZ2h0
KTsKLSAgICBpZiAobWluU2l6ZSA+IHRhcmdldFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNldEdseXBoQXNzZW1ibHkoYXNzZW1ibHlEYXRhKTsKLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogewogICAgIEFTU0VSVChmaXJzdENoaWxkKCkpOwogICAg
IGlmICghZmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0cmV0Y2hUeXBl
ID0gVW5zdHJldGNoZWQ7Ci0gICAgbV9pdGFsaWNDb3JyZWN0aW9uID0gMDsKKyAgICBtX21hdGhP
cGVyYXRvci51bnN0cmV0Y2goKTsKKyAgICBtX21hdGhPcGVyYXRvci5tX2l0YWxpY0NvcnJlY3Rp
b24gPSAwOwogICAgIC8vIFdlIGFkZCBzcGFjaW5nIGFyb3VuZCB0aGUgb3BlcmF0b3IuCiAgICAg
Ly8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hvbGUgZW1iZWxs
aXNoZWQgb3BlcmF0b3IgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjQ4MzEpLgogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQgb25seSBiZSBhZGRlZCBp
bnNpZGUgKHBlcmhhcHMgaW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93d3cudzMub3JnL1RSL01hdGhN
TC9jaGFwdGVyMy5odG1sI3ByZXNtLm9wc3BhY2luZykuCkBAIC02MjYsMjUgKzM2OSwyNiBAQCB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgaWYgKCFzaG91bGRB
bGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9tYXRoT3BlcmF0b3Iu
c2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsKICAgICBpZiAobV9pc1Zl
cnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCi0gICAgICAgIGZpbmRE
aXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRE
aXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2UgewotICAgICAgICBm
aW5kU3RyZXRjaHlEYXRhKG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOwotICAgICAgICBpZiAobV9z
dHJldGNoVHlwZSA9PSBVbnN0cmV0Y2hlZCkKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuZmluZFN0
cmV0Y2h5RGF0YShzdHlsZSgpLCBudWxscHRyLCBzdHJldGNoU2l6ZSgpKTsKKyAgICAgICAgaWYg
KCFtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFu
dCkgeworICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlw
ZSA9PSBNYXRoT3BlcmF0b3I6OlNpemVWYXJpYW50KSB7CiAgICAgICAgIC8vIFdlIHJlc2l6ZSB0
aGUgb3BlcmF0b3IgdG8gbWF0Y2ggdGhlIG9uZSBvZiB0aGUgc2l6ZSB2YXJpYW50LgogICAgICAg
ICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAgICAgLy8g
VGhlIHN0cmV0Y2ggc2l6ZSBpcyBhY3R1YWxseSBub3QgaW52b2x2ZWQgaW4gdGhlIHNlbGVjdGlv
biBvZiB0aGUgc2l6ZSB2YXJpYW50IGluIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yLgog
ICAgICAgICAgICAgLy8gV2Ugc2ltcGx5IHVzZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUg
c2VsZWN0ZWQgc2l6ZSB2YXJpYW50IGdseXBoLgotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBo
Qm91bmRzID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgICAgIEZsb2F0UmVj
dCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7
CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRz
LnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91
bmRzLm1heFkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHJlc2NhbGUg
dGhlIGhlaWdodCBhbmQgZGVwdGggcHJvcG9ydGlvbmF0ZWx5LgotICAgICAgICAgICAgZmxvYXQg
dmFyaWFudFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICAgICAgZmxv
YXQgdmFyaWFudFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQp
OwogICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IHN0cmV0Y2hTaXplKCk7CiAgICAgICAgICAgICBm
bG9hdCBhc3BlY3QgPSBzaXplID4gMCA/IHZhcmlhbnRTaXplIC8gc2l6ZSA6IDEuMDsKICAgICAg
ICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwpAQCAtNjUzLDMw
ICszOTcsMzAgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAg
IH0KIAogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBl
ID09IFNpemVWYXJpYW50KSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBi
b3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9z
dHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlNpemVWYXJpYW50KSB7CisgICAgICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3Zh
cmlhbnQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IC1nbHlw
aEJvdW5kcy55KCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBn
bHlwaEJvdW5kcy5tYXhZKCk7Ci0gICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFkdmFuY2VX
aWR0aEZvckdseXBoKG1fdmFyaWFudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9zdHJldGNoVHlw
ZSA9PSBHbHlwaEFzc2VtYmx5KSB7CisgICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFkdmFu
Y2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CisgICAgICAgIH0gZWxz
ZSBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OkdseXBo
QXNzZW1ibHkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kczsKICAgICAgICAg
ICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwOwogICAgICAgICAgICAgbV9zdHJl
dGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBi
b3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmxlZnQpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmxlZnQpOwogICAgICAg
ICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAg
ICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4o
bV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAg
ICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkucmlnaHQpOwor
ICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5t
X2Fzc2VtYmx5LnJpZ2h0KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxp
bmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAt
Z2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGlu
ZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5
cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJv
dW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKICAgICAg
ICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0
PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAg
ICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAg
ICAgICAgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAg
ICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAg
ICAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3Bl
cmF0b3IubV9hc3NlbWJseS5taWRkbGUpOwogICAgICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92
ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgICAgICBtX3N0cmV0Y2hE
ZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJl
bG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICB9CkBAIC02ODYs
MjM3ICs0MzAsNTUgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQog
CiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJzdExpbmVCYXNlbGluZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQpCisgICAgaWYg
KG1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIHJldHVybiBPcHRpb25hbDxp
bnQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOwogICAgIHJldHVybiBSZW5kZXJNYXRo
TUxUb2tlbjo6Zmlyc3RMaW5lQmFzZWxpbmUoKTsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlv
dXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRW
YWx1ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQpCisg
ICAgaWYgKG1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIGxvZ2ljYWxIZWln
aHQgPSBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICsgbV9zdHJldGNoRGVwdGhCZWxvd0Jh
c2VsaW5lOwogICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdo
dCwgbG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludEdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgR2x5cGhEYXRh
JiBkYXRhLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcgdHJp
bSkKLXsKLSAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChkYXRhKTsK
LQotICAgIExheW91dFJlY3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBMYXlvdXRTaXplKGdseXBo
Qm91bmRzLngoKSArIGdseXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91bmRzLmhlaWdodCgpKSk7
Ci0gICAgZ2x5cGhQYWludFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5cGhCb3VuZHMueSgpKTsK
LQotICAgIC8vIEluIG9yZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVnbHkgd2l0aCBvbmUgYW5v
dGhlciB3ZSBzbmFwIHRoZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVsIGJvdW5kYXJpZXMKLSAg
ICAvLyBhbmQgdHJpbSBvZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJpbSBpcyB0byBhY2NvdW50
IGZvciBmb250cyB0aGF0IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZlIGxlc3MKLSAgICAvLyB0
aGFuIGZ1bGwgY292ZXJhZ2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBpbnRyb2R1Y2Ugc21hbGwg
c2VhbXMgYmV0d2VlbiBjb25uZWN0ZWQgZ2x5cGhzLgotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRz
ID0gaW5mby5yZWN0OwotICAgIHN3aXRjaCAodHJpbSkgewotICAgIGNhc2UgVHJpbVRvcDoKLSAg
ICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWls
KCkgKyAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
eSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltQm90dG9tOgotICAgICAgICBnbHlw
aFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkg
LSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
bWF4WSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltVG9wQW5kQm90dG9tOgotICAg
ICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwo
KSArIDEpOwotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWlu
dFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QueSgpKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmlt
TGVmdDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0
LngoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQ
YWludFJlY3QueCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltUmlnaHQ6Ci0gICAg
ICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCku
Zmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBh
aW50UmVjdC5tYXhYKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0QW5kUmln
aHQ6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54
KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNo
aWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0
TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOwotICAgIH0KLQotICAgIC8vIENsaXBw
aW5nIHRoZSBlbmNsb3NpbmcgSW50UmVjdCBhdm9pZHMgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXQg
am9pbmVkIGVkZ2VzLgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihp
bmZvLmNvbnRleHQoKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQot
ICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEu
Zm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSkpOwotICAgIGluZm8uY29udGV4dCgpLmRy
YXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEs
IG9yaWdpbik7Ci0KLSAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8m
IGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCi17
Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0g
R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQo
KSk7Ci0gICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBp
cyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBh
bnl0aGluZy4KLSAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkp
OwotCi0gICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJs
eS5leHRlbnNpb24pOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJl
IGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAg
ICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBv
dmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAg
ICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlm
dFlFZGdlVG8oZnJvbS55KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnko
KSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1t
aW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVu
ZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zm
c2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5
cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBo
VG9wKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXpl
KCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkg
ewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3Nl
bWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAg
Z2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5o
ZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250
IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8g
YW4gZW1wdHkgcmVjdGFuZ2xlCi0gICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2Fz
ZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KLSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQot
ewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9
PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxp
ZCgpKTsKLSAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKLQotICAgIC8vIElmIHRoZXJl
IGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nLgotICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQo
KSk7Ci0KLSAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVz
IHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQotICAgIC8vIHJlZ2lv
bnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3ICho
YWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgotICAgIExheW91dFJl
Y3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKLSAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhm
cm9tLngoKSk7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8odG8ueCgpKTsKLSAgICBp
bmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgLy8gVHJpbW1pbmcgbWF5IHJl
bW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIGV4dGVuZGVyIGdseXBo
LCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KLSAgICBmbG9hdCBvZmZzZXRUb0ds
eXBoTGVmdCA9IC0yOwotICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQo
ZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4oZnJvbS55KCksIHRvLnkoKSkg
KyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50
ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVk
R2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVj
dCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBU
cmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54
KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC53aWR0aCgpKTsKLQotICAgICAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUg
Z2x5cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAgICAgLy8g
d2l0aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgotICAgICAg
ICBpZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWludEluZm8m
IGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5kZXJNYXRo
TUxUb2tlbjo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogCi0gICAgaWYgKGluZm8uY29udGV4
dCgpLnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgbV9zdHJldGNoVHlwZSA9
PSBVbnN0cmV0Y2hlZCkKKyAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgp
IHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSB8fCAhbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGlu
Zm8uY29udGV4dCgpKTsKICAgICBpbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3Ioc3R5bGUoKS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwogCi0gICAgaWYgKG1fc3Ry
ZXRjaFR5cGUgPT0gU2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgQVNTRVJUKG1fdmFyaWFudC5pc1Zh
bGlkKCkpOworICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVy
YXRvcjo6U2l6ZVZhcmlhbnQpIHsKKyAgICAgICAgQVNTRVJUKG1fbWF0aE9wZXJhdG9yLm1fdmFy
aWFudC5pc1ZhbGlkKCkpOwogICAgICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgICAgIGJ1
ZmZlci5hZGQobV92YXJpYW50LmdseXBoLCBtX3ZhcmlhbnQuZm9udCwgYWR2YW5jZVdpZHRoRm9y
R2x5cGgobV92YXJpYW50KSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9tYXRoT3BlcmF0b3IubV92
YXJpYW50LmdseXBoLCBtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9udCwgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KSk7CiAgICAgICAgIExheW91dFBvaW50
IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24o
KSk7Ci0gICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fdmFy
aWFudCk7CisgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3Jp
Z2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5k
cy55KCkpOwotICAgICAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENh
c2NhZGUoKSwgKm1fdmFyaWFudC5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsK
KyAgICAgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCks
ICptX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9y
aWdpbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsKQot
ICAgICAgICBwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7Ci0g
ICAgZWxzZQotICAgICAgICBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGluZm8sIHBhaW50
T2Zmc2V0KTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEds
eXBoQXNzZW1ibHkoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCi17Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5
cGUgPT0gR2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wLmlzVmFsaWQo
KSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tLmlzVmFsaWQoKSk7Ci0KLSAgICAvLyBX
ZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdo
dCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWlu
dCBib3guCisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9p
c1ZlcnRpY2FsKTsKKyAgICBtX21hdGhPcGVyYXRvci5tX2FzY2VudCA9IG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmU7CisgICAgbV9tYXRoT3BlcmF0b3IubV9kZXNjZW50ID0gbV9zdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fd2lkdGggPSBsb2dpY2Fs
V2lkdGgoKTsKICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldCAr
IGxvY2F0aW9uKCk7CiAgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxpbmdTcGFjZSwgMCk7Ci0g
ICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKLSAg
ICBGbG9hdFJlY3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRv
cCk7Ci0gICAgTGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwg
b3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7Ci0gICAgTGF5b3V0UmVj
dCB0b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS50b3AsIHRv
cEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQotICAgIEZsb2F0UmVjdCBib3R0b21HbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9tKTsKLSAgICBMYXlvdXRQb2lu
dCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQu
eSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0
b21HbHlwaEJvdW5kcy55KCkpKTsKLSAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0
ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbSwgYm90dG9tR2x5cGhPcmlnaW4s
IFRyaW1Ub3ApOwotCi0gICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAg
ICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5k
IGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hpZnQgaXQgaGFsZiB0aGUgcGFpbnQgaGVpZ2h0
IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgotICAgICAgICBGbG9hdFJlY3QgbWlkZGxlR2x5cGhC
b3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSk7Ci0gICAgICAgIExheW91
dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIHRvcEdseXBoT3Jp
Z2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgw
LCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0gdG9wR2x5cGhQYWludFJlY3QubWF4WSgpKSAv
IDIuMCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwg
bWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAyLjApKTsKLQotICAgICAgICBMYXlvdXRSZWN0
IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRs
ZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0b20pOwotICAgICAgICBmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlD
b3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAg
IGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVj
dC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGlu
Zm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRS
ZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpw
YWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBB
U1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3Nl
bWJseS5sZWZ0LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkucmlnaHQuaXNWYWxp
ZCgpKTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhl
IGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUg
ZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KLSAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQg
PSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUobV9s
ZWFkaW5nU3BhY2UsIDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9w
ZXJhdG9yVG9wTGVmdCk7Ci0gICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9y
VG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJh
c2VsaW5lKTsKLSAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgo
aW5mbywgbV9hc3NlbWJseS5sZWZ0LCBsZWZ0R2x5cGhPcmlnaW4sIFRyaW1SaWdodCk7Ci0KLSAg
ICBGbG9hdFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHku
cmlnaHQpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0
LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91bmRzLndpZHRoKCksIG9wZXJhdG9y
VG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBMYXlvdXRS
ZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkucmln
aHQsIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKLQotICAgIGlmIChtX2Fzc2VtYmx5Lm1p
ZGRsZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0
d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLgotICAgICAgICBMYXlv
dXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBsZWZ0R2x5cGhP
cmlnaW4ueSgpKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50
KChyaWdodEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYKCkpIC8g
Mi4wLCAwKSk7Ci0gICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWlu
dEdseXBoKGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbUxl
ZnRBbmRSaWdodCk7Ci0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGlu
Zm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCBtaWRkbGVHbHlwaFBhaW50
UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5z
aW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgcmln
aHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0
Lm1heFhNaW5ZQ29ybmVyKCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7
CisgICAgaWYgKG1faXNWZXJ0aWNhbCkKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IucGFpbnRWZXJ0
aWNhbEdseXBoQXNzZW1ibHkoc3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBl
bHNlCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHko
c3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0KTsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBQYWludEluZm8mIHBhaW50SW5mb0ZvckNoaWxkLCBib29sIHVz
ZVByaW50UmVjdCkKIHsKICAgICAvLyBXZSBza2lwIHBhaW50aW5nIGZvciBpbnZpc2libGUgb3Bl
cmF0b3JzIHRvbyB0byBhdm9pZCBzb21lICJtaXNzaW5nIGNoYXJhY3RlciIgZ2x5cGggdG8gYXBw
ZWFyIGlmIGFwcHJvcHJpYXRlIG1hdGggZm9udHMgYXJlIG5vdCBhdmFpbGFibGUuCi0gICAgaWYg
KG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQgfHwgaXNJbnZpc2libGVPcGVyYXRvcigpKQor
ICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpIHx8IGlzSW52aXNpYmxlT3BlcmF0
b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlbmRlck1hdGhNTFRva2VuOjpwYWludENoaWxk
cmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJl
Y3QpOwogfQpAQCAtOTMxLDE5ICs0OTMsMTkgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKICAgICAvLyBIZW5jZSB3ZSBkZXRlcm1pbmUgdGhl
IGVycm9yIGluIHRoZSBsb2dpY2FsIHdpZHRoIHdpdGggcmVzcGVjdCB0byB0aGUgYWN0dWFsIHdp
ZHRoIG9mIHRoZSBnbHlwaChzKSB1c2VkIHRvIHBhaW50IHRoZSBvcGVyYXRvci4KICAgICBMYXlv
dXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9
PSBVbnN0cmV0Y2hlZCkgeworICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkg
ewogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0
YSk7CiAgICAgfQogCi0gICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZhcmlhbnQpCi0gICAg
ICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fdmFyaWFudCk7CisgICAg
aWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFy
aWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRo
T3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFzc2VtYmx5V2lkdGggPSBhZHZhbmNl
V2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcCk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6
bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9t
KSk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKSk7Ci0gICAgaWYgKG1fYXNzZW1ibHku
bWlkZGxlLmlzVmFsaWQoKSkKLSAgICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2Vt
Ymx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxlKSk7CisgICAg
ZmxvYXQgYXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9y
Lm1fYXNzZW1ibHkudG9wKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlX
aWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5ib3R0
b20pKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5leHRlbnNpb24pKTsKKyAg
ICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKQorICAgICAg
ICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9y
R2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpKTsKICAgICByZXR1cm4gd2lk
dGggLSBhc3NlbWJseVdpZHRoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKaW5kZXggMGJhZmEyYi4uM2JiNjBj
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MT3BlcmF0b3IuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkdseXBoUGFnZS5o
IgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJNYXRoTUxPcGVyYXRvckRp
Y3Rpb25hcnkuaCIKKyNpbmNsdWRlICJNYXRoT3BlcmF0b3IuaCIKICNpbmNsdWRlICJPcGVuVHlw
ZU1hdGhEYXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MVG9rZW4uaCIKIApAQCAtNTEsNyAr
NTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRoZSBkaXNwbGF5c3R5bGUgcHJvcGVydHkg
aXMgbm90IGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4NzM3KS4KICAgICBib29sIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkgY29u
c3QgeyByZXR1cm4gIWhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlN0
cmV0Y2h5KSAmJiBoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpMYXJn
ZU9wKTsgfQogICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWZXJ0aWNh
bDsgfQotICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aXRhbGljQ29ycmVjdGlvbjsgfQorICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fbWF0aE9wZXJhdG9yLml0YWxpY0NvcnJlY3Rpb24oKTsgfQogCiAgICAg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVTdHlsZSgpIGZpbmFsOwpAQCAtNzMsMzIg
Kzc0LDYgQEAgcHJvdGVjdGVkOgogICAgIFVDaGFyIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0Q29udGVudDsgfQogCiBwcml2YXRlOgotICAgIHN0cnVjdCBHbHlwaEFzc2VtYmx5
RGF0YSB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIEdseXBoRGF0YSB0b3A7Ci0gICAg
ICAgICAgICBHbHlwaERhdGEgcmlnaHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIEdseXBoRGF0YSBl
eHRlbnNpb247Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIEdseXBoRGF0YSBib3R0b207
Ci0gICAgICAgICAgICBHbHlwaERhdGEgbGVmdDsKLSAgICAgICAgfTsKLSAgICAgICAgR2x5cGhE
YXRhIG1pZGRsZTsKLSAgICBHbHlwaEFzc2VtYmx5RGF0YSgpCi0gICAgOiB0b3AoKSwgZXh0ZW5z
aW9uKCksIGJvdHRvbSgpLCBtaWRkbGUoKSB7IH0KLSAgICB9OwotICAgIGVudW0gU3RyZXRjaFR5
cGUgewotICAgICAgICBVbnN0cmV0Y2hlZCwKLSAgICAgICAgU2l6ZVZhcmlhbnQsCi0gICAgICAg
IEdseXBoQXNzZW1ibHkKLSAgICB9OwotICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRjaFR5cGU7Ci0g
ICAgdW5pb24gewotICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OwotICAgICAgICBHbHlwaEFz
c2VtYmx5RGF0YSBtX2Fzc2VtYmx5OwotICAgIH07Ci0gICAgTGF5b3V0VW5pdCBtX2l0YWxpY0Nv
cnJlY3Rpb247Ci0KICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxPcGVyYXRvciAoYW5vbnltb3Vz
KSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3IiOyB9CiAgICAgdm9pZCBwYWludENoaWxkcmVuKFBh
aW50SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8mIGZvckNoaWxk
LCBib29sIHVzZVByaW50UmVjdCkgZmluYWw7CiAgICAgYm9vbCBpc1JlbmRlck1hdGhNTE9wZXJh
dG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTEyLDI3ICs4Nyw2IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIHNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0OwogCi0gICAg
Ym9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBHbHlwaERhdGEmKSBjb25zdDsK
LSAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYpOwotICAgIHZvaWQgc2V0
R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOwotICAgIGJvb2wgZ2V0R2x5
cGhBc3NlbWJseUZhbGxCYWNrKFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
LCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwotICAgIHZvaWQgZmluZERpc3BsYXlTdHlsZUxh
cmdlT3BlcmF0b3IoKTsKLSAgICB2b2lkIGZpbmRTdHJldGNoeURhdGEoZmxvYXQqIG1heGltdW1H
bHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUgPSAwKTsKLQotICAgIGVudW0gR2x5cGhQ
YWludFRyaW1taW5nIHsKLSAgICAgICAgVHJpbVRvcCwKLSAgICAgICAgVHJpbUJvdHRvbSwKLSAg
ICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKLSAgICAgICAgVHJpbUxlZnQsCi0gICAgICAgIFRyaW1S
aWdodCwKLSAgICAgICAgVHJpbUxlZnRBbmRSaWdodAotICAgIH07Ci0KLSAgICBMYXlvdXRSZWN0
IHBhaW50R2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9p
bnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKLSAgICB2b2lkIGZpbGxXaXRoVmVydGlj
YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29u
c3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lv
bkdseXBoKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQ
b2ludCYgdG8pOwotICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNz
ZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lkIHNldE9wZXJh
dG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRl
VmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZVZhbHVlKTsKICAgICB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGllc0Zyb21PcERp
Y3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5Kik7CkBAIC0xNDks
NiArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1fdHJhaWxpbmdTcGFjZTsKICAg
ICBMYXlvdXRVbml0IG1fbWluU2l6ZTsKICAgICBMYXlvdXRVbml0IG1fbWF4U2l6ZTsKKyAgICBN
YXRoT3BlcmF0b3IgbV9tYXRoT3BlcmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277088</attachid>
            <date>2016-04-22 13:03:11 -0700</date>
            <delta_ts>2016-04-25 01:03:44 -0700</delta_ts>
            <desc>Patch for EWS testing</desc>
            <filename>op-refactoring.patch</filename>
            <type>text/plain</type>
            <size>83769</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTIyODZiNi4uOTQ5NDZjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTEsNiArMjUxMSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY3MjUwNC4uNGFm
YmM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxNi0wNC0yMiAgRnJlZGVyaWMg
V2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5kIGRy
YXdpbmcgb2Ygc3RyZXRjaHkgb3BlcmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0b3Ig
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NjkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDogQWRkIHRoZSBNYXRoT3BlcmF0b3IgZmlsZXMuCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRzRm9y
R2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29y
ZTo6aGVpZ2h0Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAg
ICAgICAoV2ViQ29yZTo6YWR2YW5jZVdpZHRoRm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1h
dGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IE1vdmVkIGZyb20gUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldFNp
emVWYXJpYW50KTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IE1vdmVkIGZyb20gUmVuZGVy
TWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbmREaXNw
bGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvciB3
aXRoIGFkZGl0aW9uYWwgc3R5bGUgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9w
ZXJhdG9yOjpnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE9wZXJhdG9yOjpwYWludEdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNp
b25HbHlwaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpwYWludFZl
cnRpY2FsR2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9w
ZXJhdG9yOjppc1N0cmV0Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnVu
c3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlE
YXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnN0cmV0Y2hTaXplKToKKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICBGb3Igbm93
IHdlIGNhbGwgc2V0T3BlcmF0b3IgdG8gdHJhbnNtaXQgaW5mb3JtYXRpb24gdG8gbV9tYXRoT3Bl
cmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5
bGUpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgRm9yIG5v
dyB3ZSBzZXQgc29tZSBtX21hdGhPcGVyYXRvciBtZW1iZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUg
aW5mb3JtYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmly
c3RMaW5lQmFzZWxpbmUpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdo
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50
KTogRGl0dG8uCisgICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVt
YmVycyB0byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4pOiBVcGRhdGVkIHRvIHVzZSBNYXRo
T3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp0cmFpbGluZ1NwYWNlRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2Vt
Ymx5RmFsbEJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdseXBoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludFZlcnRp
Y2FsR2x5cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24pOiBVcGRhdGVk
IHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBEZWxl
dGVkLgorCisyMDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjogcmVmYWN0b3IgbWFuYWdlbWVudCBvZiBzdHJl
dGNoeSBkYXRhIGFuZCBpdGFsaWMgY29ycmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2OTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hh
bmdlZC4KKworICAgICAgICBXZSB1c2UgdW5pb24gdG8gc2ltcGxpZnkgdGhlIHN0cnVjdHVyZSB1
c2VkIHRvIG1hbmFnZSB0aGUgZ2x5cGggYXNzZW1ibHkgYW5kIHRoZSB0eXBlIG9mIHN0cmV0Y2hp
bmcuCisgICAgICAgIFdlIGFsc28gbW9kaWZ5IHRoZSBzaWduYXR1cmUgb2Ygc29tZSBmdW5jdGlv
bnMgdG8gcmV0cmlldmUgZGlzcGxheSBvcGVyYXRvciBhbmQgc3RyZXRjaHkgZGF0YS4KKyAgICAg
ICAgRmluYWxseSwgd2UgaW50cm9kdWNlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBlYXNpbHkg
c2V0IHRoZSBzdHJldGNoeSBkYXRhLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVc2UgdGhlIG5ldyBkYXRhIG1l
bWJlcnMgYW5kIGZ1bmN0aW9uIHNpZ25hdHVyZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIHNl
dCBhIHNpemUgdmFyaWFudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzZXRHbHlwaEFzc2VtYmx5KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBzZXQgYSBnbHlwaCBh
c3NlbWJseS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlw
aEFzc2VtYmx5RmFsbEJhY2spOiBXZSBjaGFuZ2UgdGhlIHNpZ25hdHVyZSB0byB1c2UgYSBHbHlw
aEFzc2VtYmx5RGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpm
aW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IFdlIHJlbmFtZSB0aGUgZnVuY3Rpb24gYW5k
CisgICAgICAgIGNoYW5nZSBpdHMgc2lnbmF0dXJlIHRvIHJlbW92ZSB0aGUgcmV0dXJuIHZhbHVl
LgorICAgICAgICBXZSBub3cgYWxzbyBzZXQgdGhlIGl0YWxpYyBjb3JyZWN0aW9uIHdoZW4gYSBk
aXNwbGF5IG9wZXJhdG9yIGlzIGZvdW5kLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBXZSBjaGFuZ2UgdGhlIHNpZ25hdHVyZSB0byBp
bnRyb2R1Y2UgYQorICAgICAgICB0YXJnZXQgc2l6ZSBhbmQgcmVtb3ZlIHRoZSByZXR1cm4gdmFs
dWUuCisgICAgICAgIFdlIGFsc28gcmVtb3ZlIHRoZSBjaGFyYWN0ZXIgcGFyYW1ldGVyIHdoaWNo
IGlzIGFsd2F5cyBtX3RleHRDb250ZW50LgorICAgICAgICBUaGlzIGFsc28gZG9lcyB0aGUgZWFy
bHkgcmV0dXJuIHdoZW4gdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogV2UgdXNlIHRoZSBu
ZXcgZGF0YSBtZW1iZXJzIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLgorICAgICAgICBUaGUgY2hl
Y2sgZm9yIHRoZSBiYXNlIGdseXBoIHNpemUgaXMgbm93IGRvbmUgaW4gZmluZFN0cmV0Y2h5RGF0
YSwgc28gd2UganVzdCBjaGVjayB3aGV0aGVyCisgICAgICAgIG1fc3RyZXRjaFR5cGUgaXMgVW5z
dHJldGNoZWQgdG8gZG8gYW4gZWFybHkgcmV0dXJuLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogV2UgdXNlIG1fc3RyZXRjaFR5cGUu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpm
aWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBVc2UgdGhlIG5ldyBjbGFzcyBtZW1iZXJz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpv
bnRhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1i
bHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWlu
dENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6dHJhaWxpbmdTcGFjZUVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6Oml0YWxpY0NvcnJl
Y3Rpb24pOiBXZSBqdXN0IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb24uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGE6OkdseXBoQXNzZW1i
bHlEYXRhKTogTmV3IGNsYXNzIHRvIHN0b3JlIGFuIGFzc2VtYmx5IG9mIEdseXBoRGF0YS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGE6Om1vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0
Y2h5RGF0YTo6dmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YTo6ZXh0ZW5zaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGE6
OmJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6U3RyZXRjaHlEYXRhOjptaWRkbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YTo6bGVmdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjpyaWdodCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlE
YXRhOjpzZXROb3JtYWxNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGE6OnNldFNpemVWYXJpYW50TW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjpz
ZXRHbHlwaEFzc2VtYmx5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjpTdHJldGNoeURhdGEpOiBEZWxldGVkLgorCisy
MDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CisKKyAgICAgICAg
UmVuZGVyTWF0aE1MT3BlcmF0b3IgcmVmYWN0b3Jpbmc6IGludHJvZHVjZSBnZXRCYXNlR2x5cGgg
YW5kIHJlbW92ZSBwYXJhbWV0ZXIgZnJvbSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5MTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIHRoZSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24pOiBXZSBkbyBub3QgbmVlZCB0byBwYXNz
IG1fdGV4dENvbnRlbnQgdG8gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvci4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocyk6IFdlIHVzZSBnZXRCYXNlR2x5cGggYW5kIGRvIG5vdCBwYXNzIG1fdGV4dENvbnRlbnQg
dG8gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgpOiBJbnRyb2R1Y2UgYSBoZWxwZXIgZnVuY3Rp
b24gdG8gcmV0cmlldmUgdGhlIGJhc2UgZ2x5cGggYW5kIGRvIHNvbWUgdmFsaWRpdHkgY2hlY2tz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldERpc3BsYXlTdHls
ZUxhcmdlT3BlcmF0b3IpOiBXZSByZW1vdmUgdGhlIGNoYXJhY3RlciBwYXJhbWV0ZXIgYXMgaXQg
aXMgYWx3YXlzIG1fdGV4dENvbnRlbnQuCisgICAgICAgIFdlIHVzZSBnZXRCYXNlR2x5cGggYW5k
IHJlcGxhY2UgcHJpbWFyeUZvbnQgd2l0aCBiYXNlR2x5cGguZm9udC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBXZSBkbyBu
b3QgcGFzcyBtX3RleHRDb250ZW50IHRvIGdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IuCisg
ICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oOiBEZWNsYXJl
IGdldEJhc2VHbHlwaCBhbmQgcmVtb3ZlIHRoZSBwYXJhbWV0ZXIgZnJvbSBnZXREaXNwbGF5U3R5
bGVMYXJnZU9wZXJhdG9yLgorCisyMDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdh
bGlhLmNvbT4KKworICAgICAgICBNaW5vciByZWZhY3RvcmluZyBpbiBSZW5kZXJNYXRoTUxPcGVy
YXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCB0aGlzIGlzIG9ubHkgbWlub3IgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBj
aGFuZ2UgdGhlIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpn
ZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2spOgorICAgICAgICBXZSByZW5hbWUgdGhlICJzdGF0ZSIg
aW50ZWdlciB0byBhbiAiZXhwZWN0ZWQiIGVudW0gaW5kaWNhdGluZyB0aGUgbmV4dCBleHBlY3Rl
ZCBwYXJ0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5
cGgpOiBXZSBhZGQgYSBtaXNzaW5nIGRvdCBhdCB0aGUgZW5kIG9mIGEgc2VxdWVuY2UuCisgICAg
ICAgIFdlIGFsc28gcmVwbGFjZSBjZWlsKHgrMSkgd2l0aCBjZWlsKHgpKzEgdG8gZ2V0IHJpZCBv
ZiB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlLgorCiAyMDE2LTA0LTIxICBGcmVkZXJpYyBXYW5nICA8
ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBNb3JlIGltcHJvdmVtZW50cyBhbmQgZXhwbGFu
YXRpb25zIHJlZ2FyZGluZyByZXNldHRpbmcgQ1NTIHByb3BlcnRpZXMgb24gdGhlIDxtYXRoPiBl
bGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMWI4MzRiOC4uZmFkMDJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY1OSw2ICsxNjU5LDggQEAKIAkJ
NDM5MDQ2RTgxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJEQTI1RTgw
MEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5MTJEQTI1
RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8q
IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJN
YXRoTUxVbmRlck92ZXIuaCAqLzsgfTsKKwkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1h
dGhPcGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLzsgfTsK
KwkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODEyQUY4
MEFDIC8qIE1hdGhPcGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkg
LyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmNwcCAqLzsgfTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhN
TFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MzkwNDZEODEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsgfTsKIAkJ
NDM5RDMzNDMxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIw
RjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTE4OSw2ICs5MTkxLDggQEAKIAkJ
NDM5MDQ2RDQxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVy
TWF0aE1MVW5kZXJPdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBN
YXRoT3BlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0
aE9wZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDYxMkRB
MjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXRoT3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5
MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRl
ck1hdGhNTFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1h
dGhNTFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQwMTNBNjkx
MUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNjkxMiw2ICsxNjkxNiw4IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJl
bmRlck1hdGhNTFRva2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJl
bmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEy
IC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oICovLAorCQkJCTQzOTA0NkQ1MTJEQTI1RTgxMkFG
ODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwICovLAorCQkJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBB
QyAvKiBNYXRoT3BlcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI3NjEyLDYgKzI3NjE4LDcgQEAKIAkJCQk0MzkwNDZF
NjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZFQTEyREEyNUU4MTJBRjgw
QUMgLyogTWF0aE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5
MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2
NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzEyNzUsNiArMzEyODIsNyBAQAogCQkJCTQzOTA0NkU1MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQzOTA0NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU5MTJEQTI1RTgxMkFG
ODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5NTgwQ0Y5
NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFNDlC
MzA5MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFD
b250cm9scy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MmMzNjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2lu
Y2x1ZGUgIk1hdGhPcGVyYXRvci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgaW5saW5lIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEp
Cit7CisgICAgcmV0dXJuIGRhdGEuZm9udCAmJiBkYXRhLmdseXBoID8gZGF0YS5mb250LT5ib3Vu
ZHNGb3JHbHlwaChkYXRhLmdseXBoKSA6IEZsb2F0UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5l
IGZsb2F0IGhlaWdodEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1
cm4gYm91bmRzRm9yR2x5cGgoZGF0YSkuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgYWR2YW5jZVdpZHRoRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJl
dHVybiBkYXRhLmZvbnQgJiYgZGF0YS5nbHlwaCA/IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChk
YXRhLmdseXBoKSA6IDA7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBkYXRhIGNhbiBi
ZSByZW1vdmVkIHdoZW4gT3BlblR5cGUgTUFUSCBmb250IGFyZSB3aWRlbHkgYXZhaWxhYmxlICho
dHRwOi8vd2tidWcvMTU2ODM3KS4KK3N0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNo
YXIgY2hhcmFjdGVyOworICAgIFVDaGFyIHRvcENoYXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hh
cjsKKyAgICBVQ2hhciBib3R0b21DaGFyOworICAgIFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8g
VGhlIGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3Jp
Z2h0IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNv
bnN0IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQgPSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5
Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5
YiwgMHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAw
eDI5ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRo
ZXNpcworICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8g
bGVmdCBzcXVhcmUgYnJhY2tldAorICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2
LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3
LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsg
MHg3ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkg
YnJhY2tldAorICAgIHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwg
Ly8gbGVmdCBjZWlsaW5nCisgICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4
MCAgICB9LCAvLyByaWdodCBjZWlsaW5nCisgICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAw
eDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29yCisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgy
M2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdj
LCAgIDB4N2MsICAgMHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCisgICAgeyAweDIw
MTYsIDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwg
bGluZQorICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8g
cGFyYWxsZWwgdG8KKyAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAg
IH0gLy8gaW50ZWdyYWwgc2lnbgorfTsKKworTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQor
ICAgIDogbV9iYXNlQ2hhcmFjdGVyKDApCisgICAgLCBtX2lzVmVydGljYWwoZmFsc2UpCisgICAg
LCBtX3N0cmV0Y2hUeXBlKFVuc3RyZXRjaGVkKQorICAgICwgbV93aWR0aCgwKQorICAgICwgbV9h
c2NlbnQoMCkKKyAgICAsIG1fZGVzY2VudCgwKQorICAgICwgbV9pdGFsaWNDb3JyZWN0aW9uKDAp
Cit7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFj
dGVyLCBib29sIGlzVmVydGljYWwpCit7CisgICAgbV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJh
Y3RlcjsKKyAgICBtX2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOworfQorCitib29sIE1hdGhPcGVy
YXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBi
YXNlR2x5cGgpIGNvbnN0Cit7CisgICAgYmFzZUdseXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIobV9iYXNlQ2hhcmFjdGVyLCAhc3R5bGUuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKTsKKyAgICByZXR1cm4gYmFzZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5
cGguZm9udCA9PSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworfQorCit2b2lk
IE1hdGhPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFu
dCkKK3sKKyAgICBBU1NFUlQoc2l6ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZv
bnQtPm1hdGhEYXRhKCkpOworICAgIG1fc3RyZXRjaFR5cGUgPSBTaXplVmFyaWFudDsKKyAgICBt
X3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBo
QXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlE
YXRhKQoreworICAgIG1fc3RyZXRjaFR5cGUgPSBHbHlwaEFzc2VtYmx5OworICAgIG1fYXNzZW1i
bHkgPSBhc3NlbWJseURhdGE7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgQVNTRVJU
KG1faXNWZXJ0aWNhbCAmJiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKKworICAg
IEdseXBoRGF0YSBiYXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VH
bHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKKyAgICBWZWN0b3I8T3BlblR5cGVNYXRo
RGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOworCisgICAgLy8gVGhlIHZhbHVlIG9m
IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3ZSBl
bnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0aGUg
YmFzZSBnbHlwaC4KKyAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6Om1h
eChiYXNlR2x5cGguZm9udC0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWlnaHQo
KSAqIHNxcnRPZlR3b0Zsb2F0LCBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aENv
bnN0YW50KCpiYXNlR2x5cGguZm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJhdG9y
TWluSGVpZ2h0KSk7CisKKyAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZh
cmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRz
KTsKKworICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRoYXQgaXMgbGFy
Z2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBhbmQgb3RoZXJ3
aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCisgICAgZm9yIChhdXRvJiBzaXpl
VmFyaWFudCA6IHNpemVWYXJpYW50cykgeworICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNp
emVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7CisgICAgICAgIHNldFNpemVWYXJpYW50KGdseXBo
RGF0YSk7CisgICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5tYXRo
RGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRhLmds
eXBoKTsKKyAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxheU9w
ZXJhdG9yTWluSGVpZ2h0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIE1h
dGhPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mIGFzc2Vt
Ymx5UGFydHMsIEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpCit7CisgICAgLy8gVGhl
IHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBUeXBlIE1hdGggdGFibGUgaXMgYSBiaXQgbW9yZSBnZW5l
cmFsIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSB0aGUgTWF0aE9wZXJhdG9yIGNvZGUs
IHNvIHdlIHRyeSB0byBmYWxsYmFjayBpbiBhIHJlYXNvbmFibGUgd2F5LgorICAgIC8vIEZJWE1F
OiBNYXRoT3BlcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjcpLgorICAgIC8vIFdl
IHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNvcHlDb21wb25lbnRzIGZ1bmN0aW9uIGluIGdpdGh1
Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9ibG9iL21hc3Rlci9mb250cy9PcGVuVHlwZU1hdGgv
Zm9udFV0aWwucHkKKworICAgIC8vIFdlIGNvdW50IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVuZGVy
IHBpZWNlcy4KKyAgICBpbnQgbm9uRXh0ZW5kZXJDb3VudCA9IDA7CisgICAgZm9yIChhdXRvJiBw
YXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAoIXBhcnQuaXNFeHRlbmRlcikKKyAg
ICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQrKzsKKyAgICB9CisgICAgaWYgKG5vbkV4dGVuZGVy
Q291bnQgPiAzKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRl
ZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNlcy4KKworICAgIC8vIFdlIG5vdyBicm93c2UgdGhl
IGxpc3Qgb2YgcGllY2VzIGZyb20gbGVmdCB0byByaWdodCBmb3IgaG9yaXpvbnRhbCBvcGVyYXRv
cnMgYW5kIGZyb20gYm90dG9tIHRvIHRvcCBmb3IgdmVydGljYWwgb3BlcmF0b3JzLgorICAgIGVu
dW0gUGFydFR5cGUgeworICAgICAgICBTdGFydCwKKyAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuU3Rh
cnRBbmRNaWRkbGUsCisgICAgICAgIE1pZGRsZSwKKyAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuTWlk
ZGxlQW5kRW5kLAorICAgICAgICBFbmQsCisgICAgICAgIE5vbmUKKyAgICB9OworICAgIFBhcnRU
eXBlIGV4cGVjdGVkID0gU3RhcnQ7CisgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9
IDA7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IDA7CisgICAgZm9yIChhdXRvJiBw
YXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA8IDMp
IHsKKyAgICAgICAgICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBhdCBtb3N0IHR3byBub24tZXh0ZW5k
ZXJzIHRoZW4gd2Ugc2tpcCB0aGUgbWlkZGxlIGdseXBoLgorICAgICAgICAgICAgaWYgKGV4cGVj
dGVkID09IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4
cGVjdGVkID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgZWxzZSBp
ZiAoZXhwZWN0ZWQgPT0gTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gRW5kOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0LmlzRXh0ZW5kZXIpIHsKKyAgICAgICAgICAgIGlm
ICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKKyAgICAgICAgICAgICAgICBhc3NlbWJs
eURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlwaDsgLy8gV2UgY29weSB0aGUgZXh0ZW5k
ZXIgcGFydC4KKyAgICAgICAgICAgIGVsc2UgaWYgKGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5
cGggIT0gcGFydC5nbHlwaCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMg
aXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhhcyBkaWZmZXJlbnQgZXh0ZW5kZXJzLgor
CisgICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkKSB7CisgICAgICAgICAgICBjYXNlIFN0YXJ0
OgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbGVmdC9ib3R0b20gcGFydC4KKyAg
ICAgICAgICAgICAgICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBNaWRkbGU6CisgICAg
ICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBtaWRkbGUgcGFydC4KKyAgICAgICAgICAgICAg
ICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgY2FzZSBOb25l
OgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVu
ZXhwZWN0ZWQgZXh0ZW5kZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKKyAgICAgICAgICAgIGNh
c2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICAgICAgICAgIC8vIFdlIGln
bm9yZSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBleHRlbmRlcnMuCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGV4cGVj
dGVkKSB7CisgICAgICAgIGNhc2UgU3RhcnQ6CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBs
ZWZ0L2JvdHRvbSBwYXJ0LgorICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCA9
IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0
QW5kTWlkZGxlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgRXh0ZW5kZXJC
ZXR3ZWVuU3RhcnRBbmRNaWRkbGU6CisgICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAg
Ly8gV2UgY29weSB0aGUgbWlkZGxlIHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEubWlk
ZGxlLmdseXBoID0gcGFydC5nbHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkID0gRXh0ZW5kZXJC
ZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2Ug
RXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICBjYXNlIEVuZDoKKyAgICAgICAg
ICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgorICAgICAgICAgICAgYXNzZW1ibHlE
YXRhLnRvcC5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3RlZCA9IE5vbmU7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAg
Ly8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBub24tZXh0ZW5k
ZXIgcGFydC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBo
YXZlIGFuIGV4dGVuc2lvbiBnbHlwaC4KKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdG9wL2Jv
dHRvbSBnbHlwaHMsIHdlIHVzZSB0aGUgZXh0ZW5zaW9uIGdseXBoLgorICAgIGlmICghYXNzZW1i
bHlEYXRhLnRvcC5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLnRvcC5nbHlwaCA9IGFzc2Vt
Ymx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisgICAgaWYgKCFhc3NlbWJseURhdGEuYm90dG9tLmds
eXBoKQorICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0gYXNzZW1ibHlEYXRhLmV4
dGVuc2lvbi5nbHlwaDsKKworICAgIGFzc2VtYmx5RGF0YS50b3AuZm9udCA9ICZzdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5mb250
ID0gYXNzZW1ibHlEYXRhLnRvcC5mb250OworICAgIGFzc2VtYmx5RGF0YS5ib3R0b20uZm9udCA9
IGFzc2VtYmx5RGF0YS50b3AuZm9udDsKKyAgICBhc3NlbWJseURhdGEubWlkZGxlLmZvbnQgPSBh
c3NlbWJseURhdGEubWlkZGxlLmdseXBoID8gYXNzZW1ibHlEYXRhLnRvcC5mb250IDogbnVsbHB0
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0
aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQoreworICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lk
dGggfHwgbV9pc1ZlcnRpY2FsKTsKKworICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CisgICAgaWYg
KCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKKyAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2gg
aWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgorICAgICAgICBmbG9hdCBiYXNlU2l6
ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lk
dGhGb3JHbHlwaChiYXNlR2x5cGgpOworICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYXRoT3BlcmF0b3I6OkdseXBo
QXNzZW1ibHlEYXRhIGFzc2VtYmx5RGF0YTsKKyAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhE
YXRhKCkpIHsKKyAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CisgICAgICAgIFZl
Y3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7CisgICAg
ICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBo
LmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAg
ICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KKyAgICAgICAgZm9yIChhdXRvJiBz
aXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgeworICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBo
RGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAgICAgICAgICAgaWYgKG1heGlt
dW1HbHlwaFdpZHRoKQorICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6
bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlw
aERhdGEpOworICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBtX2lzVmVydGljYWwgPyBoZWln
aHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsK
KyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB2
ZXJpZnkgaWYgdGhlcmUgaXMgYSBjb25zdHJ1Y3Rpb24uCisgICAgICAgIGlmICghZ2V0R2x5cGhB
c3NlbWJseUZhbGxCYWNrKHN0eWxlLCBhc3NlbWJseVBhcnRzLCBhc3NlbWJseURhdGEpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9pc1ZlcnRpY2Fs
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90
IGhhdmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0
cnVjdGlvbnMuCisgICAgICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyKiBzdHJldGNoeUNoYXJh
Y3RlciA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heEluZGV4ID0gV1RGX0FS
UkFZX0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBtYXhJbmRleDsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKHN0
cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IG1fYmFzZUNoYXJhY3Rlcikgewor
ICAgICAgICAgICAgICAgIHN0cmV0Y2h5Q2hhcmFjdGVyID0gJnN0cmV0Y2h5Q2hhcmFjdGVyc1tp
bmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgJiYgaW5kZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50ICogMikgeworICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24gd2Ugc2VsZWN0IHRo
ZSBtaXJyb3JlZCBmb3JtIGJ5IGFkZGluZyAtMSBvciArMSBhY2NvcmRpbmcgdG8gdGhlIHBhcml0
eSBvZiBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gaW5kZXggJSAyID8gLTEg
OiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgc3RyZXRj
aHkgY2hhcmFjdGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0ZXIsIHdlIGRvbid0IGtub3cgaG93IHRv
IHN0cmV0Y2ggaXQuCisgICAgICAgIGlmICghc3RyZXRjaHlDaGFyYWN0ZXIpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgLy8gV2UgY29udmVydCB0aGUgbGlzdCBvZiBVbmljb2RlIGNo
YXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4KKyAgICAgICAgYXNzZW1ibHlEYXRh
LnRvcCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5
Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNp
b24gPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNo
YXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEuYm90
dG9tID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlD
aGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRs
ZSA9IHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNl
KSA6IEdseXBoRGF0YSgpOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhl
IG1heGltdW0gd2lkdGgsIHZlcmlmeSBlYWNoIGNvbXBvbmVudC4KKyAgICBpZiAobWF4aW11bUds
eXBoV2lkdGgpIHsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGlt
dW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wKSk7Cisg
ICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOworICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKKyAgICAgICAgKm1heGltdW1HbHlw
aFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChhc3NlbWJseURhdGEuYm90dG9tKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGgg
b3ZlcmxhcHMuCisgICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/CisgICAgICAgIGhl
aWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3ApICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlE
YXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKQorICAgICAg
ICA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5sZWZ0KSArIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNz
ZW1ibHlEYXRhLnJpZ2h0KTsKKyAgICBpZiAobWluU2l6ZSA+IHRhcmdldFNpemUpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldEdseXBoQXNzZW1ibHkoYXNzZW1ibHlEYXRhKTsKK30KKworTGF5
b3V0UmVjdCBNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBQYWludEluZm8mIGluZm8sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSwgY29uc3QgTGF5b3V0UG9p
bnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nIHRyaW0pCit7CisgICAgRmxvYXRSZWN0IGds
eXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgoZGF0YSk7CisKKyAgICBMYXlvdXRSZWN0IGdseXBo
UGFpbnRSZWN0KG9yaWdpbiwgTGF5b3V0U2l6ZShnbHlwaEJvdW5kcy54KCkgKyBnbHlwaEJvdW5k
cy53aWR0aCgpLCBnbHlwaEJvdW5kcy5oZWlnaHQoKSkpOworICAgIGdseXBoUGFpbnRSZWN0LnNl
dFkob3JpZ2luLnkoKSArIGdseXBoQm91bmRzLnkoKSk7CisKKyAgICAvLyBJbiBvcmRlciB0byBo
YXZlIGdseXBocyBmaXQgc251Z2x5IHdpdGggb25lIGFub3RoZXIgd2Ugc25hcCB0aGUgY29ubmVj
dGluZyBlZGdlcyB0byBwaXhlbCBib3VuZGFyaWVzCisgICAgLy8gYW5kIHRyaW0gb2ZmIG9uZSBw
aXhlbC4gVGhlIHBpeGVsIHRyaW0gaXMgdG8gYWNjb3VudCBmb3IgZm9udHMgdGhhdCBoYXZlIGVk
Z2UgcGl4ZWxzIHRoYXQgaGF2ZSBsZXNzCisgICAgLy8gdGhhbiBmdWxsIGNvdmVyYWdlLiBUaGVz
ZSBlZGdlIHBpeGVscyBjYW4gaW50cm9kdWNlIHNtYWxsIHNlYW1zIGJldHdlZW4gY29ubmVjdGVk
IGdseXBocy4KKyAgICBGbG9hdFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBzd2l0
Y2ggKHRyaW0pIHsKKyAgICBjYXNlIFRyaW1Ub3A6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNo
aWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGNsaXBC
b3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVHJpbUJvdHRvbToKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhZRWRn
ZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3Vu
ZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVHJpbVRvcEFuZEJvdHRvbToKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hp
ZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQ
YWludFJlY3Quc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0g
MSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7
CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFko
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUxlZnQ6CisgICAgICAgIGdseXBoUGFp
bnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7CisgICAg
ICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVHJpbVJpZ2h0OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlm
dE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAg
Y2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUcmltTGVmdEFuZFJpZ2h0OgorICAgICAgICBnbHlwaFBhaW50
UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOworICAgICAg
ICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZs
b29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QueCgpKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QubWF4WCgpKTsKKyAgICB9CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZW5jbG9zaW5nIEludFJl
Y3QgYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIGF0IGpvaW5lZCBlZGdlcy4KKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOworICAgIGlu
Zm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7CisKKyAgICBHbHlwaEJ1ZmZlciBidWZmZXI7
CisgICAgYnVmZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnQsIGFkdmFuY2VXaWR0aEZvckds
eXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlLmZvbnRDYXNj
YWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKKworICAgIHJldHVybiBn
bHlwaFBhaW50UmVjdDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxF
eHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sKKyAgICBB
U1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFz
c2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAg
ICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgpKTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNw
YWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5n
LgorICAgIGlmIChmcm9tLnkoKSA9PSB0by55KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAg
ICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVu
c2lvbik7CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dz
IHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQorICAgIC8vIHJl
Z2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3
IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgorICAgIExheW91
dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VU
byhmcm9tLnkoKSk7CisgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8odG8ueSgpKTsKKyAg
ICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAgLy8gVHJpbW1pbmcgbWF5
IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIHRvcCBvZiB0aGUgZXh0ZW5kZXIgZ2x5
cGgsIHNvIHdlIG1vdmUgaXQgdXAgYnkgdHdvIHBpeGVscy4KKyAgICBmbG9hdCBvZmZzZXRUb0ds
eXBoVG9wID0gZ2x5cGhCb3VuZHMueSgpICsgMjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdp
biA9IExheW91dFBvaW50KGZyb20ueCgpLCBmcm9tLnkoKSAtIG9mZnNldFRvR2x5cGhUb3ApOwor
ICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7CisK
KyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4WSgpIDwgdG8ueSgpKSB7CisgICAg
ICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3Nl
bWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKKyAgICAgICAg
Z2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250
IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8g
YW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2Fz
ZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3Bl
cmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3Qg
TGF5b3V0UG9pbnQmIHRvKQoreworICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NF
UlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJs
eS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsK
KworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVn
aW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRv
IHRoZQorICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5n
IGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBw
aW5nLgorICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBjbGlwQm91
bmRzLnNoaWZ0WEVkZ2VUbyhmcm9tLngoKSk7CisgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdl
VG8odG8ueCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAg
Ly8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2Yg
dGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KKyAg
ICBmbG9hdCBvZmZzZXRUb0dseXBoTGVmdCA9IC0yOworICAgIExheW91dFBvaW50IGdseXBoT3Jp
Z2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4o
ZnJvbS55KCksIHRvLnkoKSkpOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChm
cm9tLCBGbG9hdFNpemUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4
WCgpIDwgdG8ueCgpKSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlw
aChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltTGVm
dEFuZFJpZ2h0KTsKKyAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54KCkgKyBs
YXN0UGFpbnRlZEdseXBoUmVjdC53aWR0aCgpKTsKKworICAgICAgICAvLyBUaGVyZSdzIGEgY2hh
bmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGgg
aGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKKyAgICAgICAgLy8gd2l0aCB0
cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgorICAgICAgICBpZiAo
bGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQo
bV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS50
b3AuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b20uaXNWYWxpZCgpKTsK
KworICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ug
b2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMg
b2Ygb3VyIHBhaW50IGJveC4KKyAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWlu
dE9mZnNldDsKKyAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRv
cExlZnQpOworICAgIEZsb2F0UmVjdCB0b3BHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
YXNzZW1ibHkudG9wKTsKKyAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9yaWdpbihvcGVyYXRvclRv
cExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhCb3VuZHMueSgpKTsKKyAg
ICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywg
bV9hc3NlbWJseS50b3AsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKKworICAgIEZsb2F0
UmVjdCBib3R0b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9t
KTsKKyAgICBMYXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgp
LCBvcGVyYXRvclRvcExlZnQueSgpICsgc3RyZXRjaFNpemUoKSAtIChib3R0b21HbHlwaEJvdW5k
cy5oZWlnaHQoKSArIGJvdHRvbUdseXBoQm91bmRzLnkoKSkpOworICAgIExheW91dFJlY3QgYm90
dG9tR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmJv
dHRvbSwgYm90dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOworCisgICAgaWYgKG1fYXNzZW1ibHku
bWlkZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBi
ZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hpZnQg
aXQgaGFsZiB0aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgorICAgICAg
ICBGbG9hdFJlY3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5
Lm1pZGRsZSk7CisgICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9y
VG9wTGVmdC54KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgIG1pZGRsZUdseXBoT3Jp
Z2luLm1vdmVCeShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0gdG9w
R2x5cGhQYWludFJlY3QubWF4WSgpKSAvIDIuMCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdp
bi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAyLjAp
KTsKKworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlw
aChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmlt
VG9wQW5kQm90dG9tKTsKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKHN0
eWxlLCBpbmZvLCB0b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBtaWRkbGVHbHlw
aFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4
dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNv
cm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCB0
b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5t
aW5YTWluWUNvcm5lcigpKTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQoIW1faXNWZXJ0
aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAg
QVNTRVJUKG1fYXNzZW1ibHkubGVmdC5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5
LnJpZ2h0LmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBo
cyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFj
dGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0UG9pbnQgb3Bl
cmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVk
SW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhPcmln
aW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsK
KyAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGlu
Zm8sIG1fYXNzZW1ibHkubGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmltUmlnaHQpOworCisgICAg
RmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnJp
Z2h0KTsKKyAgICBMYXlvdXRQb2ludCByaWdodEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCkgKyBtX3dpZHRoIC0gcmlnaHRHbHlwaEJvdW5kcy53aWR0aCgpLCBvcGVyYXRvclRvcExlZnQu
eSgpICsgbV9hc2NlbnQpOworICAgIExheW91dFJlY3QgcmlnaHRHbHlwaFBhaW50UmVjdCA9IHBh
aW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkucmlnaHQsIHJpZ2h0R2x5cGhPcmlnaW4s
IFRyaW1MZWZ0KTsKKworICAgIExheW91dFBvaW50IGJhc2VsaW5lU2hpZnQoMCwgbV9hc2NlbnQp
OworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQ2Vu
dGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWlu
dCBleHRlbnRzLgorICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRv
clRvcExlZnQueCgpLCBsZWZ0R2x5cGhPcmlnaW4ueSgpKTsKKyAgICAgICAgbWlkZGxlR2x5cGhP
cmlnaW4ubW92ZUJ5KExheW91dFBvaW50KChyaWdodEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRH
bHlwaFBhaW50UmVjdC5tYXhYKCkpIC8gMi4wLCAwKSk7CisgICAgICAgIExheW91dFJlY3QgbWlk
ZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5Lm1p
ZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOworICAgICAgICBmaWxs
V2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbGVmdEdseXBoUGFpbnRS
ZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0LCBtaWRkbGVHbHlwaFBhaW50UmVj
dC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7CisgICAgICAgIGZpbGxXaXRoSG9y
aXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5t
YXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5Y
TWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxX
aXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBsZWZ0R2x5cGhQYWludFJl
Y3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQsIHJpZ2h0R2x5cGhQYWludFJlY3Qu
bWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0ZGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWF0aE9wZXJhdG9yX2gKKyNk
ZWZpbmUgTWF0aE9wZXJhdG9yX2gKKworI2lmIEVOQUJMRShNQVRITUwpCisjaW5jbHVkZSAiR2x5
cGhQYWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIk9wZW5UeXBlTWF0
aERhdGEuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBl
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFz
cyBNYXRoT3BlcmF0b3IgeworcHVibGljOgorICAgIE1hdGhPcGVyYXRvcigpOworICAgIHZvaWQg
c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKTsKKworICAg
IExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXRhbGljQ29y
cmVjdGlvbjsgfQorCisgICAgYm9vbCBpc1N0cmV0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
ZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQ7IH0KKyAgICB2b2lkIHVuc3RyZXRjaCgpIHsgbV9zdHJl
dGNoVHlwZSA9IFVuc3RyZXRjaGVkOyB9CisKKyAgICAvLyBGSVhNRTogQWxsIHRoZSBjb2RlIGJl
bG93IHNob3VsZCBiZSBwcml2YXRlIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSBSZW5k
ZXJNYXRoTUxPcGVyYXRvciAoaHR0cDovL3dlYmtpdC5vcmcvYi8xNTIyNDQpLgorCisgICAgc3Ry
dWN0IEdseXBoQXNzZW1ibHlEYXRhIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgR2x5
cGhEYXRhIHRvcDsKKyAgICAgICAgICAgIEdseXBoRGF0YSByaWdodDsKKyAgICAgICAgfTsKKyAg
ICAgICAgR2x5cGhEYXRhIGV4dGVuc2lvbjsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
R2x5cGhEYXRhIGJvdHRvbTsKKyAgICAgICAgICAgIEdseXBoRGF0YSBsZWZ0OworICAgICAgICB9
OworICAgICAgICBHbHlwaERhdGEgbWlkZGxlOworICAgIEdseXBoQXNzZW1ibHlEYXRhKCkKKyAg
ICA6IHRvcCgpLCBleHRlbnNpb24oKSwgYm90dG9tKCksIG1pZGRsZSgpIHsgfQorICAgIH07Cisg
ICAgZW51bSBTdHJldGNoVHlwZSB7CisgICAgICAgIFVuc3RyZXRjaGVkLAorICAgICAgICBTaXpl
VmFyaWFudCwKKyAgICAgICAgR2x5cGhBc3NlbWJseQorICAgIH07CisgICAgZW51bSBHbHlwaFBh
aW50VHJpbW1pbmcgeworICAgICAgICBUcmltVG9wLAorICAgICAgICBUcmltQm90dG9tLAorICAg
ICAgICBUcmltVG9wQW5kQm90dG9tLAorICAgICAgICBUcmltTGVmdCwKKyAgICAgICAgVHJpbVJp
Z2h0LAorICAgICAgICBUcmltTGVmdEFuZFJpZ2h0CisgICAgfTsKKworICAgIExheW91dFVuaXQg
c3RyZXRjaFNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzVmVydGljYWwgPyBtX2FzY2VudCArIG1f
ZGVzY2VudCA6IG1fd2lkdGg7IH07CisgICAgYm9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVy
U3R5bGUmLCBHbHlwaERhdGEmKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0
IEdseXBoRGF0YSYpOworICAgIHZvaWQgc2V0R2x5cGhBc3NlbWJseShjb25zdCBNYXRoT3BlcmF0
b3I6OkdseXBoQXNzZW1ibHlEYXRhJik7CisgICAgdm9pZCBmaW5kRGlzcGxheVN0eWxlTGFyZ2VP
cGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHZvaWQgZmluZFN0cmV0Y2h5RGF0YShj
b25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0
YXJnZXRTaXplID0gMCk7CisgICAgYm9vbCBnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0
PiYsIEdseXBoQXNzZW1ibHlEYXRhJik7CisKKyAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoY29u
c3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBHbHlwaERhdGEmLCBjb25zdCBMYXlv
dXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcpOworICAgIHZvaWQgZmlsbFdpdGhW
ZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7CisgICAgdm9pZCBm
aWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOwor
ICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRIb3Jpem9udGFs
R2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CisKKyAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0ZXI7CisgICAgYm9vbCBtX2lzVmVy
dGljYWw7CisgICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlwZTsKKyAgICB1bmlvbiB7CisgICAg
ICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7CisgICAgICAgIEdseXBoQXNzZW1ibHlEYXRhIG1fYXNz
ZW1ibHk7CisgICAgfTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisgICAgTGF5b3V0VW5pdCBt
X2FzY2VudDsKKyAgICBMYXlvdXRVbml0IG1fZGVzY2VudDsKKyAgICBMYXlvdXRVbml0IG1faXRh
bGljQ29ycmVjdGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisjZW5k
aWYgLy8gTWF0aE9wZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggODNkYjM1Mi4uMjdmMWJm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTQ1LDMzICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKIHVzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKIAotLy8gRklYTUU6IFRoZSBP
cGVuVHlwZSBNQVRIIHRhYmxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIG92ZXJy
aWRlIHRoaXMgdGFibGUgKGh0dHA6Ly93a2J1Zy8xMjIyOTcpLgotc3RydWN0IFN0cmV0Y2h5Q2hh
cmFjdGVyIHsKLSAgICBVQ2hhciBjaGFyYWN0ZXI7Ci0gICAgVUNoYXIgdG9wQ2hhcjsKLSAgICBV
Q2hhciBleHRlbnNpb25DaGFyOwotICAgIFVDaGFyIGJvdHRvbUNoYXI7Ci0gICAgVUNoYXIgbWlk
ZGxlQ2hhcjsKLX07Ci0vLyBUaGUgZmlyc3QgbGVmdFJpZ2h0UGFpcnNDb3VudCBwYWlycyBjb3Jy
ZXNwb25kIHRvIGxlZnQvcmlnaHQgZmVuY2VzIHRoYXQgY2FuIGVhc2lseSBiZSBtaXJyb3JlZCBp
biBSVEwuCi1zdGF0aWMgY29uc3Qgc2hvcnQgbGVmdFJpZ2h0UGFpcnNDb3VudCA9IDU7Ci1zdGF0
aWMgY29uc3QgU3RyZXRjaHlDaGFyYWN0ZXIgc3RyZXRjaHlDaGFyYWN0ZXJzWzE0XSA9IHsKLSAg
ICB7IDB4MjggICwgMHgyMzliLCAweDIzOWMsIDB4MjM5ZCwgMHgwICAgIH0sIC8vIGxlZnQgcGFy
ZW50aGVzaXMKLSAgICB7IDB4MjkgICwgMHgyMzllLCAweDIzOWYsIDB4MjNhMCwgMHgwICAgIH0s
IC8vIHJpZ2h0IHBhcmVudGhlc2lzCi0gICAgeyAweDViICAsIDB4MjNhMSwgMHgyM2EyLCAweDIz
YTMsIDB4MCAgICB9LCAvLyBsZWZ0IHNxdWFyZSBicmFja2V0Ci0gICAgeyAweDVkICAsIDB4MjNh
NCwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBzcXVhcmUgYnJhY2tldAotICAg
IHsgMHg3YiAgLCAweDIzYTcsIDB4MjNhYSwgMHgyM2E5LCAweDIzYTggfSwgLy8gbGVmdCBjdXJs
eSBicmFja2V0Ci0gICAgeyAweDdkICAsIDB4MjNhYiwgMHgyM2FhLCAweDIzYWQsIDB4MjNhYyB9
LCAvLyByaWdodCBjdXJseSBicmFja2V0Ci0gICAgeyAweDIzMDgsIDB4MjNhMSwgMHgyM2EyLCAw
eDIzYTIsIDB4MCAgICB9LCAvLyBsZWZ0IGNlaWxpbmcKLSAgICB7IDB4MjMwOSwgMHgyM2E0LCAw
eDIzYTUsIDB4MjNhNSwgMHgwICAgIH0sIC8vIHJpZ2h0IGNlaWxpbmcKLSAgICB7IDB4MjMwYSwg
MHgyM2EyLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgZmxvb3IKLSAgICB7IDB4
MjMwYiwgMHgyM2E1LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IGZsb29yCi0g
ICAgeyAweDdjICAsIDB4N2MsICAgMHg3YywgICAweDdjLCAgIDB4MCAgICB9LCAvLyB2ZXJ0aWNh
bCBiYXIKLSAgICB7IDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgwICAgIH0sIC8v
IGRvdWJsZSB2ZXJ0aWNhbCBsaW5lCi0gICAgeyAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDIy
MjUsIDB4MCAgICB9LCAvLyBwYXJhbGxlbCB0bwotICAgIHsgMHgyMjJiLCAweDIzMjAsIDB4MjNh
ZSwgMHgyMzIxLCAweDAgICAgfSAvLyBpbnRlZ3JhbCBzaWduCi19OwotCiBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTWF0aE1MRWxlbWVudCYgZWxlbWVudCwgUmVm
PFJlbmRlclN0eWxlPiYmIHN0eWxlKQogICAgIDogUmVuZGVyTWF0aE1MVG9rZW4oZWxlbWVudCwg
V1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKDApCkBA
IC0yMDIsMTggKzE3NSw2IEBAIGJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmlzQ2hpbGRBbGxv
d2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1MYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjppdGFsaWNDb3JyZWN0
aW9uKCkgY29uc3QKLXsKLSAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkg
ewotICAgICAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpOwotICAgICAgICBpZiAoYXV0byogbWF0aERhdGEgPSBwcmltYXJ5Rm9u
dC5tYXRoRGF0YSgpKSB7Ci0gICAgICAgICAgICBTdHJldGNoeURhdGEgbGFyZ2VPcGVyYXRvciA9
IGdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IobV90ZXh0Q29udGVudCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbWF0aERhdGEtPmdldEl0YWxpY0NvcnJlY3Rpb24ocHJpbWFyeUZvbnQsIGxhcmdl
T3BlcmF0b3IudmFyaWFudCgpLmdseXBoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvKExheW91dFVuaXQg
aGVpZ2h0QWJvdmVCYXNlbGluZSwgTGF5b3V0VW5pdCBkZXB0aEJlbG93QmFzZWxpbmUpCiB7CiAg
ICAgQVNTRVJUKGhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlN0cmV0
Y2h5KSk7CkBAIC0zMDYsOCArMjY3LDkgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7
Ci0gICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRh
KTsKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVy
dGljYWwpOworICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CisgICAgZmxvYXQgbWF4aW11bUdseXBo
V2lkdGggPSBtX21hdGhPcGVyYXRvci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/
IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCkgOiAwOwogICAgIGlmICghbV9pc1ZlcnRp
Y2FsKSB7CiAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCiAg
ICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IHN0cmV0Y2hTaXplKCk7CkBAIC0zMTcsMTIg
KzI3OSwxMiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpCiAgICAgfQogICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHls
ZSgpKSB7CiAgICAgICAgIC8vIExhcmdlIG9wZXJhdG9ycyBpbiBTVElYIFdvcmQgaGF2ZSBpbmNv
cnJlY3QgYWR2YW5jZSB3aWR0aCwgY2F1c2luZyBtaXNwbGFjZW1lbnQgb2Ygc3VwZXJzY3JpcHQs
IHNvIHdlIHVzZSB0aGUgZ2x5cGggYm91bmQgaW5zdGVhZCAoaHR0cDovL3NvdXJjZWZvcmdlLm5l
dC9wL3N0aXhmb250cy90cmFja2luZy80OS8pLgotICAgICAgICBTdHJldGNoeURhdGEgbGFyZ2VP
cGVyYXRvciA9IGdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IobV90ZXh0Q29udGVudCk7Ci0g
ICAgICAgIGlmIChsYXJnZU9wZXJhdG9yLm1vZGUoKSA9PSBEcmF3U2l6ZVZhcmlhbnQpCi0gICAg
ICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKGxhcmdlT3BlcmF0b3Iu
dmFyaWFudCgpKS53aWR0aCgpOworICAgICAgICBtX21hdGhPcGVyYXRvci5maW5kRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1f
c3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFyaWFudCkKKyAgICAgICAgICAgIG1h
eGltdW1HbHlwaFdpZHRoID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50
KS53aWR0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAo
ZS5nLiB0aGUgb25lIGZvciAiRlJBQ1RJT04gU0xBU0giIGluIHRoZSBTVElYIE1hdGggZm9udCBv
ciBsYXJnZSBvcGVyYXRvcnMpIGhhdmUgYSB3aWR0aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdo
dCwgcmVzdWx0aW5nIGluIGxhcmdlIGdhcHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzAzMjYpLgotICAgICAgICBmaW5kU3RyZXRjaHlEYXRhKG1fdGV4dENvbnRl
bnQsICZtYXhpbXVtR2x5cGhXaWR0aCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRTdHJl
dGNoeURhdGEoc3R5bGUoKSwgJm1heGltdW1HbHlwaFdpZHRoKTsKICAgICB9CiAgICAgbV9tYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbGVh
ZGluZ1NwYWNlICsgbWF4aW11bUdseXBoV2lkdGggKyBtX3RyYWlsaW5nU3BhY2U7CiB9CkBAIC0z
ODYsMjMxICszNDgsMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWwKICAgICB1cGRhdGVPcGVy
YXRvclByb3BlcnRpZXMoKTsKIH0KIAotYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0R2x5
cGhBc3NlbWJseUZhbGxCYWNrKFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
IGFzc2VtYmx5UGFydHMsIFN0cmV0Y2h5RGF0YSYgc3RyZXRjaHlEYXRhKSBjb25zdAotewotICAg
IEdseXBoRGF0YSB0b3A7Ci0gICAgR2x5cGhEYXRhIGV4dGVuc2lvbjsKLSAgICBHbHlwaERhdGEg
Ym90dG9tOwotICAgIEdseXBoRGF0YSBtaWRkbGU7Ci0KLSAgICAvLyBUaGUgc3RydWN0dXJlIG9m
IHRoZSBPcGVuIFR5cGUgTWF0aCB0YWJsZSBpcyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUg
b25lIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBSZW5kZXJNYXRoTUxPcGVyYXRvciBjb2RlLCBzbyB3
ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25hYmxlIHdheS4KLSAgICAvLyBGSVhNRTogUmVu
ZGVyTWF0aE1MT3BlcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQg
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjcpLgotICAgIC8v
IFdlIHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNvcHlDb21wb25lbnRzIGZ1bmN0aW9uIGluIGdp
dGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9ibG9iL21hc3Rlci9mb250cy9PcGVuVHlwZU1h
dGgvZm9udFV0aWwucHkKLQotICAgIC8vIFdlIGNvdW50IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVu
ZGVyIHBpZWNlcy4KLSAgICBpbnQgbm9uRXh0ZW5kZXJDb3VudCA9IDA7Ci0gICAgZm9yIChhdXRv
JiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgewotICAgICAgICBpZiAoIXBhcnQuaXNFeHRlbmRlcikK
LSAgICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQrKzsKLSAgICB9Ci0gICAgaWYgKG5vbkV4dGVu
ZGVyQ291bnQgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBv
cnRlZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNlcy4KLQotICAgIC8vIFdlIG5vdyBicm93c2Ug
dGhlIGxpc3Qgb2YgcGllY2VzLgotICAgIC8vIDEgPSBsb29rIGZvciBhIGxlZnQvYm90dG9tIGds
eXBoCi0gICAgLy8gMiA9IGxvb2sgZm9yIGFuIGV4dGVuZGVyIGJldHdlZW4gbGVmdC9ib3R0b20g
YW5kIG1pZAotICAgIC8vIDQgPSBsb29rIGZvciBhIG1pZGRsZSBnbHlwaAotICAgIC8vIDUgPSBs
b29rIGZvciBhbiBleHRlbmRlciBiZXR3ZWVuIG1pZGRsZSBhbmQgcmlnaHQvdG9wCi0gICAgLy8g
NSA9IGxvb2sgZm9yIGEgcmlnaHQvdG9wIGdseXBoCi0gICAgLy8gNiA9IG5vIG1vcmUgcGllY2Ug
ZXhwZWN0ZWQKLSAgICB1bnNpZ25lZCBzdGF0ZSA9IDE7Ci0KLSAgICBleHRlbnNpb24uZ2x5cGgg
PSAwOwotICAgIG1pZGRsZS5nbHlwaCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1i
bHlQYXJ0cykgewotICAgICAgICBpZiAoKHN0YXRlID09IDIgfHwgc3RhdGUgPT0gMykgJiYgbm9u
RXh0ZW5kZXJDb3VudCA8IDMpIHsKLSAgICAgICAgICAgIC8vIFdlIGRvIG5vdCB0cnkgdG8gZmlu
ZCBhIG1pZGRsZSBnbHlwaC4KLSAgICAgICAgICAgIHN0YXRlICs9IDI7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHBhcnQuaXNFeHRlbmRlcikgewotICAgICAgICAgICAgaWYgKCFleHRlbnNpb24u
Z2x5cGgpCi0gICAgICAgICAgICAgICAgZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlwaDsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGV4dGVuc2lvbi5nbHlwaCAhPSBwYXJ0LmdseXBoKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGUgYXNz
ZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCi0KLSAgICAgICAgICAgIGlmIChzdGF0ZSA9
PSAxKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIGxlZnQvYm90dG9tIHBpZWNlIGFu
ZCBtdWx0aXBsZSBzdWNjZXNzaXZlIGV4dGVuZGVycy4KLSAgICAgICAgICAgICAgICBzdGF0ZSA9
IDI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IDMpIHsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBpZ25vcmUgbWlkZGxlIHBpZWNlIGFuZCBtdWx0aXBsZSBzdWNjZXNzaXZlIGV4dGVu
ZGVycy4KLSAgICAgICAgICAgICAgICBzdGF0ZSA9IDQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHN0YXRlID49IDUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5v
dCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RhdGUgPT0gMSkgewotICAgICAg
ICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgIGJvdHRv
bS5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBzdGF0ZSA9IDI7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZSA9PSAyIHx8IHN0YXRl
ID09IDMpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgotICAgICAg
ICAgICAgbWlkZGxlLmdseXBoID0gcGFydC5nbHlwaDsKLSAgICAgICAgICAgIHN0YXRlID0gNDsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRlID09
IDQgfHwgc3RhdGUgPT0gNSkgewotICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgcmlnaHQvdG9w
IHBhcnQuCi0gICAgICAgICAgICB0b3AuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAg
c3RhdGUgPSA2OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFleHRlbnNpb24uZ2x5cGgp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBhbHdh
eXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCi0KLSAgICAvLyBJZiB3
ZSBkb24ndCBoYXZlIHRvcC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lvbiBnbHlw
aC4KLSAgICBpZiAoIXRvcC5nbHlwaCkKLSAgICAgICAgdG9wLmdseXBoID0gZXh0ZW5zaW9uLmds
eXBoOwotICAgIGlmICghYm90dG9tLmdseXBoKQotICAgICAgICBib3R0b20uZ2x5cGggPSBleHRl
bnNpb24uZ2x5cGg7Ci0KLSAgICB0b3AuZm9udCA9ICZzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKTsKLSAgICBleHRlbnNpb24uZm9udCA9IHRvcC5mb250OwotICAgIGJvdHRvbS5m
b250ID0gdG9wLmZvbnQ7Ci0gICAgaWYgKG1pZGRsZS5nbHlwaCkKLSAgICAgICAgbWlkZGxlLmZv
bnQgPSB0b3AuZm9udDsKLQotICAgIHN0cmV0Y2h5RGF0YS5zZXRHbHlwaEFzc2VtYmx5TW9kZSh0
b3AsIGV4dGVuc2lvbiwgYm90dG9tLCBtaWRkbGUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoVUNoYXIgY2hhcmFjdGVyKSBjb25zdAotewot
ICAgIFN0cmV0Y2h5RGF0YSBkYXRhOwotCi0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCAmJiBpc0xh
cmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKTsKLQotICAgIGNvbnN0IGF1dG8mIHByaW1hcnlG
b250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgR2x5cGhEYXRh
IGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIGlmICgh
cHJpbWFyeUZvbnQubWF0aERhdGEoKSB8fCBiYXNlR2x5cGguZm9udCAhPSAmcHJpbWFyeUZvbnQg
fHwgIWJhc2VHbHlwaC5mb250IHx8ICFiYXNlR2x5cGguZ2x5cGgpCi0gICAgICAgIHJldHVybiBk
YXRhOwotCi0gICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAgVmVjdG9yPE9wZW5U
eXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLQotICAgIC8vIFRoZSB2
YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVzIHRvbyBzbWFsbCwg
c28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGltZXMgdGhlIHNpemUg
b2YgdGhlIGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0ID0g
c3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCku
aGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgcHJpbWFyeUZvbnQubWF0aERhdGEoKS0+Z2V0TWF0
aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JN
aW5IZWlnaHQpKTsKLQotICAgIHByaW1hcnlGb250Lm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50
cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0K
LSAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0
aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBm
YWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgotICAgIGZvciAoYXV0byYgdmFyaWFudCA6
IHNpemVWYXJpYW50cykgewotICAgICAgICBHbHlwaERhdGEgc2l6ZVZhcmlhbnQ7Ci0gICAgICAg
IHNpemVWYXJpYW50LmdseXBoID0gdmFyaWFudDsKLSAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9
ICZwcmltYXJ5Rm9udDsKLSAgICAgICAgZGF0YS5zZXRTaXplVmFyaWFudE1vZGUoc2l6ZVZhcmlh
bnQpOwotICAgICAgICBpZiAoYm91bmRzRm9yR2x5cGgoc2l6ZVZhcmlhbnQpLmhlaWdodCgpID49
IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKLSAgICAgICAgICAgIHJldHVybiBkYXRhOwotICAg
IH0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5
RGF0YSBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShVQ2hhciBjaGFyYWN0
ZXIsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCkKLXsKLSAgICBBU1NFUlQoIW1heGltdW1HbHlw
aFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7Ci0KLSAgICBTdHJldGNoeURhdGEgZGF0YTsKLSAgICBT
dHJldGNoeURhdGEgYXNzZW1ibHlEYXRhOwotCi0gICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICBHbHlwaERhdGEgYmFz
ZUdseXBoID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7Ci0gICAgCi0gICAgaWYg
KHByaW1hcnlGb250Lm1hdGhEYXRhKCkgJiYgYmFzZUdseXBoLmZvbnQgPT0gJnByaW1hcnlGb250
KSB7Ci0gICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwotICAgICAgICBWZWN0b3I8
T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAgICBw
cmltYXJ5Rm9udC5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBt
X2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0gICAgICAgIC8vIFdl
IHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KLSAgICAgICAgZm9yIChhdXRvJiB2YXJpYW50IDog
c2l6ZVZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBHbHlwaERhdGEgc2l6ZVZhcmlhbnQ7Ci0gICAg
ICAgICAgICBzaXplVmFyaWFudC5nbHlwaCA9IHZhcmlhbnQ7Ci0gICAgICAgICAgICBzaXplVmFy
aWFudC5mb250ID0gJnByaW1hcnlGb250OwotICAgICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdp
ZHRoKQotICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhp
bXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoc2l6ZVZhcmlhbnQpKTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGRhdGEuc2V0U2l6ZVZhcmlhbnRNb2RlKHNp
emVWYXJpYW50KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8g
aGVpZ2h0Rm9yR2x5cGgoc2l6ZVZhcmlhbnQpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoc2l6ZVZh
cmlhbnQpOwotICAgICAgICAgICAgICAgIGlmIChzaXplID49IHN0cmV0Y2hTaXplKCkpIAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFdlIHZlcmlmeSBpZiB0aGVyZSBpcyBhIGNvbnN0cnVjdGlvbi4KLSAgICAg
ICAgaWYgKCFnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soYXNzZW1ibHlQYXJ0cywgYXNzZW1ibHlE
YXRhKSkKLSAgICAgICAgICAgIHJldHVybiBkYXRhOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghbV9pc1ZlcnRpY2FsKQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBhIE1BVEggdGFibGUsIHdlIGZhbGxiYWNrIHRvIHRo
ZSBVbmljb2RlLW9ubHkgY29uc3RydWN0aW9ucy4KLSAgICAgICAgY29uc3QgU3RyZXRjaHlDaGFy
YWN0ZXIqIHN0cmV0Y2h5Q2hhcmFjdGVyID0gbnVsbHB0cjsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbWF4SW5kZXggPSBXVEZfQVJSQVlfTEVOR1RIKHN0cmV0Y2h5Q2hhcmFjdGVycyk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1heEluZGV4OyArK2luZGV4KSB7
Ci0gICAgICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5jaGFyYWN0ZXIgPT0g
Y2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICAgICAgc3RyZXRjaHlDaGFyYWN0ZXIgPSAmc3RyZXRj
aHlDaGFyYWN0ZXJzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0eWxlKCkuaXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAqIDIpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQgZGlyZWN0
aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRpbmcgLTEgb3IgKzEgYWNjb3Jk
aW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9
IGluZGV4ICUgMiA/IC0xIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkaWRu
J3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVyLCB3ZSBk
b24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgotICAgICAgICBpZiAoIXN0cmV0Y2h5Q2hhcmFj
dGVyKQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0KLSAgICAgICAgLy8gV2UgY29udmVydCB0
aGUgbGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4K
LSAgICAgICAgR2x5cGhEYXRhIHRvcCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAg
R2x5cGhEYXRhIGV4dGVuc2lvbiA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKLSAgICAg
ICAgR2x5cGhEYXRhIGJvdHRvbSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKLSAgICAgICAg
R2x5cGhEYXRhIG1pZGRsZTsKLSAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVD
aGFyKQotICAgICAgICAgICAgbWlkZGxlID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0
YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFsc2UpOwotICAg
ICAgICBhc3NlbWJseURhdGEuc2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJv
dHRvbSwgbWlkZGxlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYXNzZW1ibHlEYXRhLm1vZGUoKSA9
PSBEcmF3R2x5cGhBc3NlbWJseSk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBt
YXhpbXVtIHdpZHRoLCB2ZXJpZnkgZWFjaCBjb21wb25lbnQuCi0gICAgaWYgKG1heGltdW1HbHlw
aFdpZHRoKSB7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVt
R2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCgpKSk7Ci0g
ICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbigpKSk7Ci0gICAgICAg
IGlmIChhc3NlbWJseURhdGEubWlkZGxlKCkuZ2x5cGgpCi0gICAgICAgICAgICAqbWF4aW11bUds
eXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckds
eXBoKGFzc2VtYmx5RGF0YS5taWRkbGUoKSkpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGgg
PSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2Vt
Ymx5RGF0YS5ib3R0b20oKSkpOwotICAgICAgICByZXR1cm4gYXNzZW1ibHlEYXRhOwotICAgIH0K
LQotICAgIC8vIFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBhdm9p
ZCBnbHlwaCBvdmVybGFwcy4KLSAgICBmbG9hdCBzaXplOwotICAgIGlmIChtX2lzVmVydGljYWwp
IHsKLSAgICAgICAgc2l6ZSA9IGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3AoKSkgKyBo
ZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKCkpOwotICAgICAgICBpZiAoYXNzZW1i
bHlEYXRhLm1pZGRsZSgpLmdseXBoKQotICAgICAgICAgICAgc2l6ZSArPSBoZWlnaHRGb3JHbHlw
aChhc3NlbWJseURhdGEubWlkZGxlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemUgPSBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubGVmdCgpKSArIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5yaWdodCgpKTsKLSAgICAgICAgaWYgKGFzc2VtYmx5RGF0YS5t
aWRkbGUoKS5nbHlwaCkKLSAgICAgICAgICAgIHNpemUgKz0gYWR2YW5jZVdpZHRoRm9yR2x5cGgo
YXNzZW1ibHlEYXRhLm1pZGRsZSgpKTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPiBzdHJldGNoU2l6
ZSgpKQotICAgICAgICByZXR1cm4gZGF0YTsKLQotICAgIHJldHVybiBhc3NlbWJseURhdGE7Ci19
Ci0KIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKIHsKICAgICBBU1NF
UlQoZmlyc3RDaGlsZCgpKTsKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9zdHJldGNoeURhdGEuc2V0Tm9ybWFsTW9kZSgpOworICAgIG1fbWF0aE9wZXJh
dG9yLnVuc3RyZXRjaCgpOworICAgIG1fbWF0aE9wZXJhdG9yLm1faXRhbGljQ29ycmVjdGlvbiA9
IDA7CiAgICAgLy8gV2UgYWRkIHNwYWNpbmcgYXJvdW5kIHRoZSBvcGVyYXRvci4KICAgICAvLyBG
SVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB3aG9sZSBlbWJlbGxpc2hl
ZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgz
MSkuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBvbmx5IGJlIGFkZGVkIGluc2lk
ZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDovL3d3dy53My5vcmcvVFIvTWF0aE1ML2No
YXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KQEAgLTYyNCwyOCArMzY5LDI2IEBAIHZvaWQg
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICBpZiAoIXNob3VsZEFsbG93
U3RyZXRjaGluZygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX21hdGhPcGVyYXRvci5zZXRP
cGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGljYWwpOwogICAgIGlmIChtX2lzVmVydGlj
YWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkKLSAgICAgICAgbV9zdHJldGNo
eURhdGEgPSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKG1fdGV4dENvbnRlbnQpOworICAg
ICAgICBtX21hdGhPcGVyYXRvci5maW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgp
KTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2Ug
Z2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBHbHlwaERhdGEgYmFzZUdseXBoID0gc3R5
bGUoKS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAh
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgICAgICBmbG9hdCBiYXNlU2l6
ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lk
dGhGb3JHbHlwaChiYXNlR2x5cGgpOwotICAgICAgICBpZiAoc3RyZXRjaFNpemUoKSA8PSBiYXNl
U2l6ZSkKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuZmluZFN0cmV0Y2h5RGF0YShzdHlsZSgpLCBu
dWxscHRyLCBzdHJldGNoU2l6ZSgpKTsKKyAgICAgICAgaWYgKCFtX21hdGhPcGVyYXRvci5pc1N0
cmV0Y2hlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX3N0cmV0Y2h5RGF0YSA9
IGZpbmRTdHJldGNoeURhdGEobV90ZXh0Q29udGVudCwgbnVsbHB0cik7CiAgICAgfQogCi0gICAg
aWYgKG1faXNWZXJ0aWNhbCAmJiBtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd1NpemVWYXJp
YW50KSB7CisgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hU
eXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsKICAgICAgICAgLy8gV2UgcmVzaXpl
IHRoZSBvcGVyYXRvciB0byBtYXRjaCB0aGUgb25lIG9mIHRoZSBzaXplIHZhcmlhbnQuCiAgICAg
ICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgc3RyZXRjaCBzaXplIGlzIGFjdHVhbGx5IG5vdCBpbnZvbHZlZCBpbiB0aGUgc2VsZWN0
aW9uIG9mIHRoZSBzaXplIHZhcmlhbnQgaW4gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvci4K
KyAgICAgICAgICAgIC8vIFRoZSBzdHJldGNoIHNpemUgaXMgYWN0dWFsbHkgbm90IGludm9sdmVk
IGluIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHNpemUgdmFyaWFudCBpbiBmaW5kRGlzcGxheVN0eWxl
TGFyZ2VPcGVyYXRvci4KICAgICAgICAgICAgIC8vIFdlIHNpbXBseSB1c2UgdGhlIGhlaWdodCBh
bmQgZGVwdGggb2YgdGhlIHNlbGVjdGVkIHNpemUgdmFyaWFudCBnbHlwaC4KLSAgICAgICAgICAg
IEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZh
cmlhbnQoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSA9IC1nbHlwaEJvdW5kcy55KCk7CiAgICAgICAgICAgICBtX3N0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBnbHlwaEJvdW5kcy5tYXhZKCk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBXZSByZXNjYWxlIHRoZSBoZWlnaHQgYW5kIGRlcHRoIHByb3Bv
cnRpb25hdGVseS4KLSAgICAgICAgICAgIGZsb2F0IHZhcmlhbnRTaXplID0gaGVpZ2h0Rm9yR2x5
cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKKyAgICAgICAgICAgIGZsb2F0IHZhcmlhbnRT
aXplID0gaGVpZ2h0Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAg
ICAgIGZsb2F0IHNpemUgPSBzdHJldGNoU2l6ZSgpOwogICAgICAgICAgICAgZmxvYXQgYXNwZWN0
ID0gc2l6ZSA+IDAgPyB2YXJpYW50U2l6ZSAvIHNpemUgOiAxLjA7CiAgICAgICAgICAgICBtX3N0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICo9IGFzcGVjdDsKQEAgLTY1NCwzMCArMzk3LDMwIEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAgICB9CiAKICAgICBp
ZiAoIW1faXNWZXJ0aWNhbCkgewotICAgICAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpID09
IERyYXdTaXplVmFyaWFudCkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKTsKKyAgICAgICAgaWYgKG1f
bWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFyaWFudCkg
eworICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9t
YXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUgPSAtZ2x5cGhCb3VuZHMueSgpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhC
ZWxvd0Jhc2VsaW5lID0gZ2x5cGhCb3VuZHMubWF4WSgpOwotICAgICAgICAgICAgbV9zdHJldGNo
V2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOwot
ICAgICAgICB9IGVsc2UgaWYgKG1fc3RyZXRjaHlEYXRhLm1vZGUoKSA9PSBEcmF3R2x5cGhBc3Nl
bWJseSkgeworICAgICAgICAgICAgbV9zdHJldGNoV2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlw
aChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOworICAgICAgICB9IGVsc2UgaWYgKG1fbWF0aE9w
ZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5KSB7CiAg
ICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHM7CiAgICAgICAgICAgICBtX3N0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lID0gMDsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dC
YXNlbGluZSA9IDA7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9zdHJldGNoeURhdGEubGVmdCgpKTsKKyAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5sZWZ0KTsKICAgICAgICAgICAgIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1f
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRj
aERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAg
Z2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS5yaWdodCgpKTsKKyAg
ICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9h
c3NlbWJseS5yaWdodCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5l
ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWds
eXBoQm91bmRzLnkoKSk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUg
PSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBo
Qm91bmRzLm1heFkoKSk7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9zdHJldGNoeURhdGEuZXh0ZW5zaW9uKCkpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmV4dGVuc2lvbik7CiAg
ICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0
VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRzLnkoKSk7CiAg
ICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRV
bml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAK
LSAgICAgICAgICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5taWRkbGUoKS5nbHlwaCkgewotICAgICAg
ICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9zdHJldGNoeURhdGEubWlk
ZGxlKCkpOworICAgICAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxl
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpOwogICAgICAgICAgICAgICAgIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgICAg
ICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0
cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAg
ICB9CkBAIC02ODcsMjQxICs0MzAsNTUgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBk
YXRlU3R5bGUoKQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJzdExp
bmVCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1vZGUoKSAhPSBE
cmF3Tm9ybWFsKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQogICAgICAg
ICByZXR1cm4gT3B0aW9uYWw8aW50PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKICAg
ICByZXR1cm4gUmVuZGVyTWF0aE1MVG9rZW46OmZpcnN0TGluZUJhc2VsaW5lKCk7CiB9CiAKIHZv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQg
bG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0
ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGlmIChtX3N0cmV0Y2h5RGF0
YS5tb2RlKCkgIT0gRHJhd05vcm1hbCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJldGNo
ZWQoKSkKICAgICAgICAgbG9naWNhbEhlaWdodCA9IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxp
bmUgKyBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgUmVuZGVyQm94Ojpjb21wdXRl
TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVlcyk7
CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgoUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmln
aW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmltKQotewotICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5k
cyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOwotCi0gICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVj
dChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgo
KSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdp
bi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlw
aHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRn
ZXMgdG8gcGl4ZWwgYm91bmRhcmllcwotICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRo
ZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVs
cyB0aGF0IGhhdmUgbGVzcwotICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBw
aXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMK
LSAgICBGbG9hdFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKLSAgICBzd2l0Y2ggKHRyaW0p
IHsKLSAgICBjYXNlIFRyaW1Ub3A6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VU
byhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hp
ZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VHJpbUJvdHRvbToKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhZRWRnZVRvKGdseXBo
UGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRN
YXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVHJpbVRvcEFuZEJvdHRvbTogewotICAgICAgICBMYXlvdXRVbml0IHRlbXAgPSBnbHlwaFBh
aW50UmVjdC55KCkgKyAxOwotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8odGVt
cC5jZWlsKCkpOwotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQ
YWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlF
ZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlF
ZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKLSAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVHJpbUxlZnQ6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlw
aFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRn
ZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJpbVJp
Z2h0OgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QubWF4WCgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdl
VG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmlt
TGVmdEFuZFJpZ2h0OiB7Ci0gICAgICAgIExheW91dFVuaXQgdGVtcCA9IGdseXBoUGFpbnRSZWN0
LngoKSArIDE7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyh0ZW1wLmNlaWwo
KSk7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVj
dC5tYXhYKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhn
bHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhYKCkpOwotICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDbGlwcGluZyB0
aGUgZW5jbG9zaW5nIEludFJlY3QgYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIGF0IGpvaW5l
ZCBlZGdlcy4KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5j
b250ZXh0KCkpOwotICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7Ci0KLSAgICBH
bHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgYnVmZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnQs
IGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5
cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udCwgYnVmZmVyLCAwLCAxLCBvcmln
aW4pOwotCi0gICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0OwotfQotCi12b2lkIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQotewotICAg
IEFTU0VSVChtX2lzVmVydGljYWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkg
PT0gRHJhd0dseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS5leHRlbnNp
b24oKS5nbHlwaCk7Ci0gICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVl
ZCB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5j
b250ZXh0KCkpOwotCi0gICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9zdHJldGNoeURhdGEuZXh0ZW5zaW9uKCkpOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVu
ZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5
cGggaW50byB0aGUKLSAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3
b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRl
ciBjbGlwcGluZy4KLSAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAg
Y2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRN
YXhZRWRnZVRvKHRvLnkoKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsK
LQotICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0
b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMu
Ci0gICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAg
TGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkg
LSBvZmZzZXRUb0dseXBoVG9wKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3Qo
ZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1h
eFkoKSA8IHRvLnkoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5
cGgoaW5mbywgbV9zdHJldGNoeURhdGEuZXh0ZW5zaW9uKCksIGdseXBoT3JpZ2luLCBUcmltVG9w
QW5kQm90dG9tKTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBs
YXN0UGFpbnRlZEdseXBoUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBhIGNo
YW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBo
IGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCi0gICAgICAgIC8vIHdpdGgg
dHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KLSAgICAgICAgaWYg
KGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0
ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29u
c3QgTGF5b3V0UG9pbnQmIHRvKQotewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBB
U1NFUlQobV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdHbHlwaEFzc2VtYmx5KTsKLSAgICBB
U1NFUlQobV9zdHJldGNoeURhdGEuZXh0ZW5zaW9uKCkuZ2x5cGgpOwotICAgIEFTU0VSVChmcm9t
LngoKSA8PSB0by54KCkpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBl
eHRlbnNpb24gZ2x5cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgaWYgKGZy
b20ueCgpID09IHRvLngoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLQotICAgIC8vIENsaXBwaW5n
IHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90dG9tIGV4
dGVuZGVyIGdseXBoIGludG8gdGhlCi0gICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9tIGdseXBo
IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5kIHNpbXBs
aWZpZXMgbGF0ZXIgY2xpcHBpbmcuCi0gICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0gaW5mby5y
ZWN0OwotICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGZyb20ueCgpKTsKLSAgICBjbGlwQm91
bmRzLnNoaWZ0TWF4WEVkZ2VUbyh0by54KCkpOwotICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xp
cEJvdW5kcyk7Ci0KLSAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBwaXhlbHMg
ZnJvbSB0aGUgbGVmdCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgbGVmdCBi
eSB0d28gcGl4ZWxzLgotICAgIGZsb2F0IG9mZnNldFRvR2x5cGhMZWZ0ID0gLTI7Ci0gICAgTGF5
b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSArIG9mZnNldFRvR2x5
cGhMZWZ0LCBzdGQ6Om1pbihmcm9tLnkoKSwgdG8ueSgpKSArIG1fc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUpOwotICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9h
dFNpemUoKSk7Ci0KLSAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4WCgpIDwgdG8u
eCgpKSB7Ci0gICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBt
X3N0cmV0Y2h5RGF0YS5leHRlbnNpb24oKSwgZ2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQp
OwotICAgICAgICBnbHlwaE9yaWdpbi5zZXRYKGdseXBoT3JpZ2luLngoKSArIGxhc3RQYWludGVk
R2x5cGhSZWN0LndpZHRoKCkpOwotCi0gICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBp
ZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiBy
ZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3RhbmdsZQotICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJ
biB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5vdGhpbmcuCi0gICAgICAgIGlmIChsYXN0UGFpbnRl
ZEdseXBoUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZv
aWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlck1hdGhNTFRva2VuOjpwYWludChp
bmZvLCBwYWludE9mZnNldCk7CiAKLSAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNh
YmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd05v
cm1hbCkKKyAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSB8fCAhbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4
dCgpKTsKICAgICBpbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3Ioc3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwogCi0gICAgaWYgKG1fc3RyZXRjaHlEYXRh
Lm1vZGUoKSA9PSBEcmF3U2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RyZXRjaHlE
YXRhLnZhcmlhbnQoKS5nbHlwaCk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5
cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFyaWFudCkgeworICAgICAgICBBU1NFUlQobV9tYXRo
T3BlcmF0b3IubV92YXJpYW50LmlzVmFsaWQoKSk7CiAgICAgICAgIEdseXBoQnVmZmVyIGJ1ZmZl
cjsKLSAgICAgICAgYnVmZmVyLmFkZChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZ2x5cGgsIG1f
c3RyZXRjaHlEYXRhLnZhcmlhbnQoKS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3N0cmV0
Y2h5RGF0YS52YXJpYW50KCkpKTsKKyAgICAgICAgYnVmZmVyLmFkZChtX21hdGhPcGVyYXRvci5t
X3ZhcmlhbnQuZ2x5cGgsIG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5mb250LCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpKTsKICAgICAgICAgTGF5b3V0UG9p
bnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpKTsKLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9z
dHJldGNoeURhdGEudmFyaWFudCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAgTGF5b3V0
UG9pbnQgb3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0
LnkoKSAtIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dCgpLmRyYXdHbHlw
aHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9zdHJldGNoeURhdGEudmFyaWFudCgpLmZvbnQs
IGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOworICAgICAgICBpbmZvLmNvbnRleHQoKS5k
cmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fbWF0aE9wZXJhdG9yLm1fdmFyaWFu
dC5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2lzVmVydGljYWwpCi0gICAgICAgIHBhaW50VmVydGljYWxHbHlw
aEFzc2VtYmx5KGluZm8sIHBhaW50T2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50SG9y
aXpvbnRhbEdseXBoQXNzZW1ibHkoaW5mbywgcGFpbnRPZmZzZXQpOwotfQotCi12b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGlu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9pc1Zl
cnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdHbHlwaEFz
c2VtYmx5KTsKLSAgICBBU1NFUlQobV9zdHJldGNoeURhdGEudG9wKCkuZ2x5cGgpOwotICAgIEFT
U0VSVChtX3N0cmV0Y2h5RGF0YS5ib3R0b20oKS5nbHlwaCk7Ci0KLSAgICAvLyBXZSBhcmUgcG9z
aXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBi
b3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisg
ICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2Fs
KTsKKyAgICBtX21hdGhPcGVyYXRvci5tX2FzY2VudCA9IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmU7CisgICAgbV9tYXRoT3BlcmF0b3IubV9kZXNjZW50ID0gbV9zdHJldGNoRGVwdGhCZWxv
d0Jhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fd2lkdGggPSBsb2dpY2FsV2lkdGgoKTsK
ICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldCArIGxvY2F0aW9u
KCk7CiAgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxpbmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0
b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKLSAgICBGbG9hdFJl
Y3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS50b3AoKSk7
Ci0gICAgTGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3Bl
cmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7Ci0gICAgTGF5b3V0UmVjdCB0
b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9zdHJldGNoeURhdGEudG9wKCks
IHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQotICAgIEZsb2F0UmVjdCBib3R0b21HbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLmJvdHRvbSgpKTsKLSAgICBM
YXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRv
clRvcExlZnQueSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0
KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKLSAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBo
UGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX3N0cmV0Y2h5RGF0YS5ib3R0b20oKSwgYm90
dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOwotCi0gICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1pZGRs
ZSgpLmdseXBoKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4g
dGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4gVGhlbiBzaGlmdCBpdCBoYWxm
IHRoZSBwYWludCBoZWlnaHQgdG93YXJkIHRoZSBib3R0b20gZ2x5cGguCi0gICAgICAgIEZsb2F0
UmVjdCBtaWRkbGVHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLm1p
ZGRsZSgpKTsKLSAgICAgICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JU
b3BMZWZ0LngoKSwgdG9wR2x5cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmln
aW4ubW92ZUJ5KExheW91dFBvaW50KDAsIChib3R0b21HbHlwaFBhaW50UmVjdC55KCkgLSB0b3BH
bHlwaFBhaW50UmVjdC5tYXhZKCkpIC8gMi4wKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2lu
Lm1vdmVCeShMYXlvdXRQb2ludCgwLCBtaWRkbGVHbHlwaEJvdW5kcy5oZWlnaHQoKSAvIDIuMCkp
OwotCi0gICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBo
KGluZm8sIG1fc3RyZXRjaHlEYXRhLm1pZGRsZSgpLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRv
cEFuZEJvdHRvbSk7Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZv
LCB0b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBtaWRkbGVHbHlwaFBhaW50UmVj
dC5taW5YTWluWUNvcm5lcigpKTsKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkds
eXBoKGluZm8sIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUds
eXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxs
V2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1h
eFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci19Ci0K
LXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHko
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAg
QVNTRVJUKCFtX2lzVmVydGljYWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkg
PT0gRHJhd0dseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS5sZWZ0KCku
Z2x5cGgpOwotICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS5yaWdodCgpLmdseXBoKTsKLQotICAg
IC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhl
IHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMgb2Ygb3Vy
IHBhaW50IGJveC4KLSAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNl
dCArIGxvY2F0aW9uKCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUobV9sZWFkaW5nU3BhY2Us
IDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVm
dCk7Ci0gICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCks
IG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAg
ICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9zdHJl
dGNoeURhdGEubGVmdCgpLCBsZWZ0R2x5cGhPcmlnaW4sIFRyaW1SaWdodCk7Ci0KLSAgICBGbG9h
dFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnJp
Z2h0KCkpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0
LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91bmRzLndpZHRoKCksIG9wZXJhdG9y
VG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBMYXlvdXRS
ZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fc3RyZXRjaHlEYXRh
LnJpZ2h0KCksIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKLQotICAgIGlmIChtX3N0cmV0
Y2h5RGF0YS5taWRkbGUoKS5nbHlwaCkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9y
aWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuCi0gICAg
ICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIGxl
ZnRHbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5
b3V0UG9pbnQoKHJpZ2h0R2x5cGhQYWludFJlY3QueCgpIC0gbGVmdEdseXBoUGFpbnRSZWN0Lm1h
eFgoKSkgLyAyLjAsIDApKTsKLSAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVj
dCA9IHBhaW50R2x5cGgoaW5mbywgbV9zdHJldGNoeURhdGEubWlkZGxlKCksIG1pZGRsZUdseXBo
T3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0
ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIG1p
ZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBmaWxsV2l0aEhv
cml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5tYXhYTWlu
WUNvcm5lcigpLCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgIH0g
ZWxzZQotICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBsZWZ0
R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5Y
TWluWUNvcm5lcigpKTsKKyAgICBpZiAobV9pc1ZlcnRpY2FsKQorICAgICAgICBtX21hdGhPcGVy
YXRvci5wYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRv
cExlZnQpOworICAgIGVsc2UKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IucGFpbnRIb3Jpem9udGFs
R2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRvcExlZnQpOwogfQogCiB2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFpbnRJbmZvRm9y
Q2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewogICAgIC8vIFdlIHNraXAgcGFpbnRpbmcgZm9y
IGludmlzaWJsZSBvcGVyYXRvcnMgdG9vIHRvIGF2b2lkIHNvbWUgIm1pc3NpbmcgY2hhcmFjdGVy
IiBnbHlwaCB0byBhcHBlYXIgaWYgYXBwcm9wcmlhdGUgbWF0aCBmb250cyBhcmUgbm90IGF2YWls
YWJsZS4KLSAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpICE9IERyYXdOb3JtYWwgfHwgaXNJ
bnZpc2libGVPcGVyYXRvcigpKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgp
IHx8IGlzSW52aXNpYmxlT3BlcmF0b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlbmRlck1h
dGhNTFRva2VuOjpwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBhaW50SW5m
b0ZvckNoaWxkLCB1c2VQcmludFJlY3QpOwogfQpAQCAtOTM2LDE5ICs0OTMsMTkgQEAgTGF5b3V0
VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKICAgICAvLyBI
ZW5jZSB3ZSBkZXRlcm1pbmUgdGhlIGVycm9yIGluIHRoZSBsb2dpY2FsIHdpZHRoIHdpdGggcmVz
cGVjdCB0byB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBnbHlwaChzKSB1c2VkIHRvIHBhaW50IHRo
ZSBvcGVyYXRvci4KICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAKLSAg
ICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdOb3JtYWwpIHsKKyAgICBpZiAoIW1f
bWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpIHsKICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50KCks
ICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgICAgIHJldHVybiB3aWR0
aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpOwogICAgIH0KIAotICAgIGlmIChtX3N0cmV0
Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd1NpemVWYXJpYW50KQotICAgICAgICByZXR1cm4gd2lkdGgg
LSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOworICAgIGlm
IChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlh
bnQpCisgICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9w
ZXJhdG9yLm1fdmFyaWFudCk7CiAKLSAgICBmbG9hdCBhc3NlbWJseVdpZHRoID0gYWR2YW5jZVdp
ZHRoRm9yR2x5cGgobV9zdHJldGNoeURhdGEudG9wKCkpOwotICAgIGFzc2VtYmx5V2lkdGggPSBz
dGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3N0cmV0Y2h5RGF0
YS5ib3R0b20oKSkpOwotICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRo
LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS5leHRlbnNpb24oKSkpOwotICAg
IGlmIChtX3N0cmV0Y2h5RGF0YS5taWRkbGUoKS5nbHlwaCkKLSAgICAgICAgYXNzZW1ibHlXaWR0
aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fc3RyZXRj
aHlEYXRhLm1pZGRsZSgpKSk7CisgICAgZmxvYXQgYXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0
aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkudG9wKTsKKyAgICBhc3NlbWJseVdp
ZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRo
T3BlcmF0b3IubV9hc3NlbWJseS5ib3R0b20pKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3RkOjpt
YXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9h
c3NlbWJseS5leHRlbnNpb24pKTsKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5t
aWRkbGUuaXNWYWxpZCgpKQorICAgICAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1i
bHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5t
aWRkbGUpKTsKICAgICByZXR1cm4gd2lkdGggLSBhc3NlbWJseVdpZHRoOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmgKaW5kZXggYWFlZTQ2YS4uM2JiNjBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJNYXRoT3BlcmF0
b3IuaCIKICNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0
aE1MVG9rZW4uaCIKIApAQCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRo
ZSBkaXNwbGF5c3R5bGUgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICBib29sIGlzTGFyZ2VPcGVy
YXRvckluRGlzcGxheVN0eWxlKCkgY29uc3QgeyByZXR1cm4gIWhhc09wZXJhdG9yRmxhZyhNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OlN0cmV0Y2h5KSAmJiBoYXNPcGVyYXRvckZsYWcoTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5OjpMYXJnZU9wKTsgfQogICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNWZXJ0aWNhbDsgfQotICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVj
dGlvbigpIGNvbnN0OworICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fbWF0aE9wZXJhdG9yLml0YWxpY0NvcnJlY3Rpb24oKTsgfQogCiAgICAgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVTdHlsZSgpIGZpbmFsOwpAQCAtNzMsNjEgKzc0LDYg
QEAgcHJvdGVjdGVkOgogICAgIFVDaGFyIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0Q29udGVudDsgfQogCiBwcml2YXRlOgotICAgIGVudW0gRHJhd01vZGUgewotICAgICAgICBE
cmF3Tm9ybWFsLCBEcmF3U2l6ZVZhcmlhbnQsIERyYXdHbHlwaEFzc2VtYmx5Ci0gICAgfTsKLQot
ICAgIGNsYXNzIFN0cmV0Y2h5RGF0YSB7Ci0gICAgcHVibGljOgotICAgICAgICBEcmF3TW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Ci0gICAgICAgIEdseXBoRGF0YSB2YXJpYW50
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhWzBdOyB9Ci0gICAgICAgIEdseXBoRGF0YSB0b3AoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFbMF07IH0KLSAgICAgICAgR2x5cGhEYXRhIGV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YVsxXTsgfQotICAgICAgICBHbHlwaERhdGEgYm90dG9tKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhWzJdOyB9Ci0gICAgICAgIEdseXBoRGF0YSBtaWRkbGUoKSBj
b25zdCB7IHJldHVybiBtX2RhdGFbM107IH0KLSAgICAgICAgR2x5cGhEYXRhIGxlZnQoKSBjb25z
dCB7IHJldHVybiBtX2RhdGFbMl07IH0KLSAgICAgICAgR2x5cGhEYXRhIHJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhWzBdOyB9Ci0KLSAgICAgICAgdm9pZCBzZXROb3JtYWxNb2RlKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9tb2RlID0gRHJhd05vcm1hbDsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIHNldFNpemVWYXJpYW50TW9kZShjb25zdCBHbHlwaERhdGEmIHZhcmlhbnQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fbW9kZSA9IERyYXdTaXplVmFyaWFudDsKLSAgICAgICAg
ICAgIG1fZGF0YVswXSA9IHZhcmlhbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRHbHlw
aEFzc2VtYmx5TW9kZShjb25zdCBHbHlwaERhdGEmIHRvcCwgY29uc3QgR2x5cGhEYXRhJiBleHRl
bnNpb24sIGNvbnN0IEdseXBoRGF0YSYgYm90dG9tLCBjb25zdCBHbHlwaERhdGEmIG1pZGRsZSkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9tb2RlID0gRHJhd0dseXBoQXNzZW1ibHk7Ci0gICAg
ICAgICAgICBtX2RhdGFbMF0gPSB0b3A7Ci0gICAgICAgICAgICBtX2RhdGFbMV0gPSBleHRlbnNp
b247Ci0gICAgICAgICAgICBtX2RhdGFbMl0gPSBib3R0b207Ci0gICAgICAgICAgICBtX2RhdGFb
M10gPSBtaWRkbGU7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyZXRjaHlEYXRhKCkKLSAgICAgICAg
ICAgIDogbV9tb2RlKERyYXdOb3JtYWwpIHsgfQotICAgICAgICBTdHJldGNoeURhdGEoY29uc3Qg
U3RyZXRjaHlEYXRhJiBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGRhdGEu
bV9tb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIERyYXdOb3JtYWw6Ci0gICAgICAgICAgICAgICAg
c2V0Tm9ybWFsTW9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBEcmF3U2l6ZVZhcmlhbnQ6Ci0gICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnRNb2RlKGRh
dGEudmFyaWFudCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RHJhd0dseXBoQXNzZW1ibHk6Ci0gICAgICAgICAgICAgICAgc2V0R2x5cGhBc3NlbWJseU1vZGUo
ZGF0YS50b3AoKSwgZGF0YS5leHRlbnNpb24oKSwgZGF0YS5ib3R0b20oKSwgZGF0YS5taWRkbGUo
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIERyYXdNb2RlIG1fbW9kZTsKLSAgICAgICAgLy8gRklYTUU6
IEZvciBPcGVuVHlwZSBmb250cyB3aXRoIGEgTUFUSCB0YWJsZSBhbGwgdGhlIGdseXBocyBhcmUg
ZnJvbSB0aGUgc2FtZSBmb250LCBzbyB3ZSB3b3VsZCBvbmx5IG5lZWQgdG8gc3RvcmUgdGhlIGds
eXBoIGluZGljZXMgaGVyZS4KLSAgICAgICAgR2x5cGhEYXRhIG1fZGF0YVs0XTsKLSAgICB9Owot
CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlz
QW5vbnltb3VzKCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFub255bW91cykiIDogIlJlbmRl
ck1hdGhNTE9wZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZv
clNlbGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQ
cmludFJlY3QpIGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxPcGVyYXRvcigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KQEAgLTE0MSwyNCArODcsNiBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdDsKIAotICAgIGJvb2wgZ2V0R2x5
cGhBc3NlbWJseUZhbGxCYWNrKFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
LCBTdHJldGNoeURhdGEmKSBjb25zdDsKLSAgICBTdHJldGNoeURhdGEgZ2V0RGlzcGxheVN0eWxl
TGFyZ2VPcGVyYXRvcihVQ2hhcikgY29uc3Q7Ci0gICAgU3RyZXRjaHlEYXRhIGZpbmRTdHJldGNo
eURhdGEoVUNoYXIsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCk7Ci0KLSAgICBlbnVtIEdseXBo
UGFpbnRUcmltbWluZyB7Ci0gICAgICAgIFRyaW1Ub3AsCi0gICAgICAgIFRyaW1Cb3R0b20sCi0g
ICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCi0gICAgICAgIFRyaW1MZWZ0LAotICAgICAgICBUcmlt
UmlnaHQsCi0gICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKLSAgICB9OwotCi0gICAgTGF5b3V0UmVj
dCBwYWludEdseXBoKFBhaW50SW5mbyYsIGNvbnN0IEdseXBoRGF0YSYsIGNvbnN0IExheW91dFBv
aW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyk7Ci0gICAgdm9pZCBmaWxsV2l0aFZlcnRp
Y2FsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNv
bnN0IExheW91dFBvaW50JiB0byk7Ci0gICAgdm9pZCBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNp
b25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0
UG9pbnQmIHRvKTsKLSAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KFBhaW50SW5m
byYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludEhvcml6b250YWxHbHlwaEFz
c2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBzZXRPcGVy
YXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0
ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgQXRvbWljU3RyaW5n
JiBhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgdm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BE
aWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOwpAQCAtMTc1
LDcgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3RyYWlsaW5nU3BhY2U7CiAg
ICAgTGF5b3V0VW5pdCBtX21pblNpemU7CiAgICAgTGF5b3V0VW5pdCBtX21heFNpemU7Ci0gICAg
U3RyZXRjaHlEYXRhIG1fc3RyZXRjaHlEYXRhOworICAgIE1hdGhPcGVyYXRvciBtX21hdGhPcGVy
YXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277144</attachid>
            <date>2016-04-23 01:32:14 -0700</date>
            <delta_ts>2016-05-09 00:50:56 -0700</delta_ts>
            <desc>Patch for EWS testing</desc>
            <filename>156921-EWS.patch</filename>
            <type>text/plain</type>
            <size>83672</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTIyODZiNi4uOTQ5NDZjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTEsNiArMjUxMSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY3MjUwNC4uNGFm
YmM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAxNi0wNC0yMiAgRnJlZGVyaWMg
V2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgTW92ZSBzZWxlY3Rpb24gYW5kIGRy
YXdpbmcgb2Ygc3RyZXRjaHkgb3BlcmF0b3JzIGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0b3Ig
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
NjkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDogQWRkIHRoZSBNYXRoT3BlcmF0b3IgZmlsZXMuCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRzRm9y
R2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29y
ZTo6aGVpZ2h0Rm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAg
ICAgICAoV2ViQ29yZTo6YWR2YW5jZVdpZHRoRm9yR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1h
dGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IE1vdmVkIGZyb20gUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldFNp
emVWYXJpYW50KTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseSk6IE1vdmVkIGZyb20gUmVuZGVy
TWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbmREaXNw
bGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvciB3
aXRoIGFkZGl0aW9uYWwgc3R5bGUgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9w
ZXJhdG9yOjpnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Ok1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE9wZXJhdG9yOjpwYWludEdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNp
b25HbHlwaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpwYWludFZl
cnRpY2FsR2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9w
ZXJhdG9yOjppc1N0cmV0Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnVu
c3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlE
YXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnN0cmV0Y2hTaXplKToKKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICBGb3Igbm93
IHdlIGNhbGwgc2V0T3BlcmF0b3IgdG8gdHJhbnNtaXQgaW5mb3JtYXRpb24gdG8gbV9tYXRoT3Bl
cmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5
bGUpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgRm9yIG5v
dyB3ZSBzZXQgc29tZSBtX21hdGhPcGVyYXRvciBtZW1iZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUg
aW5mb3JtYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmly
c3RMaW5lQmFzZWxpbmUpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdo
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50
KTogRGl0dG8uCisgICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVt
YmVycyB0byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4pOiBVcGRhdGVkIHRvIHVzZSBNYXRo
T3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp0cmFpbGluZ1NwYWNlRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2Vt
Ymx5RmFsbEJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3Bl
cmF0b3I6OmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdseXBoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludFZlcnRp
Y2FsR2x5cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24pOiBVcGRhdGVk
IHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBEZWxl
dGVkLgorCisyMDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvcjogcmVmYWN0b3IgbWFuYWdlbWVudCBvZiBzdHJl
dGNoeSBkYXRhIGFuZCBpdGFsaWMgY29ycmVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2OTEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hh
bmdlZC4KKworICAgICAgICBXZSB1c2UgdW5pb24gdG8gc2ltcGxpZnkgdGhlIHN0cnVjdHVyZSB1
c2VkIHRvIG1hbmFnZSB0aGUgZ2x5cGggYXNzZW1ibHkgYW5kIHRoZSB0eXBlIG9mIHN0cmV0Y2hp
bmcuCisgICAgICAgIFdlIGFsc28gbW9kaWZ5IHRoZSBzaWduYXR1cmUgb2Ygc29tZSBmdW5jdGlv
bnMgdG8gcmV0cmlldmUgZGlzcGxheSBvcGVyYXRvciBhbmQgc3RyZXRjaHkgZGF0YS4KKyAgICAg
ICAgRmluYWxseSwgd2UgaW50cm9kdWNlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBlYXNpbHkg
c2V0IHRoZSBzdHJldGNoeSBkYXRhLgorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVc2UgdGhlIG5ldyBkYXRhIG1l
bWJlcnMgYW5kIGZ1bmN0aW9uIHNpZ25hdHVyZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRvIHNl
dCBhIHNpemUgdmFyaWFudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzZXRHbHlwaEFzc2VtYmx5KTogTmV3IGhlbHBlciBmdW5jdGlvbiB0byBzZXQgYSBnbHlwaCBh
c3NlbWJseS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlw
aEFzc2VtYmx5RmFsbEJhY2spOiBXZSBjaGFuZ2UgdGhlIHNpZ25hdHVyZSB0byB1c2UgYSBHbHlw
aEFzc2VtYmx5RGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpm
aW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IFdlIHJlbmFtZSB0aGUgZnVuY3Rpb24gYW5k
CisgICAgICAgIGNoYW5nZSBpdHMgc2lnbmF0dXJlIHRvIHJlbW92ZSB0aGUgcmV0dXJuIHZhbHVl
LgorICAgICAgICBXZSBub3cgYWxzbyBzZXQgdGhlIGl0YWxpYyBjb3JyZWN0aW9uIHdoZW4gYSBk
aXNwbGF5IG9wZXJhdG9yIGlzIGZvdW5kLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBXZSBjaGFuZ2UgdGhlIHNpZ25hdHVyZSB0byBp
bnRyb2R1Y2UgYQorICAgICAgICB0YXJnZXQgc2l6ZSBhbmQgcmVtb3ZlIHRoZSByZXR1cm4gdmFs
dWUuCisgICAgICAgIFdlIGFsc28gcmVtb3ZlIHRoZSBjaGFyYWN0ZXIgcGFyYW1ldGVyIHdoaWNo
IGlzIGFsd2F5cyBtX3RleHRDb250ZW50LgorICAgICAgICBUaGlzIGFsc28gZG9lcyB0aGUgZWFy
bHkgcmV0dXJuIHdoZW4gdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogV2UgdXNlIHRoZSBu
ZXcgZGF0YSBtZW1iZXJzIGFuZCBmdW5jdGlvbiBzaWduYXR1cmVzLgorICAgICAgICBUaGUgY2hl
Y2sgZm9yIHRoZSBiYXNlIGdseXBoIHNpemUgaXMgbm93IGRvbmUgaW4gZmluZFN0cmV0Y2h5RGF0
YSwgc28gd2UganVzdCBjaGVjayB3aGV0aGVyCisgICAgICAgIG1fc3RyZXRjaFR5cGUgaXMgVW5z
dHJldGNoZWQgdG8gZG8gYW4gZWFybHkgcmV0dXJuLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogV2UgdXNlIG1fc3RyZXRjaFR5cGUu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpm
aWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBVc2UgdGhlIG5ldyBjbGFzcyBtZW1iZXJz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpv
bnRhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1i
bHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWlu
dENoaWxkcmVuKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6dHJhaWxpbmdTcGFjZUVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6Oml0YWxpY0NvcnJl
Y3Rpb24pOiBXZSBqdXN0IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb24uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGE6OkdseXBoQXNzZW1i
bHlEYXRhKTogTmV3IGNsYXNzIHRvIHN0b3JlIGFuIGFzc2VtYmx5IG9mIEdseXBoRGF0YS4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGE6Om1vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0
Y2h5RGF0YTo6dmFyaWFudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjp0b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YTo6ZXh0ZW5zaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGE6
OmJvdHRvbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6U3RyZXRjaHlEYXRhOjptaWRkbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OlN0cmV0Y2h5RGF0YTo6bGVmdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjpyaWdodCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlE
YXRhOjpzZXROb3JtYWxNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGE6OnNldFNpemVWYXJpYW50TW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjpz
ZXRHbHlwaEFzc2VtYmx5TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRhOjpTdHJldGNoeURhdGEpOiBEZWxldGVkLgorCisy
MDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CisKKyAgICAgICAg
UmVuZGVyTWF0aE1MT3BlcmF0b3IgcmVmYWN0b3Jpbmc6IGludHJvZHVjZSBnZXRCYXNlR2x5cGgg
YW5kIHJlbW92ZSBwYXJhbWV0ZXIgZnJvbSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5MTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMsIHRoZSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24pOiBXZSBkbyBub3QgbmVlZCB0byBwYXNz
IG1fdGV4dENvbnRlbnQgdG8gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvci4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocyk6IFdlIHVzZSBnZXRCYXNlR2x5cGggYW5kIGRvIG5vdCBwYXNzIG1fdGV4dENvbnRlbnQg
dG8gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgpOiBJbnRyb2R1Y2UgYSBoZWxwZXIgZnVuY3Rp
b24gdG8gcmV0cmlldmUgdGhlIGJhc2UgZ2x5cGggYW5kIGRvIHNvbWUgdmFsaWRpdHkgY2hlY2tz
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldERpc3BsYXlTdHls
ZUxhcmdlT3BlcmF0b3IpOiBXZSByZW1vdmUgdGhlIGNoYXJhY3RlciBwYXJhbWV0ZXIgYXMgaXQg
aXMgYWx3YXlzIG1fdGV4dENvbnRlbnQuCisgICAgICAgIFdlIHVzZSBnZXRCYXNlR2x5cGggYW5k
IHJlcGxhY2UgcHJpbWFyeUZvbnQgd2l0aCBiYXNlR2x5cGguZm9udC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBXZSBkbyBu
b3QgcGFzcyBtX3RleHRDb250ZW50IHRvIGdldERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IuCisg
ICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oOiBEZWNsYXJl
IGdldEJhc2VHbHlwaCBhbmQgcmVtb3ZlIHRoZSBwYXJhbWV0ZXIgZnJvbSBnZXREaXNwbGF5U3R5
bGVMYXJnZU9wZXJhdG9yLgorCisyMDE2LTA0LTIyICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdh
bGlhLmNvbT4KKworICAgICAgICBNaW5vciByZWZhY3RvcmluZyBpbiBSZW5kZXJNYXRoTUxPcGVy
YXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCB0aGlzIGlzIG9ubHkgbWlub3IgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBj
aGFuZ2UgdGhlIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpn
ZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2spOgorICAgICAgICBXZSByZW5hbWUgdGhlICJzdGF0ZSIg
aW50ZWdlciB0byBhbiAiZXhwZWN0ZWQiIGVudW0gaW5kaWNhdGluZyB0aGUgbmV4dCBleHBlY3Rl
ZCBwYXJ0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5
cGgpOiBXZSBhZGQgYSBtaXNzaW5nIGRvdCBhdCB0aGUgZW5kIG9mIGEgc2VxdWVuY2UuCisgICAg
ICAgIFdlIGFsc28gcmVwbGFjZSBjZWlsKHgrMSkgd2l0aCBjZWlsKHgpKzEgdG8gZ2V0IHJpZCBv
ZiB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlLgorCiAyMDE2LTA0LTIxICBGcmVkZXJpYyBXYW5nICA8
ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBNb3JlIGltcHJvdmVtZW50cyBhbmQgZXhwbGFu
YXRpb25zIHJlZ2FyZGluZyByZXNldHRpbmcgQ1NTIHByb3BlcnRpZXMgb24gdGhlIDxtYXRoPiBl
bGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMWI4MzRiOC4uZmFkMDJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY1OSw2ICsxNjU5LDggQEAKIAkJ
NDM5MDQ2RTgxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJEQTI1RTgw
MEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5MTJEQTI1
RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8q
IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJN
YXRoTUxVbmRlck92ZXIuaCAqLzsgfTsKKwkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1h
dGhPcGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLzsgfTsK
KwkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODEyQUY4
MEFDIC8qIE1hdGhPcGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkg
LyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmNwcCAqLzsgfTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhN
TFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MzkwNDZEODEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsgfTsKIAkJ
NDM5RDMzNDMxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIw
RjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTE4OSw2ICs5MTkxLDggQEAKIAkJ
NDM5MDQ2RDQxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVy
TWF0aE1MVW5kZXJPdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBN
YXRoT3BlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0
aE9wZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDYxMkRB
MjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXRoT3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5
MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRl
ck1hdGhNTFRva2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1h
dGhNTFRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQwMTNBNjkx
MUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNjkxMiw2ICsxNjkxNiw4IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJl
bmRlck1hdGhNTFRva2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJl
bmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEy
IC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oICovLAorCQkJCTQzOTA0NkQ1MTJEQTI1RTgxMkFG
ODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwICovLAorCQkJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBB
QyAvKiBNYXRoT3BlcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI3NjEyLDYgKzI3NjE4LDcgQEAKIAkJCQk0MzkwNDZF
NjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZFQTEyREEyNUU4MTJBRjgw
QUMgLyogTWF0aE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5
MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2
NDZFODIwMEE0NTJFMSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDFGQTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzEyNzUsNiArMzEyODIsNyBAQAogCQkJCTQzOTA0NkU1MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQzOTA0NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU5MTJEQTI1RTgxMkFG
ODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5NTgwQ0Y5
NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFNDlC
MzA5MTY1RjJGRTEwMDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFD
b250cm9scy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hNzNiOWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2lu
Y2x1ZGUgIk1hdGhPcGVyYXRvci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgaW5saW5lIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEp
Cit7CisgICAgcmV0dXJuIGRhdGEuZm9udCAmJiBkYXRhLmdseXBoID8gZGF0YS5mb250LT5ib3Vu
ZHNGb3JHbHlwaChkYXRhLmdseXBoKSA6IEZsb2F0UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5l
IGZsb2F0IGhlaWdodEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1
cm4gYm91bmRzRm9yR2x5cGgoZGF0YSkuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgYWR2YW5jZVdpZHRoRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJl
dHVybiBkYXRhLmZvbnQgJiYgZGF0YS5nbHlwaCA/IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChk
YXRhLmdseXBoKSA6IDA7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBkYXRhIGNhbiBi
ZSByZW1vdmVkIHdoZW4gT3BlblR5cGUgTUFUSCBmb250IGFyZSB3aWRlbHkgYXZhaWxhYmxlICho
dHRwOi8vd2tidWcvMTU2ODM3KS4KK3N0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNo
YXIgY2hhcmFjdGVyOworICAgIFVDaGFyIHRvcENoYXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hh
cjsKKyAgICBVQ2hhciBib3R0b21DaGFyOworICAgIFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8g
VGhlIGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3Jp
Z2h0IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNv
bnN0IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQgPSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5
Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5
YiwgMHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAw
eDI5ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRo
ZXNpcworICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8g
bGVmdCBzcXVhcmUgYnJhY2tldAorICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2
LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3
LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsg
MHg3ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkg
YnJhY2tldAorICAgIHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwg
Ly8gbGVmdCBjZWlsaW5nCisgICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4
MCAgICB9LCAvLyByaWdodCBjZWlsaW5nCisgICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAw
eDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29yCisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgy
M2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdj
LCAgIDB4N2MsICAgMHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCisgICAgeyAweDIw
MTYsIDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwg
bGluZQorICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8g
cGFyYWxsZWwgdG8KKyAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAg
IH0gLy8gaW50ZWdyYWwgc2lnbgorfTsKKworTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQor
ICAgIDogbV9iYXNlQ2hhcmFjdGVyKDApCisgICAgLCBtX2lzVmVydGljYWwoZmFsc2UpCisgICAg
LCBtX3N0cmV0Y2hUeXBlKFVuc3RyZXRjaGVkKQorICAgICwgbV93aWR0aCgwKQorICAgICwgbV9h
c2NlbnQoMCkKKyAgICAsIG1fZGVzY2VudCgwKQorICAgICwgbV9pdGFsaWNDb3JyZWN0aW9uKDAp
Cit7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFj
dGVyLCBib29sIGlzVmVydGljYWwpCit7CisgICAgbV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJh
Y3RlcjsKKyAgICBtX2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOworfQorCitib29sIE1hdGhPcGVy
YXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBi
YXNlR2x5cGgpIGNvbnN0Cit7CisgICAgYmFzZUdseXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIobV9iYXNlQ2hhcmFjdGVyLCAhc3R5bGUuaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKTsKKyAgICByZXR1cm4gYmFzZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5
cGguZm9udCA9PSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworfQorCit2b2lk
IE1hdGhPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFu
dCkKK3sKKyAgICBBU1NFUlQoc2l6ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZv
bnQtPm1hdGhEYXRhKCkpOworICAgIG1fc3RyZXRjaFR5cGUgPSBTaXplVmFyaWFudDsKKyAgICBt
X3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBo
QXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlE
YXRhKQoreworICAgIG1fc3RyZXRjaFR5cGUgPSBHbHlwaEFzc2VtYmx5OworICAgIG1fYXNzZW1i
bHkgPSBhc3NlbWJseURhdGE7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgQVNTRVJU
KG1faXNWZXJ0aWNhbCk7CisKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0
QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Cisg
ICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsK
KworICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRp
bWVzIHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0g
dGltZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCisgICAgZmxvYXQgZGlzcGxheU9wZXJh
dG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJh
c2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQt
Pm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0
aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOworCisgICAgYmFzZUdseXBoLmZvbnQt
Pm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVW
YXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisKKyAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNp
emUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0
b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50
LgorICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAg
R2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAgICAg
ICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOworICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24g
PSBnbHlwaERhdGEuZm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhE
YXRhLmZvbnQsIGdseXBoRGF0YS5nbHlwaCk7CisgICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChn
bHlwaERhdGEpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworYm9vbCBNYXRoT3BlcmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFj
ayhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRh
OjpBc3NlbWJseVBhcnQ+JiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1i
bHlEYXRhKQoreworICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRoIHRh
YmxlIGlzIGEgYml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkg
dGhlIE1hdGhPcGVyYXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25h
YmxlIHdheS4KKyAgICAvLyBGSVhNRTogTWF0aE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRoZSBt
b3N0IGdlbmVyYWwgZm9ybWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwMzI3KS4KKyAgICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29tcG9u
ZW50cyBmdW5jdGlvbiBpbiBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9tYXN0
ZXIvZm9udHMvT3BlblR5cGVNYXRoL2ZvbnRVdGlsLnB5CisKKyAgICAvLyBXZSBjb3VudCB0aGUg
bnVtYmVyIG9mIG5vbiBleHRlbmRlciBwaWVjZXMuCisgICAgaW50IG5vbkV4dGVuZGVyQ291bnQg
PSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYg
KCFwYXJ0LmlzRXh0ZW5kZXIpCisgICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7CisgICAg
fQorICAgIGlmIChub25FeHRlbmRlckNvdW50ID4gMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCisKKyAg
ICAvLyBXZSBub3cgYnJvd3NlIHRoZSBsaXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmlnaHQg
Zm9yIGhvcml6b250YWwgb3BlcmF0b3JzIGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZlcnRp
Y2FsIG9wZXJhdG9ycy4KKyAgICBlbnVtIFBhcnRUeXBlIHsKKyAgICAgICAgU3RhcnQsCisgICAg
ICAgIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlLAorICAgICAgICBNaWRkbGUsCisgICAg
ICAgIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZCwKKyAgICAgICAgRW5kLAorICAgICAgICBO
b25lCisgICAgfTsKKyAgICBQYXJ0VHlwZSBleHBlY3RlZCA9IFN0YXJ0OworICAgIGFzc2VtYmx5
RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOworICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGgg
PSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYg
KG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBvbmx5IGhhdmUg
YXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVuIHdlIHNraXAgdGhlIG1pZGRsZSBnbHlwaC4K
KyAgICAgICAgICAgIGlmIChleHBlY3RlZCA9PSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRs
ZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVu
ZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkID09IE1pZGRsZSkKKyAgICAgICAgICAg
ICAgICBleHBlY3RlZCA9IEVuZDsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFydC5pc0V4dGVu
ZGVyKSB7CisgICAgICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCisg
ICAgICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7
IC8vIFdlIGNvcHkgdGhlIGV4dGVuZGVyIHBhcnQuCisgICAgICAgICAgICBlbHNlIGlmIChhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMg
ZGlmZmVyZW50IGV4dGVuZGVycy4KKworICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZCkgewor
ICAgICAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhl
IGxlZnQvYm90dG9tIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBFeHRlbmRlckJl
dHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbWlkZGxl
IHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVB
bmRFbmQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXNlIEVuZDoK
KyAgICAgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBz
dXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRN
aWRkbGU6CisgICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKKyAg
ICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZXh0ZW5kZXJz
LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgc3dpdGNoIChleHBlY3RlZCkgeworICAgICAgICBjYXNlIFN0YXJ0OgorICAgICAg
ICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KKyAgICAgICAgICAgIGFzc2Vt
Ymx5RGF0YS5ib3R0b20uZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAgZXhwZWN0ZWQg
PSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICBjYXNl
IE1pZGRsZToKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgorICAgICAg
ICAgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAg
ICBleHBlY3RlZCA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKKyAgICAg
ICAgY2FzZSBFbmQ6CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4K
KyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS50b3AuZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAg
ICAgICAgZXhwZWN0ZWQgPSBOb25lOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNh
c2UgTm9uZToKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFu
IHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5
cGgpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBh
bHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCisKKyAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIHRvcC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lvbiBn
bHlwaC4KKyAgICBpZiAoIWFzc2VtYmx5RGF0YS50b3AuZ2x5cGgpCisgICAgICAgIGFzc2VtYmx5
RGF0YS50b3AuZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOworICAgIGlmICgh
YXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbS5n
bHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisKKyAgICBhc3NlbWJseURhdGEu
dG9wLmZvbnQgPSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgIGFzc2Vt
Ymx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0YS50b3AuZm9udDsKKyAgICBhc3Nl
bWJseURhdGEuYm90dG9tLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZvbnQ7CisgICAgYXNzZW1i
bHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA/IGFzc2VtYmx5
RGF0YS50b3AuZm9udCA6IG51bGxwdHI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBN
YXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBm
bG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkKK3sKKyAgICBB
U1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7CisKKyAgICBHbHlwaERh
dGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAg
IC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4K
KyAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChi
YXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKyAgICAgICAgaWYg
KHRhcmdldFNpemUgPD0gYmFzZVNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7CisgICAgaWYg
KGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CisgICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6
ZVZhcmlhbnRzOworICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0
PiBhc3NlbWJseVBhcnRzOworICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0
TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMs
IGFzc2VtYmx5UGFydHMpOworICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMu
CisgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAg
ICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsK
KyAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKKyAgICAgICAgICAgICAgICAqbWF4
aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKGdseXBoRGF0YSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzaXpl
ID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0
aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0
U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgor
ICAgICAgICBpZiAoIWdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHlsZSwgYXNzZW1ibHlQYXJ0
cywgYXNzZW1ibHlEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAv
LyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8g
dGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgorICAgICAgICBjb25zdCBTdHJldGNoeUNo
YXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9
PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdHJldGNoeUNoYXJhY3RlciA9
ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghc3R5bGUu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAq
IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQg
ZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRpbmcgLTEgb3IgKzEg
YWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVy
LCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgorICAgICAgICBpZiAoIXN0cmV0Y2h5
Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdlIGNvbnZlcnQg
dGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEu
CisgICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0
YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2UpOworICAgICAg
ICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKKyAg
ICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbSA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7CisgICAg
ICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciA/
IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFj
dGVyLT5taWRkbGVDaGFyLCBmYWxzZSkgOiBHbHlwaERhdGEoKTsKKyAgICB9CisKKyAgICAvLyBJ
ZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBtYXhpbXVtIHdpZHRoLCB2ZXJpZnkgZWFjaCBjb21wb25l
bnQuCisgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAgICptYXhpbXVtR2x5cGhX
aWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgo
YXNzZW1ibHlEYXRhLnRvcCkpOworICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1h
eCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24pKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGlt
dW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSk7
CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0
aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZW5zdXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2Ug
ZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBzLgorICAgIGZsb2F0IG1pblNpemUgPSBtX2lz
VmVydGljYWwgPworICAgICAgICBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEudG9wKSArIGhl
aWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1i
bHlEYXRhLmJvdHRvbSkKKyAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURh
dGEubGVmdCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSArIGFk
dmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5yaWdodCk7CisgICAgaWYgKG1pblNpemUg
PiB0YXJnZXRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRHbHlwaEFzc2VtYmx5KGFz
c2VtYmx5RGF0YSk7Cit9CisKK0xheW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEdseXBoKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEm
IGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmlt
KQoreworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOwor
CisgICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhC
b3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsK
KyAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOwor
CisgICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90
aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcworICAg
IC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQg
Zm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUgbGVzcworICAgIC8vIHRo
YW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBz
ZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCisgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMg
PSBpbmZvLnJlY3Q7CisgICAgc3dpdGNoICh0cmltKSB7CisgICAgY2FzZSBUcmltVG9wOgorICAg
ICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwo
KSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Cb3R0b206CisgICAgICAgIGdseXBo
UGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAt
IDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5t
YXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206CisgICAg
ICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgp
ICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50
UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VU
byhnbHlwaFBhaW50UmVjdC55KCkpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VU
byhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1M
ZWZ0OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
eCgpLmNlaWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBh
aW50UmVjdC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1SaWdodDoKKyAgICAg
ICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5m
bG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFp
bnRSZWN0Lm1heFgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdo
dDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lngo
KS5jZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGds
eXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hp
ZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRN
YXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7CisgICAgfQorCisgICAgLy8gQ2xpcHBp
bmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBq
b2luZWQgZWRnZXMuCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGlu
Zm8uY29udGV4dCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisg
ICAgR2x5cGhCdWZmZXIgYnVmZmVyOworICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5m
b250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7CisgICAgaW5mby5jb250ZXh0KCkuZHJh
d0dseXBocyhzdHlsZS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9y
aWdpbik7CisKKyAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Cit9CisKK3ZvaWQgTWF0aE9wZXJh
dG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlv
dXRQb2ludCYgdG8pCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1f
c3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0
ZW5zaW9uLmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7CisKKyAg
ICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9u
J3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
aW5mby5jb250ZXh0KCkpOworCisgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9hc3NlbWJseS5leHRlbnNpb24pOworCisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVu
ZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5
cGggaW50byB0aGUKKyAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3
b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRl
ciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAg
Y2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55KCkpOworICAgIGNsaXBCb3VuZHMuc2hpZnRN
YXhZRWRnZVRvKHRvLnkoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsK
KworICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0
b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMu
CisgICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7CisgICAg
TGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkg
LSBvZmZzZXRUb0dseXBoVG9wKTsKKyAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3Qo
ZnJvbSwgRmxvYXRTaXplKCkpOworCisgICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1h
eFkoKSA8IHRvLnkoKSkgeworICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5
cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJpbVRv
cEFuZEJvdHRvbSk7CisgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZ2x5cGhPcmlnaW4ueSgpICsg
bGFzdFBhaW50ZWRHbHlwaFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIFRoZXJlJ3MgYSBj
aGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVub3VnaCB0aGUgZ2x1ZSBnbHlw
aCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3RhbmdsZQorICAgICAgICAvLyB3aXRo
IHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5vdGhpbmcuCisgICAgICAgIGlm
IChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25H
bHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sKKyAgICBBU1NFUlQoIW1f
aXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7
CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CisgICAgQVNTRVJU
KGZyb20ueCgpIDw9IHRvLngoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3Ig
dGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBp
ZiAoZnJvbS54KCkgPT0gdG8ueCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOworCisgICAgLy8gQ2xp
cHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0
b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20g
Z2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQg
c2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBp
bmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZnJvbS54KCkpOworICAgIGNs
aXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xp
cChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBp
eGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCBs
ZWZ0IGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQgb2Zmc2V0VG9HbHlwaExlZnQgPSAtMjsKKyAg
ICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpICsgb2Zmc2V0
VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgpLCB0by55KCkpKTsKKyAgICBGbG9hdFJlY3Qg
bGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOworCisgICAgd2hpbGUgKGxh
c3RQYWludGVkR2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkgeworICAgICAgICBsYXN0UGFpbnRl
ZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9u
LCBnbHlwaE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7CisgICAgICAgIGdseXBoT3JpZ2luLnNl
dFgoZ2x5cGhPcmlnaW4ueCgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qud2lkdGgoKSk7CisKKyAg
ICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwg
ZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFu
Z2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcg
bm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVy
dGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgQVNTRVJUKG1faXNW
ZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7Cisg
ICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wLmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKG1fYXNzZW1i
bHkuYm90dG9tLmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGds
eXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBl
eGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0UG9pbnQg
b3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2Vp
bGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBGbG9hdFJlY3QgdG9wR2x5cGhCb3Vu
ZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcCk7CisgICAgTGF5b3V0UG9pbnQgdG9w
R2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRv
cEdseXBoQm91bmRzLnkoKSk7CisgICAgTGF5b3V0UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9IHBh
aW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkudG9wLCB0b3BHbHlwaE9yaWdpbiwgVHJp
bUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX2Fzc2VtYmx5LmJvdHRvbSk7CisgICAgTGF5b3V0UG9pbnQgYm90dG9tR2x5cGhPcmln
aW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIHN0cmV0Y2hTaXpl
KCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkp
KTsKKyAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHls
ZSwgaW5mbywgbV9hc3NlbWJseS5ib3R0b20sIGJvdHRvbUdseXBoT3JpZ2luLCBUcmltVG9wKTsK
KworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQ2Vu
dGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWlu
dCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50IGhlaWdodCB0b3dhcmQgdGhl
IGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRSZWN0IG1pZGRsZUdseXBoQm91bmRzID0gYm91
bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAgICAgICBMYXlvdXRQb2ludCBtaWRk
bGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BHbHlwaE9yaWdpbi55KCkpOwor
ICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgKGJvdHRvbUds
eXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1heFkoKSkgLyAyLjApKTsKKyAg
ICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KDAsIG1pZGRsZUdseXBo
Qm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlw
aFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBt
aWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAgICAgIGZpbGxXaXRoVmVy
dGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1h
eFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAg
ICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbWlkZGxlR2x5
cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1p
bllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNp
b25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwg
Ym90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Cit9CisKK3ZvaWQgTWF0aE9w
ZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7
CisgICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09
IEdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmxlZnQuaXNWYWxpZCgpKTsK
KyAgICBBU1NFUlQobV9hc3NlbWJseS5yaWdodC5pc1ZhbGlkKCkpOworCisgICAgLy8gV2UgYXJl
IHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5
cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94
LgorICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50T2Zmc2V0OworICAgIG9w
ZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7CisgICAgTGF5
b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9w
TGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCBsZWZ0R2x5cGhQYWludFJlY3Qg
PSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmxlZnQsIGxlZnRHbHlwaE9yaWdp
biwgVHJpbVJpZ2h0KTsKKworICAgIEZsb2F0UmVjdCByaWdodEdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV9hc3NlbWJseS5yaWdodCk7CisgICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlwaE9y
aWdpbihvcGVyYXRvclRvcExlZnQueCgpICsgbV93aWR0aCAtIHJpZ2h0R2x5cGhCb3VuZHMud2lk
dGgoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsKKyAgICBMYXlvdXRSZWN0IHJp
Z2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LnJp
Z2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVmdCk7CisKKyAgICBMYXlvdXRQb2ludCBiYXNl
bGluZVNoaWZ0KDAsIG1fYXNjZW50KTsKKyAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxp
ZCgpKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0
YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KKyAgICAgICAgTGF5b3V0UG9pbnQgbWlk
ZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVmdEdseXBoT3JpZ2luLnkoKSk7
CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgocmlnaHRHbHlw
aFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4WCgpKSAvIDIuMCwgMCkpOwor
ICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHls
ZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltTGVmdEFu
ZFJpZ2h0KTsKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUs
IGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlm
dCwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQp
OworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywg
bWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQsIHJp
Z2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOworICAg
IH0gZWxzZQorICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwg
aW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0
LCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0KTsK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01h
dGhPcGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGRlMTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIE1hdGhPcGVyYXRvcl9oCisjZGVmaW5lIE1hdGhPcGVyYXRvcl9oCisKKyNpZiBFTkFCTEUo
TUFUSE1MKQorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIK
KyNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisj
aW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZW5kZXJTdHlsZTsKKworY2xhc3MgTWF0aE9wZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBNYXRo
T3BlcmF0b3IoKTsKKyAgICB2b2lkIHNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIGJv
b2wgaXNWZXJ0aWNhbCk7CisKKyAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KKworICAgIGJvb2wgaXNTdHJldGNoZWQo
KSBjb25zdCB7IHJldHVybiBtX3N0cmV0Y2hUeXBlICE9IFVuc3RyZXRjaGVkOyB9CisgICAgdm9p
ZCB1bnN0cmV0Y2goKSB7IG1fc3RyZXRjaFR5cGUgPSBVbnN0cmV0Y2hlZDsgfQorCisgICAgLy8g
RklYTUU6IEFsbCB0aGUgY29kZSBiZWxvdyBzaG91bGQgYmUgcHJpdmF0ZSB3aGVuIGl0IGlzIG5v
IGxvbmdlciBuZWVkZWQgYnkgUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTUyMjQ0KS4KKworICAgIHN0cnVjdCBHbHlwaEFzc2VtYmx5RGF0YSB7CisgICAgICAgIHVu
aW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSB0b3A7CisgICAgICAgICAgICBHbHlwaERhdGEg
cmlnaHQ7CisgICAgICAgIH07CisgICAgICAgIEdseXBoRGF0YSBleHRlbnNpb247CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSBib3R0b207CisgICAgICAgICAgICBHbHlw
aERhdGEgbGVmdDsKKyAgICAgICAgfTsKKyAgICAgICAgR2x5cGhEYXRhIG1pZGRsZTsKKyAgICBH
bHlwaEFzc2VtYmx5RGF0YSgpCisgICAgOiB0b3AoKSwgZXh0ZW5zaW9uKCksIGJvdHRvbSgpLCBt
aWRkbGUoKSB7IH0KKyAgICB9OworICAgIGVudW0gU3RyZXRjaFR5cGUgeworICAgICAgICBVbnN0
cmV0Y2hlZCwKKyAgICAgICAgU2l6ZVZhcmlhbnQsCisgICAgICAgIEdseXBoQXNzZW1ibHkKKyAg
ICB9OworICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKKyAgICAgICAgVHJpbVRvcCwKKyAg
ICAgICAgVHJpbUJvdHRvbSwKKyAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKKyAgICAgICAgVHJp
bUxlZnQsCisgICAgICAgIFRyaW1SaWdodCwKKyAgICAgICAgVHJpbUxlZnRBbmRSaWdodAorICAg
IH07CisKKyAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pc1Zl
cnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOyB9OworICAgIGJvb2wgZ2V0
QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7CisgICAgdm9p
ZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKKyAgICB2b2lkIHNldEdseXBoQXNz
ZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSYpOworICAgIHZvaWQg
ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICB2
b2lkIGZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCogbWF4aW11bUds
eXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOworICAgIGJvb2wgZ2V0R2x5cGhB
c3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgVmVjdG9yPE9wZW5UeXBl
TWF0aERhdGE6OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpOworCisgICAgTGF5
b3V0UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3Qg
R2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5n
KTsKKyAgICB2b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJT
dHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQ
b2ludCYgdG8pOworICAgIHZvaWQgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29u
c3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29u
c3QgTGF5b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5
KGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAg
ICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgVUNoYXIgbV9iYXNlQ2hhcmFj
dGVyOworICAgIGJvb2wgbV9pc1ZlcnRpY2FsOworICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRjaFR5
cGU7CisgICAgdW5pb24geworICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OworICAgICAgICBH
bHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5OworICAgIH07CisgICAgTGF5b3V0VW5pdCBtX3dp
ZHRoOworICAgIExheW91dFVuaXQgbV9hc2NlbnQ7CisgICAgTGF5b3V0VW5pdCBtX2Rlc2NlbnQ7
CisgICAgTGF5b3V0VW5pdCBtX2l0YWxpY0NvcnJlY3Rpb247Cit9OworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoTUFUSE1MKQorI2VuZGlmIC8vIE1hdGhPcGVyYXRvcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CmluZGV4IDgzZGIzNTIuLjI4MDI1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC00NSwzMyArNDUs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB1c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFt
ZXM7CiAKLS8vIEZJWE1FOiBUaGUgT3BlblR5cGUgTUFUSCB0YWJsZSBjb250YWlucyBpbmZvcm1h
dGlvbiB0aGF0IHNob3VsZCBvdmVycmlkZSB0aGlzIHRhYmxlIChodHRwOi8vd2tidWcvMTIyMjk3
KS4KLXN0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7Ci0gICAgVUNoYXIgY2hhcmFjdGVyOwotICAg
IFVDaGFyIHRvcENoYXI7Ci0gICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKLSAgICBVQ2hhciBib3R0
b21DaGFyOwotICAgIFVDaGFyIG1pZGRsZUNoYXI7Ci19OwotLy8gVGhlIGZpcnN0IGxlZnRSaWdo
dFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0IGNh
biBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgotc3RhdGljIGNvbnN0IHNob3J0IGxlZnRSaWdo
dFBhaXJzQ291bnQgPSA1Owotc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5
Q2hhcmFjdGVyc1sxNF0gPSB7Ci0gICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAweDIzOWQs
IDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCi0gICAgeyAweDI5ICAsIDB4MjM5ZSwgMHgy
MzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcwotICAgIHsgMHg1YiAg
LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJhY2tl
dAotICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmln
aHQgc3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwg
MHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAotICAgIHsgMHg3ZCAgLCAweDIzYWIsIDB4
MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAotICAgIHsgMHgy
MzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWlsaW5nCi0g
ICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyByaWdodCBj
ZWlsaW5nCi0gICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAgICB9LCAv
LyBsZWZ0IGZsb29yCi0gICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4MCAg
ICB9LCAvLyByaWdodCBmbG9vcgotICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3Yywg
ICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCi0gICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2
LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQotICAgIHsgMHgyMjI1
LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8KLSAgICB7
IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2ln
bgotfTsKLQogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhNTE9wZXJhdG9yKE1hdGhN
TEVsZW1lbnQmIGVsZW1lbnQsIFJlZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSkKICAgICA6IFJlbmRl
ck1hdGhNTFRva2VuKGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSgwKQpAQCAtMjAyLDE4ICsxNzUsNiBAQCBib29sIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjppc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5k
ZXJTdHlsZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKGlzTGFyZ2VPcGVy
YXRvckluRGlzcGxheVN0eWxlKCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgcHJpbWFyeUZvbnQg
PSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICAgICAgaWYgKGF1dG8q
IG1hdGhEYXRhID0gcHJpbWFyeUZvbnQubWF0aERhdGEoKSkgewotICAgICAgICAgICAgU3RyZXRj
aHlEYXRhIGxhcmdlT3BlcmF0b3IgPSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKG1fdGV4
dENvbnRlbnQpOwotICAgICAgICAgICAgcmV0dXJuIG1hdGhEYXRhLT5nZXRJdGFsaWNDb3JyZWN0
aW9uKHByaW1hcnlGb250LCBsYXJnZU9wZXJhdG9yLnZhcmlhbnQoKS5nbHlwaCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnN0cmV0Y2hUbyhMYXlvdXRVbml0IGhlaWdodEFib3ZlQmFzZWxpbmUsIExheW91dFVuaXQgZGVw
dGhCZWxvd0Jhc2VsaW5lKQogewogICAgIEFTU0VSVChoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSkpOwpAQCAtMzA2LDggKzI2Nyw5IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdseXBoRGF0YSBkYXRhID0gc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gYWR2
YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSk7CisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3Io
bV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOwor
ICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3IuZ2V0QmFzZUdseXBo
KHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpIDog
MDsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewogICAgICAgICBpZiAobWF4aW11bUdseXBoV2lk
dGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBzdHJl
dGNoU2l6ZSgpOwpAQCAtMzE3LDEyICsyNzksMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIH0KICAgICBpZiAoaXNMYXJn
ZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAvLyBMYXJnZSBvcGVyYXRvcnMg
aW4gU1RJWCBXb3JkIGhhdmUgaW5jb3JyZWN0IGFkdmFuY2Ugd2lkdGgsIGNhdXNpbmcgbWlzcGxh
Y2VtZW50IG9mIHN1cGVyc2NyaXB0LCBzbyB3ZSB1c2UgdGhlIGdseXBoIGJvdW5kIGluc3RlYWQg
KGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdGl4Zm9udHMvdHJhY2tpbmcvNDkvKS4KLSAgICAg
ICAgU3RyZXRjaHlEYXRhIGxhcmdlT3BlcmF0b3IgPSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJh
dG9yKG1fdGV4dENvbnRlbnQpOwotICAgICAgICBpZiAobGFyZ2VPcGVyYXRvci5tb2RlKCkgPT0g
RHJhd1NpemVWYXJpYW50KQotICAgICAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBib3VuZHNG
b3JHbHlwaChsYXJnZU9wZXJhdG9yLnZhcmlhbnQoKSkud2lkdGgoKTsKKyAgICAgICAgbV9tYXRo
T3BlcmF0b3IuZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CisgICAgICAg
IGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZh
cmlhbnQpCisgICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fdmFyaWFudCkud2lkdGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyBGSVhNRTogc29tZSBnbHlwaHMgKGUuZy4gdGhlIG9uZSBmb3IgIkZSQUNUSU9OIFNMQVNIIiBp
biB0aGUgU1RJWCBNYXRoIGZvbnQgb3IgbGFyZ2Ugb3BlcmF0b3JzKSBoYXZlIGEgd2lkdGggdGhh
dCBkZXBlbmRzIG9uIHRoZSBoZWlnaHQsIHJlc3VsdGluZyBpbiBsYXJnZSBnYXBzIChodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KLSAgICAgICAgZmluZFN0
cmV0Y2h5RGF0YShtX3RleHRDb250ZW50LCAmbWF4aW11bUdseXBoV2lkdGgpOworICAgICAgICBt
X21hdGhPcGVyYXRvci5maW5kU3RyZXRjaHlEYXRhKHN0eWxlKCksICZtYXhpbXVtR2x5cGhXaWR0
aCk7CiAgICAgfQogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGltdW1HbHlwaFdpZHRoICsgbV90
cmFpbGluZ1NwYWNlOwogfQpAQCAtMzg2LDIzMSArMzQ4LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsCiAgICAgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiB9CiAKLWJvb2wgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhWZWN0b3I8T3BlblR5cGVN
YXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzLCBTdHJldGNoeURhdGEmIHN0cmV0
Y2h5RGF0YSkgY29uc3QKLXsKLSAgICBHbHlwaERhdGEgdG9wOwotICAgIEdseXBoRGF0YSBleHRl
bnNpb247Ci0gICAgR2x5cGhEYXRhIGJvdHRvbTsKLSAgICBHbHlwaERhdGEgbWlkZGxlOwotCi0g
ICAgLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBUeXBlIE1hdGggdGFibGUgaXMgYSBiaXQg
bW9yZSBnZW5lcmFsIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSB0aGUgUmVuZGVyTWF0
aE1MT3BlcmF0b3IgY29kZSwgc28gd2UgdHJ5IHRvIGZhbGxiYWNrIGluIGEgcmVhc29uYWJsZSB3
YXkuCi0gICAgLy8gRklYTUU6IFJlbmRlck1hdGhNTE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRo
ZSBtb3N0IGdlbmVyYWwgZm9ybWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMwMzI3KS4KLSAgICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29t
cG9uZW50cyBmdW5jdGlvbiBpbiBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9t
YXN0ZXIvZm9udHMvT3BlblR5cGVNYXRoL2ZvbnRVdGlsLnB5Ci0KLSAgICAvLyBXZSBjb3VudCB0
aGUgbnVtYmVyIG9mIG5vbiBleHRlbmRlciBwaWVjZXMuCi0gICAgaW50IG5vbkV4dGVuZGVyQ291
bnQgPSAwOwotICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKLSAgICAgICAg
aWYgKCFwYXJ0LmlzRXh0ZW5kZXIpCi0gICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7Ci0g
ICAgfQotICAgIGlmIChub25FeHRlbmRlckNvdW50ID4gMykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCi0K
LSAgICAvLyBXZSBub3cgYnJvd3NlIHRoZSBsaXN0IG9mIHBpZWNlcy4KLSAgICAvLyAxID0gbG9v
ayBmb3IgYSBsZWZ0L2JvdHRvbSBnbHlwaAotICAgIC8vIDIgPSBsb29rIGZvciBhbiBleHRlbmRl
ciBiZXR3ZWVuIGxlZnQvYm90dG9tIGFuZCBtaWQKLSAgICAvLyA0ID0gbG9vayBmb3IgYSBtaWRk
bGUgZ2x5cGgKLSAgICAvLyA1ID0gbG9vayBmb3IgYW4gZXh0ZW5kZXIgYmV0d2VlbiBtaWRkbGUg
YW5kIHJpZ2h0L3RvcAotICAgIC8vIDUgPSBsb29rIGZvciBhIHJpZ2h0L3RvcCBnbHlwaAotICAg
IC8vIDYgPSBubyBtb3JlIHBpZWNlIGV4cGVjdGVkCi0gICAgdW5zaWduZWQgc3RhdGUgPSAxOwot
Ci0gICAgZXh0ZW5zaW9uLmdseXBoID0gMDsKLSAgICBtaWRkbGUuZ2x5cGggPSAwOwotICAgIGZv
ciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKLSAgICAgICAgaWYgKChzdGF0ZSA9PSAy
IHx8IHN0YXRlID09IDMpICYmIG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7Ci0gICAgICAgICAgICAv
LyBXZSBkbyBub3QgdHJ5IHRvIGZpbmQgYSBtaWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBzdGF0
ZSArPSAyOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwYXJ0LmlzRXh0ZW5kZXIpIHsKLSAgICAg
ICAgICAgIGlmICghZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICAgICAgICAgIGV4dGVuc2lvbi5n
bHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBlbHNlIGlmIChleHRlbnNpb24uZ2x5cGgg
IT0gcGFydC5nbHlwaCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMg
bm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhhcyBkaWZmZXJlbnQgZXh0ZW5kZXJzLgotCi0g
ICAgICAgICAgICBpZiAoc3RhdGUgPT0gMSkgewotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9y
ZSBsZWZ0L2JvdHRvbSBwaWVjZSBhbmQgbXVsdGlwbGUgc3VjY2Vzc2l2ZSBleHRlbmRlcnMuCi0g
ICAgICAgICAgICAgICAgc3RhdGUgPSAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9
PSAzKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIG1pZGRsZSBwaWVjZSBhbmQgbXVs
dGlwbGUgc3VjY2Vzc2l2ZSBleHRlbmRlcnMuCi0gICAgICAgICAgICAgICAgc3RhdGUgPSA0Owot
ICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA+PSA1KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBl
eHRlbmRlci4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHN0YXRlID09IDEpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxlZnQvYm90dG9tIHBh
cnQuCi0gICAgICAgICAgICBib3R0b20uZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAg
c3RhdGUgPSAyOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc3RhdGUgPT0gMiB8fCBzdGF0ZSA9PSAzKSB7Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRo
ZSBtaWRkbGUgcGFydC4KLSAgICAgICAgICAgIG1pZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0g
ICAgICAgICAgICBzdGF0ZSA9IDQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChzdGF0ZSA9PSA0IHx8IHN0YXRlID09IDUpIHsKLSAgICAgICAgICAgIC8v
IFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgotICAgICAgICAgICAgdG9wLmdseXBoID0gcGFy
dC5nbHlwaDsKLSAgICAgICAgICAgIHN0YXRlID0gNjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMg
bm90IHN1cHBvcnRlZDogd2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdlIGhhdmUgYW4gZXh0ZW5zaW9u
IGdseXBoLgotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0b3AvYm90dG9tIGdseXBocywgd2Ug
dXNlIHRoZSBleHRlbnNpb24gZ2x5cGguCi0gICAgaWYgKCF0b3AuZ2x5cGgpCi0gICAgICAgIHRv
cC5nbHlwaCA9IGV4dGVuc2lvbi5nbHlwaDsKLSAgICBpZiAoIWJvdHRvbS5nbHlwaCkKLSAgICAg
ICAgYm90dG9tLmdseXBoID0gZXh0ZW5zaW9uLmdseXBoOwotCi0gICAgdG9wLmZvbnQgPSAmc3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgZXh0ZW5zaW9uLmZvbnQgPSB0
b3AuZm9udDsKLSAgICBib3R0b20uZm9udCA9IHRvcC5mb250OwotICAgIGlmIChtaWRkbGUuZ2x5
cGgpCi0gICAgICAgIG1pZGRsZS5mb250ID0gdG9wLmZvbnQ7Ci0KLSAgICBzdHJldGNoeURhdGEu
c2V0R2x5cGhBc3NlbWJseU1vZGUodG9wLCBleHRlbnNpb24sIGJvdHRvbSwgbWlkZGxlKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1SZW5kZXJNYXRoTUxPcGVyYXRvcjo6U3RyZXRjaHlEYXRh
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKFVDaGFy
IGNoYXJhY3RlcikgY29uc3QKLXsKLSAgICBTdHJldGNoeURhdGEgZGF0YTsKLQotICAgIEFTU0VS
VChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7Ci0KLSAg
ICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5
Rm9udCgpOwotICAgIEdseXBoRGF0YSBiYXNlR2x5cGggPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCku
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKTsKLSAgICBpZiAoIXByaW1hcnlGb250Lm1hdGhEYXRhKCkgfHwgYmFzZUdseXBo
LmZvbnQgIT0gJnByaW1hcnlGb250IHx8ICFiYXNlR2x5cGguZm9udCB8fCAhYmFzZUdseXBoLmds
eXBoKQotICAgICAgICByZXR1cm4gZGF0YTsKLQotICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlh
bnRzOwotICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5
UGFydHM7Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGlz
IHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0IFxz
cXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgotICAgIGZsb2F0IGRpc3Bs
YXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGJhc2VHbHlwaC5mb250LT5ib3VuZHNGb3JH
bHlwaChiYXNlR2x5cGguZ2x5cGgpLmhlaWdodCgpICogc3FydE9mVHdvRmxvYXQsIHByaW1hcnlG
b250Lm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRo
RGF0YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7Ci0KLSAgICBwcmltYXJ5Rm9udC5tYXRo
RGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCB0cnVlLCBzaXplVmFyaWFu
dHMsIGFzc2VtYmx5UGFydHMpOwotCi0gICAgLy8gV2UgY2hvb3NlIHRoZSBmaXJzdCBzaXplIHZh
cmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhwZWN0ZWQgZGlzcGxheU9wZXJhdG9yTWlu
SGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gdGhlIGxhcmdlc3QgdmFyaWFudC4KLSAg
ICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgR2x5cGhEYXRh
IHNpemVWYXJpYW50OwotICAgICAgICBzaXplVmFyaWFudC5nbHlwaCA9IHZhcmlhbnQ7Ci0gICAg
ICAgIHNpemVWYXJpYW50LmZvbnQgPSAmcHJpbWFyeUZvbnQ7Ci0gICAgICAgIGRhdGEuc2V0U2l6
ZVZhcmlhbnRNb2RlKHNpemVWYXJpYW50KTsKLSAgICAgICAgaWYgKGJvdW5kc0ZvckdseXBoKHNp
emVWYXJpYW50KS5oZWlnaHQoKSA+PSBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpCi0gICAgICAg
ICAgICByZXR1cm4gZGF0YTsKLSAgICB9Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVJlbmRlck1h
dGhNTE9wZXJhdG9yOjpTdHJldGNoeURhdGEgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmRTdHJl
dGNoeURhdGEoVUNoYXIgY2hhcmFjdGVyLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgpCi17Ci0g
ICAgQVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX2lzVmVydGljYWwpOwotCi0gICAgU3Ry
ZXRjaHlEYXRhIGRhdGE7Ci0gICAgU3RyZXRjaHlEYXRhIGFzc2VtYmx5RGF0YTsKLQotICAgIGNv
bnN0IGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCk7Ci0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpOwotICAgIAotICAgIGlmIChwcmltYXJ5Rm9udC5tYXRoRGF0YSgpICYmIGJhc2VHbHlw
aC5mb250ID09ICZwcmltYXJ5Rm9udCkgewotICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJp
YW50czsKLSAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNz
ZW1ibHlQYXJ0czsKLSAgICAgICAgcHJpbWFyeUZvbnQubWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlh
bnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5
UGFydHMpOwotICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCi0gICAgICAg
IGZvciAoYXV0byYgdmFyaWFudCA6IHNpemVWYXJpYW50cykgewotICAgICAgICAgICAgR2x5cGhE
YXRhIHNpemVWYXJpYW50OwotICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZ2x5cGggPSB2YXJpYW50
OwotICAgICAgICAgICAgc2l6ZVZhcmlhbnQuZm9udCA9ICZwcmltYXJ5Rm9udDsKLSAgICAgICAg
ICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKLSAgICAgICAgICAgICAgICAqbWF4aW11bUdseXBo
V2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KHNpemVWYXJpYW50KSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBkYXRh
LnNldFNpemVWYXJpYW50TW9kZShzaXplVmFyaWFudCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
c2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKHNpemVWYXJpYW50KSA6IGFkdmFu
Y2VXaWR0aEZvckdseXBoKHNpemVWYXJpYW50KTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+
PSBzdHJldGNoU2l6ZSgpKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSB2ZXJpZnkgaWYgdGhlcmUgaXMg
YSBjb25zdHJ1Y3Rpb24uCi0gICAgICAgIGlmICghZ2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGFz
c2VtYmx5UGFydHMsIGFzc2VtYmx5RGF0YSkpCi0gICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKLSAgICAgICAgICAgIHJldHVy
biBkYXRhOwotCi0gICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90IGhhdmUgYSBNQVRIIHRh
YmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0cnVjdGlvbnMuCi0gICAg
ICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyKiBzdHJldGNoeUNoYXJhY3RlciA9IG51bGxwdHI7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heEluZGV4ID0gV1RGX0FSUkFZX0xFTkdUSChzdHJl
dGNoeUNoYXJhY3RlcnMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBtYXhJbmRleDsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVy
c1tpbmRleF0uY2hhcmFjdGVyID09IGNoYXJhY3RlcikgewotICAgICAgICAgICAgICAgIHN0cmV0
Y2h5Q2hhcmFjdGVyID0gJnN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF07Ci0gICAgICAgICAgICAg
ICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBpbmRleCA8IGxlZnRS
aWdodFBhaXJzQ291bnQgKiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBp
biByaWdodC10by1sZWZ0IGRpcmVjdGlvbiB3ZSBzZWxlY3QgdGhlIG1pcnJvcmVkIGZvcm0gYnkg
YWRkaW5nIC0xIG9yICsxIGFjY29yZGluZyB0byB0aGUgcGFyaXR5IG9mIGluZGV4LgotICAgICAg
ICAgICAgICAgICAgICBpbmRleCArPSBpbmRleCAlIDIgPyAtMSA6IDE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBzdHJldGNoeSBjaGFyYWN0ZXIgc2V0IGZv
ciB0aGlzIGNoYXJhY3Rlciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gc3RyZXRjaCBpdC4KLSAgICAg
ICAgaWYgKCFzdHJldGNoeUNoYXJhY3RlcikKLSAgICAgICAgICAgIHJldHVybiBkYXRhOwotCi0g
ICAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8g
YSBsaXN0IG9mIGdseXBoIGRhdGEuCi0gICAgICAgIEdseXBoRGF0YSB0b3AgPSBzdHlsZSgpLmZv
bnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BD
aGFyLCBmYWxzZSk7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb24gPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNp
b25DaGFyLCBmYWxzZSk7Ci0gICAgICAgIEdseXBoRGF0YSBib3R0b20gPSBzdHlsZSgpLmZvbnRD
YXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21D
aGFyLCBmYWxzZSk7Ci0gICAgICAgIEdseXBoRGF0YSBtaWRkbGU7Ci0gICAgICAgIGlmIChzdHJl
dGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhcikKLSAgICAgICAgICAgIG1pZGRsZSA9IHN0eWxlKCku
Zm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1p
ZGRsZUNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLnNldEdseXBoQXNzZW1ibHlN
b2RlKHRvcCwgZXh0ZW5zaW9uLCBib3R0b20sIG1pZGRsZSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KGFzc2VtYmx5RGF0YS5tb2RlKCkgPT0gRHJhd0dseXBoQXNzZW1ibHkpOwotCi0gICAgLy8gSWYg
d2UgYXJlIG1lYXN1cmluZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50
LgotICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lk
dGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFz
c2VtYmx5RGF0YS50b3AoKSkpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1h
eCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24oKSkpOwotICAgICAgICBpZiAoYXNzZW1ibHlEYXRhLm1pZGRsZSgpLmdseXBoKQot
ICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdp
ZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKCkpKTsKLSAgICAg
ICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZh
bmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKCkpKTsKLSAgICAgICAgcmV0dXJu
IGFzc2VtYmx5RGF0YTsKLSAgICB9Ci0KLSAgICAvLyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBp
cyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3ZlcmxhcHMuCi0gICAgZmxvYXQgc2l6ZTsK
LSAgICBpZiAobV9pc1ZlcnRpY2FsKSB7Ci0gICAgICAgIHNpemUgPSBoZWlnaHRGb3JHbHlwaChh
c3NlbWJseURhdGEudG9wKCkpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbSgp
KTsKLSAgICAgICAgaWYgKGFzc2VtYmx5RGF0YS5taWRkbGUoKS5nbHlwaCkKLSAgICAgICAgICAg
IHNpemUgKz0gaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSgpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBzaXplID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmxl
ZnQoKSkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEucmlnaHQoKSk7Ci0gICAg
ICAgIGlmIChhc3NlbWJseURhdGEubWlkZGxlKCkuZ2x5cGgpCi0gICAgICAgICAgICBzaXplICs9
IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUoKSk7Ci0gICAgfQotICAg
IGlmIChzaXplID4gc3RyZXRjaFNpemUoKSkKLSAgICAgICAgcmV0dXJuIGRhdGE7Ci0KLSAgICBy
ZXR1cm4gYXNzZW1ibHlEYXRhOwotfQotCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRh
dGVTdHlsZSgpCiB7CiAgICAgQVNTRVJUKGZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKCFmaXJzdENo
aWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc3RyZXRjaHlEYXRhLnNldE5vcm1hbE1v
ZGUoKTsKKyAgICBtX21hdGhPcGVyYXRvci51bnN0cmV0Y2goKTsKKyAgICBtX21hdGhPcGVyYXRv
ci5tX2l0YWxpY0NvcnJlY3Rpb24gPSAwOwogICAgIC8vIFdlIGFkZCBzcGFjaW5nIGFyb3VuZCB0
aGUgb3BlcmF0b3IuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0
byB0aGUgd2hvbGUgZW1iZWxsaXNoZWQgb3BlcmF0b3IgKGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzEpLgogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91
bGQgb25seSBiZSBhZGRlZCBpbnNpZGUgKHBlcmhhcHMgaW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93
d3cudzMub3JnL1RSL01hdGhNTC9jaGFwdGVyMy5odG1sI3ByZXNtLm9wc3BhY2luZykuCkBAIC02
MjQsMjggKzM2OSwyNiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgp
CiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2Fs
KTsKICAgICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxl
KCkpCi0gICAgICAgIG1fc3RyZXRjaHlEYXRhID0gZ2V0RGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRv
cihtX3RleHRDb250ZW50KTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuZmluZERpc3BsYXlTdHls
ZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIFdlIGRvIG5v
dCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgR2x5
cGhEYXRhIGJhc2VHbHlwaCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsK
LSAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChi
YXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKLSAgICAgICAgaWYg
KHN0cmV0Y2hTaXplKCkgPD0gYmFzZVNpemUpCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmRT
dHJldGNoeURhdGEoc3R5bGUoKSwgbnVsbHB0ciwgc3RyZXRjaFNpemUoKSk7CisgICAgICAgIGlm
ICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9zdHJldGNoeURhdGEgPSBmaW5kU3RyZXRjaHlEYXRhKG1fdGV4dENvbnRlbnQsIG51
bGxwdHIpOwogICAgIH0KIAotICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9zdHJldGNoeURhdGEu
bW9kZSgpID09IERyYXdTaXplVmFyaWFudCkgeworICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9t
YXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlNpemVWYXJpYW50KSB7
CiAgICAgICAgIC8vIFdlIHJlc2l6ZSB0aGUgb3BlcmF0b3IgdG8gbWF0Y2ggdGhlIG9uZSBvZiB0
aGUgc2l6ZSB2YXJpYW50LgogICAgICAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5
bGUoKSkgewotICAgICAgICAgICAgLy8gVGhlIHN0cmV0Y2ggc2l6ZSBpcyBhY3R1YWxseSBub3Qg
aW52b2x2ZWQgaW4gdGhlIHNlbGVjdGlvbiBvZiB0aGUgc2l6ZSB2YXJpYW50IGluIGdldERpc3Bs
YXlTdHlsZUxhcmdlT3BlcmF0b3IuCisgICAgICAgICAgICAvLyBUaGUgc3RyZXRjaCBzaXplIGlz
IGFjdHVhbGx5IG5vdCBpbnZvbHZlZCBpbiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBzaXplIHZhcmlh
bnQgaW4gZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IuCiAgICAgICAgICAgICAvLyBXZSBz
aW1wbHkgdXNlIHRoZSBoZWlnaHQgYW5kIGRlcHRoIG9mIHRoZSBzZWxlY3RlZCBzaXplIHZhcmlh
bnQgZ2x5cGguCi0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkpOworICAgICAgICAgICAgRmxvYXRSZWN0IGds
eXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAg
ICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAtZ2x5cGhCb3VuZHMueSgp
OwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gZ2x5cGhCb3VuZHMu
bWF4WSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UgcmVzY2FsZSB0aGUg
aGVpZ2h0IGFuZCBkZXB0aCBwcm9wb3J0aW9uYXRlbHkuCi0gICAgICAgICAgICBmbG9hdCB2YXJp
YW50U2l6ZSA9IGhlaWdodEZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSk7CisgICAg
ICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckdseXBoKG1fbWF0aE9wZXJhdG9y
Lm1fdmFyaWFudCk7CiAgICAgICAgICAgICBmbG9hdCBzaXplID0gc3RyZXRjaFNpemUoKTsKICAg
ICAgICAgICAgIGZsb2F0IGFzcGVjdCA9IHNpemUgPiAwID8gdmFyaWFudFNpemUgLyBzaXplIDog
MS4wOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSAqPSBhc3BlY3Q7
CkBAIC02NTQsMzAgKzM5NywzMCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVT
dHlsZSgpCiAgICAgfQogCiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKLSAgICAgICAgaWYgKG1f
c3RyZXRjaHlEYXRhLm1vZGUoKSA9PSBEcmF3U2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgICAgIEZs
b2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlh
bnQoKSk7CisgICAgICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhP
cGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5k
cyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAg
ICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAg
ICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsK
LSAgICAgICAgICAgIG1fc3RyZXRjaFdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9zdHJl
dGNoeURhdGEudmFyaWFudCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChtX3N0cmV0Y2h5RGF0YS5t
b2RlKCkgPT0gRHJhd0dseXBoQXNzZW1ibHkpIHsKKyAgICAgICAgICAgIG1fc3RyZXRjaFdpZHRo
ID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRv
cjo6R2x5cGhBc3NlbWJseSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzOwog
ICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDA7CiAgICAgICAgICAg
ICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSAwOwogCi0gICAgICAgICAgICBnbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLmxlZnQoKSk7CisgICAgICAgICAg
ICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHku
bGVmdCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRz
LnkoKSk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1h
eDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1h
eFkoKSk7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9zdHJl
dGNoeURhdGEucmlnaHQoKSk7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkucmlnaHQpOwogICAgICAgICAgICAgbV9zdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJl
dGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVw
dGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLmV4dGVuc2lvbigpKTsKKyAg
ICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9h
c3NlbWJseS5leHRlbnNpb24pOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNl
bGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUs
IC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2Vs
aW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBn
bHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBpZiAobV9zdHJldGNoeURhdGEubWlk
ZGxlKCkuZ2x5cGgpIHsKLSAgICAgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fc3RyZXRjaHlEYXRhLm1pZGRsZSgpKTsKKyAgICAgICAgICAgIGlmIChtX21hdGhPcGVy
YXRvci5tX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxl
KTsKICAgICAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRz
LnkoKSk7CiAgICAgICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3Rk
OjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5k
cy5tYXhZKCkpOwogICAgICAgICAgICAgfQpAQCAtNjg3LDI0MSArNDMwLDU0IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKIAogT3B0aW9uYWw8aW50PiBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogewotICAgIGlmIChtX3N0
cmV0Y2h5RGF0YS5tb2RlKCkgIT0gRHJhd05vcm1hbCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3Iu
aXNTdHJldGNoZWQoKSkKICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPGludD4obV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSk7CiAgICAgcmV0dXJuIFJlbmRlck1hdGhNTFRva2VuOjpmaXJzdExp
bmVCYXNlbGluZSgpOwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9n
aWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRv
cCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsK
LSAgICBpZiAobV9zdHJldGNoeURhdGEubW9kZSgpICE9IERyYXdOb3JtYWwpCisgICAgaWYgKG1f
bWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBtX3N0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICsgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lOwog
ICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNh
bFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpwYWludEdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgR2x5cGhEYXRhJiBkYXRhLCBj
b25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcgdHJpbSkKLXsKLSAg
ICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChkYXRhKTsKLQotICAgIExh
eW91dFJlY3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBMYXlvdXRTaXplKGdseXBoQm91bmRzLngo
KSArIGdseXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91bmRzLmhlaWdodCgpKSk7Ci0gICAgZ2x5
cGhQYWludFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5cGhCb3VuZHMueSgpKTsKLQotICAgIC8v
IEluIG9yZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVnbHkgd2l0aCBvbmUgYW5vdGhlciB3ZSBz
bmFwIHRoZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVsIGJvdW5kYXJpZXMKLSAgICAvLyBhbmQg
dHJpbSBvZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJpbSBpcyB0byBhY2NvdW50IGZvciBmb250
cyB0aGF0IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZlIGxlc3MKLSAgICAvLyB0aGFuIGZ1bGwg
Y292ZXJhZ2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBpbnRyb2R1Y2Ugc21hbGwgc2VhbXMgYmV0
d2VlbiBjb25uZWN0ZWQgZ2x5cGhzCi0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJl
Y3Q7Ci0gICAgc3dpdGNoICh0cmltKSB7Ci0gICAgY2FzZSBUcmltVG9wOgotICAgICAgICBnbHlw
aFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOwot
ICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1Cb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0
LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAg
ICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206IHsKLSAgICAgICAgTGF5
b3V0VW5pdCB0ZW1wID0gZ2x5cGhQYWludFJlY3QueSgpICsgMTsKLSAgICAgICAgZ2x5cGhQYWlu
dFJlY3Quc2hpZnRZRWRnZVRvKHRlbXAuY2VpbCgpKTsKLSAgICAgICAgZ2x5cGhQYWludFJlY3Qu
c2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7Ci0gICAg
ICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7Ci0gICAgICAg
IGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKSk7Ci0gICAg
fQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0OgotICAgICAgICBnbHlwaFBhaW50
UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOwotICAgICAg
ICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRyaW1SaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRN
YXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNs
aXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdodDogewotICAgICAgICBMYXlvdXRVbml0
IHRlbXAgPSBnbHlwaFBhaW50UmVjdC54KCkgKyAxOwotICAgICAgICBnbHlwaFBhaW50UmVjdC5z
aGlmdFhFZGdlVG8odGVtcC5jZWlsKCkpOwotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1h
eFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xp
cEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsKLSAgICAgICAgY2xpcEJv
dW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKLSAgICB9Ci0gICAg
fQotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90
ZW50aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5jbGlw
KGNsaXBCb3VuZHMpOwotCi0gICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZlci5hZGQo
ZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7Ci0gICAg
aW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRhLmZv
bnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKLQotICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsK
LX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lv
bkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExh
eW91dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQo
bV9zdHJldGNoeURhdGEubW9kZSgpID09IERyYXdHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQo
bV9zdHJldGNoeURhdGEuZXh0ZW5zaW9uKCkuZ2x5cGgpOwotICAgIEFTU0VSVChmcm9tLnkoKSA8
PSB0by55KCkpOwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBleHRlbnNp
b24gZ2x5cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgaWYgKGZyb20ueSgp
ID09IHRvLnkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLQotICAgIEZsb2F0UmVjdCBnbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLmV4dGVuc2lvbigpKTsKLQotICAg
IC8vIENsaXBwaW5nIHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0
aGUgYm90dG9tIGV4dGVuZGVyIGdseXBoIGludG8gdGhlCi0gICAgLy8gcmVnaW9ucyBvZiB0aGUg
Ym90dG9tIGdseXBoIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVs
cykgYW5kIHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBpbmcuCi0gICAgTGF5b3V0UmVjdCBjbGlwQm91
bmRzID0gaW5mby5yZWN0OwotICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGZyb20ueSgpKTsK
LSAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyh0by55KCkpOwotICAgIGluZm8uY29udGV4
dCgpLmNsaXAoY2xpcEJvdW5kcyk7Ci0KLSAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRv
IHR3byBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92
ZSBpdCB1cCBieSB0d28gcGl4ZWxzLgotICAgIGZsb2F0IG9mZnNldFRvR2x5cGhUb3AgPSBnbHlw
aEJvdW5kcy55KCkgKyAyOwotICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9p
bnQoZnJvbS54KCksIGZyb20ueSgpIC0gb2Zmc2V0VG9HbHlwaFRvcCk7Ci0gICAgRmxvYXRSZWN0
IGxhc3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKLQotICAgIHdoaWxlIChs
YXN0UGFpbnRlZEdseXBoUmVjdC5tYXhZKCkgPCB0by55KCkpIHsKLSAgICAgICAgbGFzdFBhaW50
ZWRHbHlwaFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fc3RyZXRjaHlEYXRhLmV4dGVuc2lvbigp
LCBnbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7Ci0gICAgICAgIGdseXBoT3JpZ2luLnNl
dFkoZ2x5cGhPcmlnaW4ueSgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3QuaGVpZ2h0KCkpOwotCi0g
ICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxs
IGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3Rh
bmdsZQotICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3
IG5vdGhpbmcuCi0gICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQo
IW1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaHlEYXRhLm1vZGUoKSA9PSBEcmF3
R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaHlEYXRhLmV4dGVuc2lvbigpLmds
eXBoKTsKLSAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKLQotICAgIC8vIElmIHRoZXJl
IGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nLgotICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQo
KSk7Ci0KLSAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVz
IHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQotICAgIC8vIHJlZ2lv
bnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3ICho
YWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgotICAgIExheW91dFJl
Y3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKLSAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhm
cm9tLngoKSk7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8odG8ueCgpKTsKLSAgICBp
bmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgLy8gVHJpbW1pbmcgbWF5IHJl
bW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIGV4dGVuZGVyIGdseXBo
LCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KLSAgICBmbG9hdCBvZmZzZXRUb0ds
eXBoTGVmdCA9IC0yOwotICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQo
ZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4oZnJvbS55KCksIHRvLnkoKSkg
KyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50
ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVk
R2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVj
dCA9IHBhaW50R2x5cGgoaW5mbywgbV9zdHJldGNoeURhdGEuZXh0ZW5zaW9uKCksIGdseXBoT3Jp
Z2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9y
aWdpbi54KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC53aWR0aCgpKTsKLQotICAgICAgICAvLyBU
aGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhl
IGdsdWUgZ2x5cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAg
ICAgLy8gd2l0aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgot
ICAgICAgICBpZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWlu
dEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5k
ZXJNYXRoTUxUb2tlbjo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogCi0gICAgaWYgKGluZm8u
Y29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VG
b3JlZ3JvdW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgbV9zdHJldGNo
eURhdGEubW9kZSgpID09IERyYXdOb3JtYWwpCisgICAgaWYgKGluZm8uY29udGV4dCgpLnBhaW50
aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0
eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRj
aGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CiAgICAgaW5mby5jb250ZXh0KCkuc2V0RmlsbENv
bG9yKHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKIAot
ICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd1NpemVWYXJpYW50KSB7Ci0gICAg
ICAgIEFTU0VSVChtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZ2x5cGgpOworICAgIGlmIChtX21h
dGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsK
KyAgICAgICAgQVNTRVJUKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5pc1ZhbGlkKCkpOwogICAg
ICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5hZGQobV9zdHJldGNoeURh
dGEudmFyaWFudCgpLmdseXBoLCBtX3N0cmV0Y2h5RGF0YS52YXJpYW50KCkuZm9udCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgobV9zdHJldGNoeURhdGEudmFyaWFudCgpKSk7CisgICAgICAgIGJ1ZmZl
ci5hZGQobV9tYXRoT3BlcmF0b3IubV92YXJpYW50LmdseXBoLCBtX21hdGhPcGVyYXRvci5tX3Zh
cmlhbnQuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50
KSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50
KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5k
cyA9IGJvdW5kc0ZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZhcmlhbnQoKSk7CisgICAgICAgIEZs
b2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFy
aWFudCk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVm
dC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBp
bmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fc3RyZXRj
aHlEYXRhLnZhcmlhbnQoKS5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAg
ICAgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpt
X21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdp
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsKQotICAg
ICAgICBwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7Ci0gICAg
ZWxzZQotICAgICAgICBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGluZm8sIHBhaW50T2Zm
c2V0KTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBo
QXNzZW1ibHkoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Ci17Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaHlEYXRh
Lm1vZGUoKSA9PSBEcmF3R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaHlEYXRh
LnRvcCgpLmdseXBoKTsKLSAgICBBU1NFUlQobV9zdHJldGNoeURhdGEuYm90dG9tKCkuZ2x5cGgp
OwotCi0gICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRn
ZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdl
cyBvZiBvdXIgcGFpbnQgYm94LgorICAgIG1fbWF0aE9wZXJhdG9yLm1fYXNjZW50ID0gbV9zdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZTsKKyAgICBtX21hdGhPcGVyYXRvci5tX2Rlc2NlbnQgPSBt
X3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CisgICAgbV9tYXRoT3BlcmF0b3IubV93aWR0aCA9
IGxvZ2ljYWxXaWR0aCgpOwogICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50
T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICBvcGVyYXRvclRvcExlZnQubW92ZShzdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVhZGluZ1NwYWNlIDogbV90cmFpbGluZ1NwYWNl
LCAwKTsKLSAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRvcExl
ZnQpOwotICAgIEZsb2F0UmVjdCB0b3BHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fc3Ry
ZXRjaHlEYXRhLnRvcCgpKTsKLSAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9yaWdpbihvcGVyYXRv
clRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhCb3VuZHMueSgpKTsK
LSAgICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX3N0
cmV0Y2h5RGF0YS50b3AoKSwgdG9wR2x5cGhPcmlnaW4sIFRyaW1Cb3R0b20pOwotCi0gICAgRmxv
YXRSZWN0IGJvdHRvbUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9zdHJldGNoeURhdGEu
Ym90dG9tKCkpOwotICAgIExheW91dFBvaW50IGJvdHRvbUdseXBoT3JpZ2luKG9wZXJhdG9yVG9w
TGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBvZmZzZXRIZWlnaHQoKSAtIChib3R0b21H
bHlwaEJvdW5kcy5oZWlnaHQoKSArIGJvdHRvbUdseXBoQm91bmRzLnkoKSkpOwotICAgIExheW91
dFJlY3QgYm90dG9tR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fc3RyZXRjaHlE
YXRhLmJvdHRvbSgpLCBib3R0b21HbHlwaE9yaWdpbiwgVHJpbVRvcCk7Ci0KLSAgICBpZiAobV9z
dHJldGNoeURhdGEubWlkZGxlKCkuZ2x5cGgpIHsKLSAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlw
aCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLiBU
aGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50IGhlaWdodCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlw
aC4KLSAgICAgICAgRmxvYXRSZWN0IG1pZGRsZUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9zdHJldGNoeURhdGEubWlkZGxlKCkpOwotICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlw
aE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BHbHlwaE9yaWdpbi55KCkpOwotICAgICAg
ICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgKGJvdHRvbUdseXBoUGFp
bnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1heFkoKSkgLyAyLjApKTsKLSAgICAgICAg
bWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KDAsIG1pZGRsZUdseXBoQm91bmRz
LmhlaWdodCgpIC8gMi4wKSk7Ci0KLSAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50
UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9zdHJldGNoeURhdGEubWlkZGxlKCksIG1pZGRsZUds
eXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4
dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIG1p
ZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBmaWxsV2l0aFZl
cnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1heFlD
b3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZvLCB0b3BHbHlw
aFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWlu
WUNvcm5lcigpKTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRIb3Jpem9u
dGFsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCkKLXsKLSAgICBBU1NFUlQoIW1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3Ry
ZXRjaHlEYXRhLm1vZGUoKSA9PSBEcmF3R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fc3Ry
ZXRjaHlEYXRhLmxlZnQoKS5nbHlwaCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaHlEYXRhLnJpZ2h0
KCkuZ2x5cGgpOwotCi0gICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhh
dCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRo
IHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgotICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9w
TGVmdCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKLSAgICBvcGVyYXRvclRvcExlZnQubW92
ZShtX2xlYWRpbmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9p
bnQob3BlcmF0b3JUb3BMZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhPcmlnaW4ob3Bl
cmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fc3RyZXRjaEhlaWdodEFi
b3ZlQmFzZWxpbmUpOwotICAgIExheW91dFJlY3QgbGVmdEdseXBoUGFpbnRSZWN0ID0gcGFpbnRH
bHlwaChpbmZvLCBtX3N0cmV0Y2h5RGF0YS5sZWZ0KCksIGxlZnRHbHlwaE9yaWdpbiwgVHJpbVJp
Z2h0KTsKLQotICAgIEZsb2F0UmVjdCByaWdodEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9zdHJldGNoeURhdGEucmlnaHQoKSk7Ci0gICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlwaE9yaWdp
bihvcGVyYXRvclRvcExlZnQueCgpICsgb2Zmc2V0V2lkdGgoKSAtIHJpZ2h0R2x5cGhCb3VuZHMu
d2lkdGgoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxp
bmUpOwotICAgIExheW91dFJlY3QgcmlnaHRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5m
bywgbV9zdHJldGNoeURhdGEucmlnaHQoKSwgcmlnaHRHbHlwaE9yaWdpbiwgVHJpbUxlZnQpOwot
Ci0gICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1pZGRsZSgpLmdseXBoKSB7Ci0gICAgICAgIC8vIENl
bnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFp
bnQgZXh0ZW50cy4KLSAgICAgICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0
b3JUb3BMZWZ0LngoKSwgbGVmdEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBo
T3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgocmlnaHRHbHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0
R2x5cGhQYWludFJlY3QubWF4WCgpKSAvIDIuMCwgMCkpOwotICAgICAgICBMYXlvdXRSZWN0IG1p
ZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX3N0cmV0Y2h5RGF0YS5taWRk
bGUoKSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOwotICAgICAgICBmaWxs
V2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4
WE1pbllDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0g
ICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGluZm8sIG1pZGRsZUdseXBo
UGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllD
b3JuZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lv
bkdseXBoKGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCByaWdodEds
eXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgIGlmIChtX2lzVmVydGljYWwpCisg
ICAgICAgIG1fbWF0aE9wZXJhdG9yLnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KHN0eWxlKCks
IGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7CisgICAgZWxzZQorICAgICAgICBtX21hdGhPcGVyYXRv
ci5wYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KHN0eWxlKCksIGluZm8sIG9wZXJhdG9yVG9w
TGVmdCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4oUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJ
bmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCiB7CiAgICAgLy8gV2Ug
c2tpcCBwYWludGluZyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyB0b28gdG8gYXZvaWQgc29tZSAi
bWlzc2luZyBjaGFyYWN0ZXIiIGdseXBoIHRvIGFwcGVhciBpZiBhcHByb3ByaWF0ZSBtYXRoIGZv
bnRzIGFyZSBub3QgYXZhaWxhYmxlLgotICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgIT0g
RHJhd05vcm1hbCB8fCBpc0ludmlzaWJsZU9wZXJhdG9yKCkpCisgICAgaWYgKG1fbWF0aE9wZXJh
dG9yLmlzU3RyZXRjaGVkKCkgfHwgaXNJbnZpc2libGVPcGVyYXRvcigpKQogICAgICAgICByZXR1
cm47CiAgICAgUmVuZGVyTWF0aE1MVG9rZW46OnBhaW50Q2hpbGRyZW4ocGFpbnRJbmZvLCBwYWlu
dE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hpbGQsIHVzZVByaW50UmVjdCk7CiB9CkBAIC05MzYsMTkg
KzQ5MiwxOSBAQCBMYXlvdXRVbml0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNl
RXJyb3IoKQogICAgIC8vIEhlbmNlIHdlIGRldGVybWluZSB0aGUgZXJyb3IgaW4gdGhlIGxvZ2lj
YWwgd2lkdGggd2l0aCByZXNwZWN0IHRvIHRoZSBhY3R1YWwgd2lkdGggb2YgdGhlIGdseXBoKHMp
IHVzZWQgdG8gcGFpbnQgdGhlIG9wZXJhdG9yLgogICAgIExheW91dFVuaXQgd2lkdGggPSBsb2dp
Y2FsV2lkdGgoKTsKIAotICAgIGlmIChtX3N0cmV0Y2h5RGF0YS5tb2RlKCkgPT0gRHJhd05vcm1h
bCkgeworICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkgewogICAgICAgICBH
bHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAg
ICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSk7CiAgICAgfQog
Ci0gICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1vZGUoKSA9PSBEcmF3U2l6ZVZhcmlhbnQpCi0gICAg
ICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fc3RyZXRjaHlEYXRhLnZh
cmlhbnQoKSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9w
ZXJhdG9yOjpTaXplVmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRo
Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFzc2VtYmx5
V2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3N0cmV0Y2h5RGF0YS50b3AoKSk7Ci0gICAg
YXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckds
eXBoKG1fc3RyZXRjaHlEYXRhLmJvdHRvbSgpKSk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6
bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fc3RyZXRjaHlEYXRhLmV4
dGVuc2lvbigpKSk7Ci0gICAgaWYgKG1fc3RyZXRjaHlEYXRhLm1pZGRsZSgpLmdseXBoKQotICAg
ICAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgobV9zdHJldGNoeURhdGEubWlkZGxlKCkpKTsKKyAgICBmbG9hdCBhc3NlbWJseVdp
ZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS50b3Ap
OworICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbSkpOworICAgIGFzc2Vt
Ymx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaCht
X21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmV4dGVuc2lvbikpOworICAgIGlmIChtX21hdGhPcGVy
YXRvci5tX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCisgICAgICAgIGFzc2VtYmx5V2lkdGgg
PSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVy
YXRvci5tX2Fzc2VtYmx5Lm1pZGRsZSkpOwogICAgIHJldHVybiB3aWR0aCAtIGFzc2VtYmx5V2lk
dGg7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRleCBhYWVlNDZhLi4zYmI2MGM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5o
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAiTWF0
aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5oIgorI2lu
Y2x1ZGUgIk1hdGhPcGVyYXRvci5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKICNp
bmNsdWRlICJSZW5kZXJNYXRoTUxUb2tlbi5oIgogCkBAIC01MSw3ICs1Miw3IEBAIHB1YmxpYzoK
ICAgICAvLyBGSVhNRTogVGhlIGRpc3BsYXlzdHlsZSBwcm9wZXJ0eSBpcyBub3QgaW1wbGVtZW50
ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgogICAg
IGJvb2wgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSBjb25zdCB7IHJldHVybiAhaGFz
T3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHkpICYmIGhhc09w
ZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkxhcmdlT3ApOyB9CiAgICAgYm9v
bCBpc1ZlcnRpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsOyB9Ci0gICAgTGF5b3V0
VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBpdGFsaWNDb3Jy
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRoT3BlcmF0b3IuaXRhbGljQ29ycmVjdGlvbigp
OyB9CiAKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZVN0eWxlKCkgZmluYWw7
CkBAIC03Myw2MSArNzQsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgVUNoYXIgdGV4dENvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBtX3RleHRDb250ZW50OyB9CiAKIHByaXZhdGU6Ci0gICAgZW51bSBEcmF3
TW9kZSB7Ci0gICAgICAgIERyYXdOb3JtYWwsIERyYXdTaXplVmFyaWFudCwgRHJhd0dseXBoQXNz
ZW1ibHkKLSAgICB9OwotCi0gICAgY2xhc3MgU3RyZXRjaHlEYXRhIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIERyYXdNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KLSAgICAgICAg
R2x5cGhEYXRhIHZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFbMF07IH0KLSAgICAgICAg
R2x5cGhEYXRhIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVswXTsgfQotICAgICAgICBHbHlw
aERhdGEgZXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhWzFdOyB9Ci0gICAgICAgIEds
eXBoRGF0YSBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2RhdGFbMl07IH0KLSAgICAgICAgR2x5
cGhEYXRhIG1pZGRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVszXTsgfQotICAgICAgICBHbHlw
aERhdGEgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVsyXTsgfQotICAgICAgICBHbHlwaERh
dGEgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFbMF07IH0KLQotICAgICAgICB2b2lkIHNl
dE5vcm1hbE1vZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX21vZGUgPSBEcmF3Tm9ybWFs
OwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0U2l6ZVZhcmlhbnRNb2RlKGNvbnN0IEdseXBo
RGF0YSYgdmFyaWFudCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9tb2RlID0gRHJhd1NpemVW
YXJpYW50OwotICAgICAgICAgICAgbV9kYXRhWzBdID0gdmFyaWFudDsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIHNldEdseXBoQXNzZW1ibHlNb2RlKGNvbnN0IEdseXBoRGF0YSYgdG9wLCBjb25z
dCBHbHlwaERhdGEmIGV4dGVuc2lvbiwgY29uc3QgR2x5cGhEYXRhJiBib3R0b20sIGNvbnN0IEds
eXBoRGF0YSYgbWlkZGxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX21vZGUgPSBEcmF3R2x5
cGhBc3NlbWJseTsKLSAgICAgICAgICAgIG1fZGF0YVswXSA9IHRvcDsKLSAgICAgICAgICAgIG1f
ZGF0YVsxXSA9IGV4dGVuc2lvbjsKLSAgICAgICAgICAgIG1fZGF0YVsyXSA9IGJvdHRvbTsKLSAg
ICAgICAgICAgIG1fZGF0YVszXSA9IG1pZGRsZTsKLSAgICAgICAgfQotICAgICAgICBTdHJldGNo
eURhdGEoKQotICAgICAgICAgICAgOiBtX21vZGUoRHJhd05vcm1hbCkgeyB9Ci0gICAgICAgIFN0
cmV0Y2h5RGF0YShjb25zdCBTdHJldGNoeURhdGEmIGRhdGEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoZGF0YS5tX21vZGUpIHsKLSAgICAgICAgICAgIGNhc2UgRHJhd05vcm1hbDoK
LSAgICAgICAgICAgICAgICBzZXROb3JtYWxNb2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIERyYXdTaXplVmFyaWFudDoKLSAgICAgICAgICAgICAgICBzZXRT
aXplVmFyaWFudE1vZGUoZGF0YS52YXJpYW50KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBEcmF3R2x5cGhBc3NlbWJseToKLSAgICAgICAgICAgICAgICBzZXRH
bHlwaEFzc2VtYmx5TW9kZShkYXRhLnRvcCgpLCBkYXRhLmV4dGVuc2lvbigpLCBkYXRhLmJvdHRv
bSgpLCBkYXRhLm1pZGRsZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd01vZGUgbV9tb2RlOwot
ICAgICAgICAvLyBGSVhNRTogRm9yIE9wZW5UeXBlIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlIGFs
bCB0aGUgZ2x5cGhzIGFyZSBmcm9tIHRoZSBzYW1lIGZvbnQsIHNvIHdlIHdvdWxkIG9ubHkgbmVl
ZCB0byBzdG9yZSB0aGUgZ2x5cGggaW5kaWNlcyBoZXJlLgotICAgICAgICBHbHlwaERhdGEgbV9k
YXRhWzRdOwotICAgIH07Ci0KICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxPcGVyYXRvciAoYW5v
bnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3IiOyB9CiAgICAgdm9pZCBwYWludENoaWxk
cmVuKFBhaW50SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8mIGZv
ckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkgZmluYWw7CiAgICAgYm9vbCBpc1JlbmRlck1hdGhN
TE9wZXJhdG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTQxLDI0ICs4Nyw2
IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0Owog
Ci0gICAgYm9vbCBnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soVmVjdG9yPE9wZW5UeXBlTWF0aERh
dGE6OkFzc2VtYmx5UGFydD4sIFN0cmV0Y2h5RGF0YSYpIGNvbnN0OwotICAgIFN0cmV0Y2h5RGF0
YSBnZXREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKFVDaGFyKSBjb25zdDsKLSAgICBTdHJldGNo
eURhdGEgZmluZFN0cmV0Y2h5RGF0YShVQ2hhciwgZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoKTsK
LQotICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKLSAgICAgICAgVHJpbVRvcCwKLSAgICAg
ICAgVHJpbUJvdHRvbSwKLSAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKLSAgICAgICAgVHJpbUxl
ZnQsCi0gICAgICAgIFRyaW1SaWdodCwKLSAgICAgICAgVHJpbUxlZnRBbmRSaWdodAotICAgIH07
Ci0KLSAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhEYXRh
JiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKLSAgICB2
b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIGZpbGxXaXRo
SG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBm
cm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOwotICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBo
QXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50
SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsK
ICAgICB2b2lkIHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpGbGFnLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRPcGVyYXRv
ckZsYWdGcm9tQXR0cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKICAgICB2b2lkIHNldE9wZXJhdG9y
UHJvcGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OkVudHJ5Kik7CkBAIC0xNzUsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1f
dHJhaWxpbmdTcGFjZTsKICAgICBMYXlvdXRVbml0IG1fbWluU2l6ZTsKICAgICBMYXlvdXRVbml0
IG1fbWF4U2l6ZTsKLSAgICBTdHJldGNoeURhdGEgbV9zdHJldGNoeURhdGE7CisgICAgTWF0aE9w
ZXJhdG9yIG1fbWF0aE9wZXJhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277231</attachid>
            <date>2016-04-25 01:03:44 -0700</date>
            <delta_ts>2016-04-25 09:14:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-MathOperator-move-selection-and-painting.patch</filename>
            <type>text/plain</type>
            <size>76745</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSAxODdjMjE4NWQ5NjBlMzEyNmNjYTliNDU4Y2ZmYjZhNjJkOWE0YmYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogRnJpLCAyMiBBcHIgMjAxNiAyMjowMTowNCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy80XSBN
YXRoT3BlcmF0b3IgKG1vdmUgc2VsZWN0aW9uIGFuZCBwYWludGluZykKCi0tLQogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjAgKysrCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAgOCAr
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAgICB8IDUx
NSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9N
YXRoT3BlcmF0b3IuaCAgICAgfCAxMTAgKysrKysKIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcCAgICAgIHwgNTM1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4u
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCAgICAgICAgfCAgNTEgKy0K
IDcgZmlsZXMgY2hhbmdlZCwgNzQ1IGluc2VydGlvbnMoKyksIDUzNSBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjNTgyOWY2Li5hNzU4
MWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAKIAogICAg
IHJlbmRlcmluZy9tYXRobWwvTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmNwcAorICAgIHJlbmRl
cmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQu
Y3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA3MTFhMjdmLi4yMGE3NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjUgQEAKIDIw
MTYtMDQtMjIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCisgICAgICAgIE1v
dmUgc2VsZWN0aW9uIGFuZCBkcmF3aW5nIG9mIHN0cmV0Y2h5IG9wZXJhdG9ycyBpbnRvIGEgc2Vw
YXJhdGUgTWF0aE9wZXJhdG9yIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTY5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2VkLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCB0aGUgTWF0aE9wZXJhdG9yIGZpbGVzLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmJvdW5kc0ZvckdseXBoKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRv
ci4KKyAgICAgICAgKFdlYkNvcmU6OmhlaWdodEZvckdseXBoKTogTW92ZWQgZnJvbSBSZW5kZXJN
YXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VXaWR0aEZvckdseXBoKTog
TW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhP
cGVyYXRvcjo6TWF0aE9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6
c2V0T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpnZXRCYXNlR2x5
cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkp
OiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IE1vdmVkIGZyb20gUmVu
ZGVyTWF0aE1MT3BlcmF0b3Igd2l0aCBhZGRpdGlvbmFsIHN0eWxlIHBhcmFtZXRlci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5z
aW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdp
dGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjppdGFsaWNDb3JyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6aXNTdHJldGNoZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjp1bnN0cmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBNb3ZlZCBmcm9tIFJl
bmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzdHJl
dGNoU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVy
cy4KKyAgICAgICAgRm9yIG5vdyB3ZSBjYWxsIHNldE9wZXJhdG9yIHRvIHRyYW5zbWl0IGluZm9y
bWF0aW9uIHRvIG1fbWF0aE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJl
cnMuCisgICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVtYmVycyB0
byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogVXBkYXRlZCB0byB1c2UgTWF0aE9w
ZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludCk6IERpdHRvLgorICAgICAgICBGb3Igbm93IHdlIHNldCBzb21l
IG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBpbmZvcm1hdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKTog
VXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0R2x5
cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZFN0
cmV0Y2h5RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFpbnRHbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxF
eHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1i
bHkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjppdGFsaWND
b3JyZWN0aW9uKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGE6OkdseXBo
QXNzZW1ibHlEYXRhKTogRGVsZXRlZC4KKworMjAxNi0wNC0yMiAgRnJlZGVyaWMgV2FuZyAgPGZ3
YW5nQGlnYWxpYS5jb20+CisKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6IHJlZmFjdG9y
IG1hbmFnZW1lbnQgb2Ygc3RyZXRjaHkgZGF0YSBhbmQgaXRhbGljIGNvcnJlY3Rpb24KICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjkxMwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OGFjNTQzMi4uNGMwNzQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY1OSw2ICsxNjU5LDggQEAKIAkJNDM5MDQ2RTgxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92
ZXIuaCAqLzsgfTsKKwkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZE
NTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLzsgfTsKKwkJNDM5MDQ2RUEx
MkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhP
cGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0
aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLzsg
fTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZEODEyREEy
NUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsgfTsKIAkJNDM5RDMzNDMxM0E2
OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0Fu
aW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTE4OCw2ICs5MTkwLDggQEAKIAkJNDM5MDQ2RDQxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ2MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE9wZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFD
IC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRo
T3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDcxMkRBMjVF
ODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2Vu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAv
KiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkxMCw2ICsx
NjkxNCw4IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVu
ZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5oICovLAorCQkJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwICovLAorCQkJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3Bl
cmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTI3NjA5LDYgKzI3NjE1LDcgQEAKIAkJCQk0MzkwNDZFNjEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5
MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZFQTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9w
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2NDZFODIwMEE0NTJF
MSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFG
QTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzEyNzEsNiArMzEyNzgsNyBAQAogCQkJCTQzOTA0NkU1MTJEQTI1RTgwMEFGODBB
MiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzOTA0
NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFNDlCMzA5MTY1RjJGRTEw
MDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9scy5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDY3OWE4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2luY2x1ZGUgIk1hdGhP
cGVyYXRvci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUlu
aGVyaXRlZERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEZs
b2F0UmVjdCBib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpCit7CisgICAgcmV0
dXJuIGRhdGEuZm9udCAmJiBkYXRhLmdseXBoID8gZGF0YS5mb250LT5ib3VuZHNGb3JHbHlwaChk
YXRhLmdseXBoKSA6IEZsb2F0UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGhlaWdo
dEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYm91bmRzRm9y
R2x5cGgoZGF0YSkuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYWR2YW5jZVdp
ZHRoRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBkYXRhLmZv
bnQgJiYgZGF0YS5nbHlwaCA/IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKSA6
IDA7Cit9CisKKy8vIEZJWE1FOiBUaGlzIGhhcmRjb2RlZCBkYXRhIGNhbiBiZSByZW1vdmVkIHdo
ZW4gT3BlblR5cGUgTUFUSCBmb250IGFyZSB3aWRlbHkgYXZhaWxhYmxlIChodHRwOi8vd2tidWcv
MTU2ODM3KS4KK3N0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNoYXIgY2hhcmFjdGVy
OworICAgIFVDaGFyIHRvcENoYXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKKyAgICBVQ2hh
ciBib3R0b21DaGFyOworICAgIFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8gVGhlIGZpcnN0IGxl
ZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0
aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNvbnN0IHNob3J0IGxl
ZnRSaWdodFBhaXJzQ291bnQgPSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0
cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAw
eDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAweDI5ICAsIDB4MjM5
ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcworICAgIHsg
MHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUg
YnJhY2tldAorICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwg
Ly8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4
MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsgMHg3ZCAgLCAweDIz
YWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAorICAg
IHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWls
aW5nCisgICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyBy
aWdodCBjZWlsaW5nCisgICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAg
ICB9LCAvLyBsZWZ0IGZsb29yCisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYs
IDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAg
MHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCisgICAgeyAweDIwMTYsIDB4MjAxNiwg
MHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQorICAgIHsg
MHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8K
KyAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdy
YWwgc2lnbgorfTsKKworTWF0aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQorICAgIDogbV9iYXNl
Q2hhcmFjdGVyKDApCisgICAgLCBtX2lzVmVydGljYWwoZmFsc2UpCisgICAgLCBtX3N0cmV0Y2hU
eXBlKFVuc3RyZXRjaGVkKQorICAgICwgbV93aWR0aCgwKQorICAgICwgbV9hc2NlbnQoMCkKKyAg
ICAsIG1fZGVzY2VudCgwKQorICAgICwgbV9pdGFsaWNDb3JyZWN0aW9uKDApCit7Cit9CisKK3Zv
aWQgTWF0aE9wZXJhdG9yOjpzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBib29sIGlz
VmVydGljYWwpCit7CisgICAgbV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKKyAgICBt
X2lzVmVydGljYWwgPSBpc1ZlcnRpY2FsOworfQorCitib29sIE1hdGhPcGVyYXRvcjo6Z2V0QmFz
ZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgpIGNv
bnN0Cit7CisgICAgYmFzZUdseXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIobV9iYXNlQ2hhcmFjdGVyLCAhc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
KTsKKyAgICByZXR1cm4gYmFzZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAm
c3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworfQorCit2b2lkIE1hdGhPcGVyYXRv
cjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFudCkKK3sKKyAgICBB
U1NFUlQoc2l6ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZvbnQtPm1hdGhEYXRh
KCkpOworICAgIG1fc3RyZXRjaFR5cGUgPSBTaXplVmFyaWFudDsKKyAgICBtX3ZhcmlhbnQgPSBz
aXplVmFyaWFudDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkoY29u
c3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQoreworICAg
IG1fc3RyZXRjaFR5cGUgPSBHbHlwaEFzc2VtYmx5OworICAgIG1fYXNzZW1ibHkgPSBhc3NlbWJs
eURhdGE7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNh
bCk7CisKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0
eWxlLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CisgICAgVmVjdG9yPE9w
ZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKKworICAgIC8vIFRo
ZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVzIHRvbyBzbWFs
bCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGltZXMgdGhlIHNp
emUgb2YgdGhlIGJhc2UgZ2x5cGguCisgICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0
ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlw
aCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkt
PmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3Bs
YXlPcGVyYXRvck1pbkhlaWdodCkpOworCisgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkt
PmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNz
ZW1ibHlQYXJ0cyk7CisKKyAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0
aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQg
YW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgorICAgIGZvciAo
YXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAgR2x5cGhEYXRhIGds
eXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAgICAgICBzZXRTaXplVmFy
aWFudChnbHlwaERhdGEpOworICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSBnbHlwaERhdGEu
Zm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhEYXRhLmZvbnQsIGds
eXBoRGF0YS5nbHlwaCk7CisgICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpID49
IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworYm9vbCBNYXRoT3BlcmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBh
cnQ+JiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQorewor
ICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRoIHRhYmxlIGlzIGEgYml0
IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkgdGhlIE1hdGhPcGVy
YXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25hYmxlIHdheS4KKyAg
ICAvLyBGSVhNRTogTWF0aE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRoZSBtb3N0IGdlbmVyYWwg
Zm9ybWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI3KS4K
KyAgICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29tcG9uZW50cyBmdW5jdGlv
biBpbiBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9tYXN0ZXIvZm9udHMvT3Bl
blR5cGVNYXRoL2ZvbnRVdGlsLnB5CisKKyAgICAvLyBXZSBjb3VudCB0aGUgbnVtYmVyIG9mIG5v
biBleHRlbmRlciBwaWVjZXMuCisgICAgaW50IG5vbkV4dGVuZGVyQ291bnQgPSAwOworICAgIGZv
ciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYgKCFwYXJ0LmlzRXh0
ZW5kZXIpCisgICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7CisgICAgfQorICAgIGlmIChu
b25FeHRlbmRlckNvdW50ID4gMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5v
dCBzdXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCisKKyAgICAvLyBXZSBub3cg
YnJvd3NlIHRoZSBsaXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGhvcml6b250
YWwgb3BlcmF0b3JzIGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZlcnRpY2FsIG9wZXJhdG9y
cy4KKyAgICBlbnVtIFBhcnRUeXBlIHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIEV4dGVuZGVy
QmV0d2VlblN0YXJ0QW5kTWlkZGxlLAorICAgICAgICBNaWRkbGUsCisgICAgICAgIEV4dGVuZGVy
QmV0d2Vlbk1pZGRsZUFuZEVuZCwKKyAgICAgICAgRW5kLAorICAgICAgICBOb25lCisgICAgfTsK
KyAgICBQYXJ0VHlwZSBleHBlY3RlZFBhcnRUeXBlID0gU3RhcnQ7CisgICAgYXNzZW1ibHlEYXRh
LmV4dGVuc2lvbi5nbHlwaCA9IDA7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IDA7
CisgICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAobm9u
RXh0ZW5kZXJDb3VudCA8IDMpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBhdCBt
b3N0IHR3byBub24tZXh0ZW5kZXJzIHRoZW4gd2Ugc2tpcCB0aGUgbWlkZGxlIGdseXBoLgorICAg
ICAgICAgICAgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRN
aWRkbGUpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vl
bk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0g
TWlkZGxlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFbmQ7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHBhcnQuaXNFeHRlbmRlcikgeworICAgICAgICAgICAgaWYgKCFhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQorICAgICAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZ2x5cGggPSBwYXJ0LmdseXBoOyAvLyBXZSBjb3B5IHRoZSBleHRlbmRlciBwYXJ0
LgorICAgICAgICAgICAgZWxzZSBpZiAoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCAhPSBw
YXJ0LmdseXBoKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qg
c3VwcG9ydGVkOiB0aGUgYXNzZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCisKKyAgICAg
ICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgeworICAgICAgICAgICAgY2FzZSBTdGFy
dDoKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGxlZnQvYm90dG9tIHBhcnQuCisg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5k
TWlkZGxlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBNaWRk
bGU6CisgICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBtaWRkbGUgcGFydC4KKyAgICAg
ICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5k
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBFbmQ6CisgICAg
ICAgICAgICBjYXNlIE5vbmU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9y
dGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBleHRlbmRlci4KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxl
OgorICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6CisgICAgICAg
ICAgICAgICAgLy8gV2UgaWdub3JlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGV4dGVuZGVycy4KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgeworICAgICAgICBjYXNlIFN0YXJ0OgorICAg
ICAgICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KKyAgICAgICAgICAgIGFz
c2VtYmx5RGF0YS5ib3R0b20uZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAgZXhwZWN0
ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU6Cisg
ICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgbWlkZGxlIHBh
cnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gcGFydC5nbHlwaDsK
KyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRF
bmQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5N
aWRkbGVBbmRFbmQ6CisgICAgICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgLy8gV2UgY29weSB0
aGUgcmlnaHQvdG9wIHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEudG9wLmdseXBoID0g
cGFydC5nbHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBOb25lOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQu
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
VGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBl
eHRlbnNpb24gZ2x5cGguCisKKyAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRvcC9ib3R0b20gZ2x5
cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lvbiBnbHlwaC4KKyAgICBpZiAoIWFzc2VtYmx5RGF0YS50
b3AuZ2x5cGgpCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3AuZ2x5cGggPSBhc3NlbWJseURhdGEu
ZXh0ZW5zaW9uLmdseXBoOworICAgIGlmICghYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCkKKyAg
ICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24u
Z2x5cGg7CisKKyAgICBhc3NlbWJseURhdGEudG9wLmZvbnQgPSAmc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpOworICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2Vt
Ymx5RGF0YS50b3AuZm9udDsKKyAgICBhc3NlbWJseURhdGEuYm90dG9tLmZvbnQgPSBhc3NlbWJs
eURhdGEudG9wLmZvbnQ7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlE
YXRhLm1pZGRsZS5nbHlwaCA/IGFzc2VtYmx5RGF0YS50b3AuZm9udCA6IG51bGxwdHI7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91
dFVuaXQgdGFyZ2V0U2l6ZSkKK3sKKyAgICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1f
aXNWZXJ0aWNhbCk7CisKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFz
ZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1h
eGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBi
YXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KKyAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lz
VmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5
cGgoYmFzZUdseXBoKTsKKyAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5
RGF0YSBhc3NlbWJseURhdGE7CisgICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7
CisgICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOworICAgICAgICBWZWN0b3I8T3Bl
blR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOworICAgICAgICBiYXNl
R2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwg
bV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICAvLyBX
ZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCisgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlh
bnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6
ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKKyAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhX
aWR0aCkKKyAgICAgICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4
aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsK
KyAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5
cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAgICAg
ICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgdmVyaWZ5IGlm
IHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgorICAgICAgICBpZiAoIWdldEdseXBoQXNzZW1ibHlG
YWxsQmFjayhzdHlsZSwgYXNzZW1ibHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEg
TUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25z
LgorICAgICAgICBjb25zdCBTdHJldGNoeUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBu
dWxscHRyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5H
VEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNo
YXJhY3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAg
ICAgICAgICBzdHJldGNoeUNoYXJhY3RlciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOwor
ICAgICAgICAgICAgICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGlu
ZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9y
ZWQgZm9ybSBieSBhZGRpbmcgLTEgb3IgKzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5k
ZXguCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJh
Y3RlciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNo
IGl0LgorICAgICAgICBpZiAoIXN0cmV0Y2h5Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJz
IGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEuCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBz
dHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rl
ci0+dG9wQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uID0gc3R5
bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXIt
PmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbSA9IHN0
eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT5ib3R0b21DaGFyLCBmYWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJl
dGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciA/IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyLCBmYWxzZSkgOiBHbHlw
aERhdGEoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBtYXhpbXVt
IHdpZHRoLCB2ZXJpZnkgZWFjaCBjb21wb25lbnQuCisgICAgaWYgKG1heGltdW1HbHlwaFdpZHRo
KSB7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhX
aWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkpOworICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKKyAgICAgICAgKm1heGltdW1H
bHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JH
bHlwaChhc3NlbWJseURhdGEubWlkZGxlKSk7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9
IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1i
bHlEYXRhLmJvdHRvbSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZW5z
dXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBz
LgorICAgIGZsb2F0IG1pblNpemUgPSBtX2lzVmVydGljYWwgPworICAgICAgICBoZWlnaHRGb3JH
bHlwaChhc3NlbWJseURhdGEudG9wKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRk
bGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbSkKKyAgICAgICAgOiBhZHZh
bmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubGVmdCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlw
aChhc3NlbWJseURhdGEubWlkZGxlKSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0
YS5yaWdodCk7CisgICAgaWYgKG1pblNpemUgPiB0YXJnZXRTaXplKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRHbHlwaEFzc2VtYmx5KGFzc2VtYmx5RGF0YSk7Cit9CisKK0xheW91dFJlY3Qg
TWF0aE9wZXJhdG9yOjpwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmln
aW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmltKQoreworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5k
cyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOworCisgICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVj
dChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgo
KSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdp
bi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOworCisgICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlw
aHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRn
ZXMgdG8gcGl4ZWwgYm91bmRhcmllcworICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRo
ZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVs
cyB0aGF0IGhhdmUgbGVzcworICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBw
aXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMu
CisgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgc3dpdGNoICh0cmlt
KSB7CisgICAgY2FzZSBUcmltVG9wOgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNo
aWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRyaW1Cb3R0b206CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlw
aFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0
TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRyaW1Ub3BBbmRCb3R0b206CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VU
byhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0
LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOworICAg
ICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOworICAgICAg
ICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1MZWZ0OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5z
aGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOworICAgICAgICBjbGlw
Qm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRyaW1SaWdodDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRn
ZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3Vu
ZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdodDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hp
ZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQ
YWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0g
MSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7
CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgo
KSk7CisgICAgfQorCisgICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lk
cyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCisgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKKyAgICBpbmZvLmNvbnRl
eHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAgR2x5cGhCdWZmZXIgYnVmZmVyOworICAgIGJ1
ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRh
KSk7CisgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZS5mb250Q2FzY2FkZSgpLCAq
ZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7CisKKyAgICByZXR1cm4gZ2x5cGhQYWlu
dFJlY3Q7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9u
R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCit7CisgICAgQVNTRVJUKG1f
aXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7
CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CisgICAgQVNTRVJU
KGZyb20ueSgpIDw9IHRvLnkoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3Ig
dGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBp
ZiAoZnJvbS55KCkgPT0gdG8ueSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOworCisgICAgRmxvYXRS
ZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5leHRlbnNpb24pOwor
CisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBk
cmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAgICAvLyByZWdpb25zIG9m
IHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkg
cGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0IGNs
aXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55
KCkpOworICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnkoKSk7CisgICAgaW5mby5j
b250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUg
dXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3
ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9
IGdseXBoQm91bmRzLnkoKSArIDI7CisgICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlv
dXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBoVG9wKTsKKyAgICBGbG9h
dFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOworCisgICAgd2hp
bGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkgeworICAgICAgICBsYXN0
UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0
ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAgICAgIGdseXBoT3Jp
Z2luLnNldFkoZ2x5cGhPcmlnaW4ueSgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3QuaGVpZ2h0KCkp
OworCisgICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlz
IHNtYWxsIGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5
IHJlY3RhbmdsZQorICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVz
dCBkcmF3IG5vdGhpbmcuCisgICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpm
aWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBv
aW50JiB0bykKK3sKKyAgICBBU1NFUlQoIW1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3Ry
ZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5z
aW9uLmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7CisKKyAgICAv
LyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5m
by5jb250ZXh0KCkpOworCisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJl
IGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAg
ICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBv
dmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAg
ICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlm
dFhFZGdlVG8oZnJvbS54KCkpOworICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngo
KSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1t
aW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRl
bmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQg
b2Zmc2V0VG9HbHlwaExlZnQgPSAtMjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExh
eW91dFBvaW50KGZyb20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgp
LCB0by55KCkpKTsKKyAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxv
YXRTaXplKCkpOworCisgICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFgoKSA8IHRv
LngoKSkgeworICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUs
IGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdo
dCk7CisgICAgICAgIGdseXBoT3JpZ2luLnNldFgoZ2x5cGhPcmlnaW4ueCgpICsgbGFzdFBhaW50
ZWRHbHlwaFJlY3Qud2lkdGgoKSk7CisKKyAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0
IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVu
IHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcu
IEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWlu
dGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRj
aFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wLmlzVmFs
aWQoKSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tLmlzVmFsaWQoKSk7CisKKyAgICAv
LyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0
aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBw
YWludCBib3guCisgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7
CisgICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsK
KyAgICBGbG9hdFJlY3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5
LnRvcCk7CisgICAgTGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0Lngo
KSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7CisgICAgTGF5b3V0
UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1i
bHkudG9wLCB0b3BHbHlwaE9yaWdpbiwgVHJpbUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90
dG9tR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbSk7CisgICAg
TGF5b3V0UG9pbnQgYm90dG9tR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0
b3JUb3BMZWZ0LnkoKSArIHN0cmV0Y2hTaXplKCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0
KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKKyAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBo
UGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5ib3R0b20sIGJv
dHRvbUdseXBoT3JpZ2luLCBUcmltVG9wKTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0
aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYg
dGhlIHBhaW50IGhlaWdodCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRS
ZWN0IG1pZGRsZUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUp
OworICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQu
eCgpLCB0b3BHbHlwaE9yaWdpbi55KCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3Zl
QnkoTGF5b3V0UG9pbnQoMCwgKGJvdHRvbUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFp
bnRSZWN0Lm1heFkoKSkgLyAyLjApKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5
KExheW91dFBvaW50KDAsIG1pZGRsZUdseXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAg
ICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUs
IGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJv
dHRvbSk7CisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5m
bywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJl
Y3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25H
bHlwaChzdHlsZSwgaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwg
Ym90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQ
YWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllD
b3JuZXIoKSk7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFz
c2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7CisgICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOwor
ICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVCht
X2Fzc2VtYmx5LmxlZnQuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5yaWdodC5p
c1ZhbGlkKCkpOworCisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhh
dCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRo
IHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9w
TGVmdCA9IHBhaW50T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50
KG9wZXJhdG9yVG9wTGVmdCk7CisgICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJh
dG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5
b3V0UmVjdCBsZWZ0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fz
c2VtYmx5LmxlZnQsIGxlZnRHbHlwaE9yaWdpbiwgVHJpbVJpZ2h0KTsKKworICAgIEZsb2F0UmVj
dCByaWdodEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5yaWdodCk7Cisg
ICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpICsgbV93
aWR0aCAtIHJpZ2h0R2x5cGhCb3VuZHMud2lkdGgoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1f
YXNjZW50KTsKKyAgICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBo
KHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LnJpZ2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVm
dCk7CisKKyAgICBMYXlvdXRQb2ludCBiYXNlbGluZVNoaWZ0KDAsIG1fYXNjZW50KTsKKyAgICBp
ZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUg
Z2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50
cy4KKyAgICAgICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0
LngoKSwgbGVmdEdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1v
dmVCeShMYXlvdXRQb2ludCgocmlnaHRHbHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWlu
dFJlY3QubWF4WCgpKSAvIDIuMCwgMCkpOworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBo
UGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1p
ZGRsZUdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKKyAgICAgICAgZmlsbFdpdGhIb3Jp
em9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhY
TWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1p
bllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxF
eHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllD
b3JuZXIoKSArIGJhc2VsaW5lU2hpZnQsIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3Ju
ZXIoKSArIGJhc2VsaW5lU2hpZnQpOworICAgIH0gZWxzZQorICAgICAgICBmaWxsV2l0aEhvcml6
b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhN
aW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0LCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5Z
Q29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjRiNGRlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC0wLDAgKzEsMTEwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1hdGhPcGVyYXRvcl9oCisjZGVmaW5lIE1h
dGhPcGVyYXRvcl9oCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2luY2x1ZGUgIkdseXBoUGFnZS5o
IgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgi
CisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworY2xhc3MgTWF0aE9w
ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBNYXRoT3BlcmF0b3IoKTsKKyAgICB2b2lkIHNldE9wZXJh
dG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIGJvb2wgaXNWZXJ0aWNhbCk7CisKKyAgICBMYXlvdXRV
bml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247
IH0KKworICAgIGJvb2wgaXNTdHJldGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0Y2hUeXBl
ICE9IFVuc3RyZXRjaGVkOyB9CisgICAgdm9pZCB1bnN0cmV0Y2goKSB7IG1fc3RyZXRjaFR5cGUg
PSBVbnN0cmV0Y2hlZDsgfQorCisgICAgLy8gRklYTUU6IEFsbCB0aGUgY29kZSBiZWxvdyBzaG91
bGQgYmUgcHJpdmF0ZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYnkgUmVuZGVyTWF0aE1M
T3BlcmF0b3IgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4KKworICAgIHN0cnVjdCBHbHlw
aEFzc2VtYmx5RGF0YSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSB0
b3A7CisgICAgICAgICAgICBHbHlwaERhdGEgcmlnaHQ7CisgICAgICAgIH07CisgICAgICAgIEds
eXBoRGF0YSBleHRlbnNpb247CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0
YSBib3R0b207CisgICAgICAgICAgICBHbHlwaERhdGEgbGVmdDsKKyAgICAgICAgfTsKKyAgICAg
ICAgR2x5cGhEYXRhIG1pZGRsZTsKKyAgICBHbHlwaEFzc2VtYmx5RGF0YSgpCisgICAgOiB0b3Ao
KSwgZXh0ZW5zaW9uKCksIGJvdHRvbSgpLCBtaWRkbGUoKSB7IH0KKyAgICB9OworICAgIGVudW0g
U3RyZXRjaFR5cGUgeworICAgICAgICBVbnN0cmV0Y2hlZCwKKyAgICAgICAgU2l6ZVZhcmlhbnQs
CisgICAgICAgIEdseXBoQXNzZW1ibHkKKyAgICB9OworICAgIGVudW0gR2x5cGhQYWludFRyaW1t
aW5nIHsKKyAgICAgICAgVHJpbVRvcCwKKyAgICAgICAgVHJpbUJvdHRvbSwKKyAgICAgICAgVHJp
bVRvcEFuZEJvdHRvbSwKKyAgICAgICAgVHJpbUxlZnQsCisgICAgICAgIFRyaW1SaWdodCwKKyAg
ICAgICAgVHJpbUxlZnRBbmRSaWdodAorICAgIH07CisKKyAgICBMYXlvdXRVbml0IHN0cmV0Y2hT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQg
OiBtX3dpZHRoOyB9OworICAgIGJvb2wgZ2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwg
R2x5cGhEYXRhJikgY29uc3Q7CisgICAgdm9pZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERh
dGEmKTsKKyAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlw
aEFzc2VtYmx5RGF0YSYpOworICAgIHZvaWQgZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Io
Y29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICB2b2lkIGZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVu
ZGVyU3R5bGUmLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6
ZSA9IDApOworICAgIGJvb2wgZ2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mLCBHbHlw
aEFzc2VtYmx5RGF0YSYpOworCisgICAgTGF5b3V0UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRl
clN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQm
IG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKKyAgICB2b2lkIGZpbGxXaXRoVmVydGljYWxF
eHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOworICAgIHZvaWQgZmlsbFdpdGhI
b3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lk
IHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNz
ZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYp
OworCisgICAgVUNoYXIgbV9iYXNlQ2hhcmFjdGVyOworICAgIGJvb2wgbV9pc1ZlcnRpY2FsOwor
ICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRjaFR5cGU7CisgICAgdW5pb24geworICAgICAgICBHbHlw
aERhdGEgbV92YXJpYW50OworICAgICAgICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5Owor
ICAgIH07CisgICAgTGF5b3V0VW5pdCBtX3dpZHRoOworICAgIExheW91dFVuaXQgbV9hc2NlbnQ7
CisgICAgTGF5b3V0VW5pdCBtX2Rlc2NlbnQ7CisgICAgTGF5b3V0VW5pdCBtX2l0YWxpY0NvcnJl
Y3Rpb247Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQorI2VuZGlmIC8vIE1h
dGhPcGVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4IDljZDIxNTAuLmJmMzQ3ODAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuY3BwCkBAIC00NSwzMyArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CiB1c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CiAKLS8vIEZJWE1FOiBUaGUgT3BlblR5cGUg
TUFUSCB0YWJsZSBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZCBvdmVycmlkZSB0aGlz
IHRhYmxlIChodHRwOi8vd2tidWcvMTIyMjk3KS4KLXN0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7
Ci0gICAgVUNoYXIgY2hhcmFjdGVyOwotICAgIFVDaGFyIHRvcENoYXI7Ci0gICAgVUNoYXIgZXh0
ZW5zaW9uQ2hhcjsKLSAgICBVQ2hhciBib3R0b21DaGFyOwotICAgIFVDaGFyIG1pZGRsZUNoYXI7
Ci19OwotLy8gVGhlIGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0
byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgot
c3RhdGljIGNvbnN0IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQgPSA1Owotc3RhdGljIGNvbnN0
IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7Ci0gICAgeyAweDI4
ICAsIDB4MjM5YiwgMHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lz
Ci0gICAgeyAweDI5ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdo
dCBwYXJlbnRoZXNpcwotICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAg
ICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJhY2tldAotICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNh
NSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4N2Ig
ICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tl
dAotICAgIHsgMHg3ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmln
aHQgY3VybHkgYnJhY2tldAotICAgIHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAw
eDAgICAgfSwgLy8gbGVmdCBjZWlsaW5nCi0gICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAw
eDIzYTUsIDB4MCAgICB9LCAvLyByaWdodCBjZWlsaW5nCi0gICAgeyAweDIzMGEsIDB4MjNhMiwg
MHgyM2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29yCi0gICAgeyAweDIzMGIsIDB4
MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgotICAgIHsgMHg3
YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCi0g
ICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUg
dmVydGljYWwgbGluZQotICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAg
ICAgfSwgLy8gcGFyYWxsZWwgdG8KLSAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMy
MSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2lnbgotfTsKLQogUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OlJlbmRlck1hdGhNTE9wZXJhdG9yKE1hdGhNTEVsZW1lbnQmIGVsZW1lbnQsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAgICAgOiBSZW5kZXJNYXRoTUxUb2tlbihlbGVtZW50
LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUoMCkK
QEAgLTI5NCw4ICsyNjcsOSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX21h
dGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGljYWwpOwogICAg
IEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBnZXRC
YXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VH
bHlwaCkgOiAwOworICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3Iu
Z2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lkdGhGb3JHbHlwaChi
YXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewogICAgICAgICBpZiAobWF4
aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAgICAgbWF4aW11bUdseXBo
V2lkdGggPSBzdHJldGNoU2l6ZSgpOwpAQCAtMzA1LDEyICsyNzksMTIgQEAgdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIH0KICAg
ICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAvLyBMYXJn
ZSBvcGVyYXRvcnMgaW4gU1RJWCBXb3JkIGhhdmUgaW5jb3JyZWN0IGFkdmFuY2Ugd2lkdGgsIGNh
dXNpbmcgbWlzcGxhY2VtZW50IG9mIHN1cGVyc2NyaXB0LCBzbyB3ZSB1c2UgdGhlIGdseXBoIGJv
dW5kIGluc3RlYWQgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdGl4Zm9udHMvdHJhY2tpbmcv
NDkvKS4KLSAgICAgICAgZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKTsKLSAgICAgICAg
aWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZhcmlhbnQpCi0gICAgICAgICAgICBtYXhpbXVtR2x5
cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1fdmFyaWFudCkud2lkdGgoKTsKKyAgICAgICAgbV9t
YXRoT3BlcmF0b3IuZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CisgICAg
ICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6
ZVZhcmlhbnQpCisgICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCkud2lkdGgoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICAvLyBGSVhNRTogc29tZSBnbHlwaHMgKGUuZy4gdGhlIG9uZSBmb3IgIkZSQUNUSU9OIFNMQVNI
IiBpbiB0aGUgU1RJWCBNYXRoIGZvbnQgb3IgbGFyZ2Ugb3BlcmF0b3JzKSBoYXZlIGEgd2lkdGgg
dGhhdCBkZXBlbmRzIG9uIHRoZSBoZWlnaHQsIHJlc3VsdGluZyBpbiBsYXJnZSBnYXBzIChodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KLSAgICAgICAgZmlu
ZFN0cmV0Y2h5RGF0YSgmbWF4aW11bUdseXBoV2lkdGgpOworICAgICAgICBtX21hdGhPcGVyYXRv
ci5maW5kU3RyZXRjaHlEYXRhKHN0eWxlKCksICZtYXhpbXVtR2x5cGhXaWR0aCk7CiAgICAgfQog
ICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGltdW1HbHlwaFdpZHRoICsgbV90cmFpbGluZ1NwYWNl
OwogfQpAQCAtMzc0LDI0NSArMzQ4LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsCiAgICAg
dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiB9CiAKLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFz
ZUdseXBoKSBjb25zdAotewotICAgIGJhc2VHbHlwaCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENvbnRlbnQsICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkpOwotICAgIHJldHVybiBiYXNlR2x5cGguaXNWYWxpZCgpICYmIGJhc2VHbHlwaC5m
b250ID09ICZzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYgc2l6ZVZh
cmlhbnQpCi17Ci0gICAgQVNTRVJUKHNpemVWYXJpYW50LmlzVmFsaWQoKSAmJiBzaXplVmFyaWFu
dC5mb250LT5tYXRoRGF0YSgpKTsKLSAgICBtX3N0cmV0Y2hUeXBlID0gU2l6ZVZhcmlhbnQ7Ci0g
ICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnNldEdseXBoQXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0
YSkKLXsKLSAgICBtX3N0cmV0Y2hUeXBlID0gR2x5cGhBc3NlbWJseTsKLSAgICBtX2Fzc2VtYmx5
ID0gYXNzZW1ibHlEYXRhOwotfQotCi1ib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlw
aEFzc2VtYmx5RmFsbEJhY2soVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4g
YXNzZW1ibHlQYXJ0cywgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkgY29uc3QKLXsK
LSAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRoZSBPcGVuIFR5cGUgTWF0aCB0YWJsZSBpcyBhIGJp
dCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25lIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBSZW5kZXJN
YXRoTUxPcGVyYXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25hYmxl
IHdheS4KLSAgICAvLyBGSVhNRTogUmVuZGVyTWF0aE1MT3BlcmF0b3Igc2hvdWxkIHN1cHBvcnQg
dGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzAzMjcpLgotICAgIC8vIFdlIHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNvcHlD
b21wb25lbnRzIGZ1bmN0aW9uIGluIGdpdGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9ibG9i
L21hc3Rlci9mb250cy9PcGVuVHlwZU1hdGgvZm9udFV0aWwucHkKLQotICAgIC8vIFdlIGNvdW50
IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVuZGVyIHBpZWNlcy4KLSAgICBpbnQgbm9uRXh0ZW5kZXJD
b3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgewotICAgICAg
ICBpZiAoIXBhcnQuaXNFeHRlbmRlcikKLSAgICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQrKzsK
LSAgICB9Ci0gICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPiAzKQotICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNlcy4K
LQotICAgIC8vIFdlIG5vdyBicm93c2UgdGhlIGxpc3Qgb2YgcGllY2VzIGZyb20gbGVmdCB0byBy
aWdodCBmb3IgaG9yaXpvbnRhbCBvcGVyYXRvcnMgYW5kIGZyb20gYm90dG9tIHRvIHRvcCBmb3Ig
dmVydGljYWwgb3BlcmF0b3JzLgotICAgIGVudW0gUGFydFR5cGUgewotICAgICAgICBTdGFydCwK
LSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUsCi0gICAgICAgIE1pZGRsZSwK
LSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kLAotICAgICAgICBFbmQsCi0gICAg
ICAgIE5vbmUKLSAgICB9OwotICAgIFBhcnRUeXBlIGV4cGVjdGVkUGFydFR5cGUgPSBTdGFydDsK
LSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKLSAgICBhc3NlbWJseURhdGEu
bWlkZGxlLmdseXBoID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7
Ci0gICAgICAgIGlmIChub25FeHRlbmRlckNvdW50IDwgMykgewotICAgICAgICAgICAgLy8gSWYg
d2Ugb25seSBoYXZlIGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhlbiB3ZSBza2lwIHRoZSBt
aWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBFeHRlbmRl
ckJldHdlZW5TdGFydEFuZE1pZGRsZSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBl
ID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgZWxzZSBpZiAoZXhw
ZWN0ZWRQYXJ0VHlwZSA9PSBNaWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlw
ZSA9IEVuZDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFydC5pc0V4dGVuZGVyKSB7Ci0gICAg
ICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCi0gICAgICAgICAgICAg
ICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7IC8vIFdlIGNvcHkg
dGhlIGV4dGVuZGVyIHBhcnQuCi0gICAgICAgICAgICBlbHNlIGlmIChhc3NlbWJseURhdGEuZXh0
ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMgZGlmZmVyZW50IGV4
dGVuZGVycy4KLQotICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7Ci0gICAg
ICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbGVm
dC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5k
ZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIG1p
ZGRsZSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJl
dHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBjYXNlIEVuZDoKLSAgICAgICAgICAgIGNhc2UgTm9uZToKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3
ZWVuU3RhcnRBbmRNaWRkbGU6Ci0gICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRs
ZUFuZEVuZDoKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2VjdXRp
dmUgZXh0ZW5kZXJzLgotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7Ci0gICAgICAg
IGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBsZWZ0L2JvdHRvbSBwYXJ0
LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0g
ICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRk
bGU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5T
dGFydEFuZE1pZGRsZToKLSAgICAgICAgY2FzZSBNaWRkbGU6Ci0gICAgICAgICAgICAvLyBXZSBj
b3B5IHRoZSBtaWRkbGUgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5
cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVy
QmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNl
IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKLSAgICAgICAgY2FzZSBFbmQ6Ci0gICAgICAg
ICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5
RGF0YS50b3AuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlw
ZSA9IE5vbmU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBOb25lOgotICAg
ICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBu
b24tZXh0ZW5kZXIgcGFydC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGFsd2F5cyBhc3N1bWUg
dGhhdCB3ZSBoYXZlIGFuIGV4dGVuc2lvbiBnbHlwaC4KLQotICAgIC8vIElmIHdlIGRvbid0IGhh
dmUgdG9wL2JvdHRvbSBnbHlwaHMsIHdlIHVzZSB0aGUgZXh0ZW5zaW9uIGdseXBoLgotICAgIGlm
ICghYXNzZW1ibHlEYXRhLnRvcC5nbHlwaCkKLSAgICAgICAgYXNzZW1ibHlEYXRhLnRvcC5nbHlw
aCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7Ci0gICAgaWYgKCFhc3NlbWJseURhdGEu
Ym90dG9tLmdseXBoKQotICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0gYXNzZW1i
bHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKLQotICAgIGFzc2VtYmx5RGF0YS50b3AuZm9udCA9ICZz
dHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLSAgICBhc3NlbWJseURhdGEuZXh0
ZW5zaW9uLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLmJv
dHRvbS5mb250ID0gYXNzZW1ibHlEYXRhLnRvcC5mb250OwotICAgIGFzc2VtYmx5RGF0YS5taWRk
bGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPyBhc3NlbWJseURhdGEudG9wLmZv
bnQgOiBudWxscHRyOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1M
T3BlcmF0b3I6OmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCkKLXsKLSAgICBBU1NFUlQo
bV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpOwotCi0gICAg
R2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSgpLCBiYXNl
R2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAgVmVjdG9yPE9wZW5UeXBlTWF0
aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLQotICAgIC8vIFRoZSB2YWx1ZSBv
ZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVzIHRvbyBzbWFsbCwgc28gd2Ug
ZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGltZXMgdGhlIHNpemUgb2YgdGhl
IGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjpt
YXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0
KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhD
b25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCkpOwotCi0gICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhW
YXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0
cyk7Ci0KLSAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxh
cmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVy
d2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgotICAgIGZvciAoYXV0byYgc2l6
ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShz
aXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOwotICAgICAgICBzZXRTaXplVmFyaWFudChnbHlw
aERhdGEpOwotICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSBnbHlwaERhdGEuZm9udC0+bWF0
aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhEYXRhLmZvbnQsIGdseXBoRGF0YS5n
bHlwaCk7Ci0gICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpID49IGRpc3BsYXlP
cGVyYXRvck1pbkhlaWdodCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZFN0cmV0Y2h5RGF0YShmbG9hdCogbWF4aW11bUdseXBo
V2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkKLXsKLSAgICBBU1NFUlQoIW1heGltdW1HbHlw
aFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7Ci0KLSAgICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAg
IGlmICghZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7Ci0gICAgICAgIC8vIFdlIGRvIG5v
dCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgZmxv
YXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDog
YWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKLSAgICAgICAgaWYgKHRhcmdldFNpemUg
PD0gYmFzZVNpemUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR2x5cGhBc3Nl
bWJseURhdGEgYXNzZW1ibHlEYXRhOwotICAgIGlmIChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEo
KSkgewotICAgICAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKLSAgICAgICAgVmVjdG9y
PE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLSAgICAgICAg
YmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5
cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBhcnRzKTsKLSAgICAgICAg
Ly8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRzLgotICAgICAgICBmb3IgKGF1dG8mIHNpemVW
YXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7Ci0gICAgICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
KHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7Ci0gICAgICAgICAgICBpZiAobWF4aW11bUds
eXBoV2lkdGgpCi0gICAgICAgICAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgo
Km1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0
YSk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZv
ckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOwotICAg
ICAgICAgICAgICAgIGlmIChzaXplID49IHRhcmdldFNpemUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIHZlcmlm
eSBpZiB0aGVyZSBpcyBhIGNvbnN0cnVjdGlvbi4KLSAgICAgICAgaWYgKCFnZXRHbHlwaEFzc2Vt
Ymx5RmFsbEJhY2soYXNzZW1ibHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFU
SCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgot
ICAgICAgICBjb25zdCBTdHJldGNoeUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxs
cHRyOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgo
c3RyZXRjaHlDaGFyYWN0ZXJzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJh
Y3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9PSBtX3RleHRDb250ZW50KSB7Ci0gICAgICAgICAgICAg
ICAgc3RyZXRjaHlDaGFyYWN0ZXIgPSAmc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4
IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAqIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYg
d2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQg
Zm9ybSBieSBhZGRpbmcgLTEgb3IgKzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXgu
Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3Rl
ciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0
LgotICAgICAgICBpZiAoIXN0cmV0Y2h5Q2hhcmFjdGVyKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGlu
dG8gYSBsaXN0IG9mIGdseXBoIGRhdGEuCi0gICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT50b3BDaGFyLCBmYWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24gPSBzdHls
ZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVy
LT5leHRlbnNpb25DaGFyLCBmYWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20gPSBz
dHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFj
dGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBz
dHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciA/IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKSA6
IEdseXBoRGF0YSgpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1h
eGltdW0gd2lkdGgsIHZlcmlmeSBlYWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBo
V2lkdGgpIHsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1H
bHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wKSk7Ci0gICAg
ICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2
YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOwotICAgICAgICAqbWF4
aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdp
ZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChh
c3NlbWJseURhdGEuYm90dG9tKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBX
ZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3Zl
cmxhcHMuCi0gICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/Ci0gICAgICAgIGhlaWdo
dEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3ApICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRh
Lm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKQotICAgICAgICA6
IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5sZWZ0KSArIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1i
bHlEYXRhLnJpZ2h0KTsKLSAgICBpZiAobWluU2l6ZSA+IHRhcmdldFNpemUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldEdseXBoQXNzZW1ibHkoYXNzZW1ibHlEYXRhKTsKLX0KLQogdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogewogICAgIEFTU0VSVChmaXJzdENo
aWxkKCkpOwogICAgIGlmICghZmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3N0cmV0Y2hUeXBlID0gVW5zdHJldGNoZWQ7Ci0gICAgbV9pdGFsaWNDb3JyZWN0aW9uID0gMDsK
KyAgICBtX21hdGhPcGVyYXRvci51bnN0cmV0Y2goKTsKKyAgICBtX21hdGhPcGVyYXRvci5tX2l0
YWxpY0NvcnJlY3Rpb24gPSAwOwogICAgIC8vIFdlIGFkZCBzcGFjaW5nIGFyb3VuZCB0aGUgb3Bl
cmF0b3IuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0byB0aGUg
d2hvbGUgZW1iZWxsaXNoZWQgb3BlcmF0b3IgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQ4MzEpLgogICAgIC8vIEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQgb25s
eSBiZSBhZGRlZCBpbnNpZGUgKHBlcmhhcHMgaW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93d3cudzMu
b3JnL1RSL01hdGhNTC9jaGFwdGVyMy5odG1sI3ByZXNtLm9wc3BhY2luZykuCkBAIC02MjYsMjUg
KzM2OSwyNiBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAg
aWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9t
YXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsKICAg
ICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCi0g
ICAgICAgIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7CisgICAgICAgIG1fbWF0aE9w
ZXJhdG9yLmZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2Ug
ewotICAgICAgICBmaW5kU3RyZXRjaHlEYXRhKG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOwotICAg
ICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBVbnN0cmV0Y2hlZCkKKyAgICAgICAgbV9tYXRoT3Bl
cmF0b3IuZmluZFN0cmV0Y2h5RGF0YShzdHlsZSgpLCBudWxscHRyLCBzdHJldGNoU2l6ZSgpKTsK
KyAgICAgICAgaWYgKCFtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9zdHJldGNoVHlwZSA9
PSBTaXplVmFyaWFudCkgeworICAgIGlmIChtX2lzVmVydGljYWwgJiYgbV9tYXRoT3BlcmF0b3Iu
bV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlNpemVWYXJpYW50KSB7CiAgICAgICAgIC8v
IFdlIHJlc2l6ZSB0aGUgb3BlcmF0b3IgdG8gbWF0Y2ggdGhlIG9uZSBvZiB0aGUgc2l6ZSB2YXJp
YW50LgogICAgICAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAg
ICAgICAgICAgLy8gVGhlIHN0cmV0Y2ggc2l6ZSBpcyBhY3R1YWxseSBub3QgaW52b2x2ZWQgaW4g
dGhlIHNlbGVjdGlvbiBvZiB0aGUgc2l6ZSB2YXJpYW50IGluIGZpbmREaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yLgogICAgICAgICAgICAgLy8gV2Ugc2ltcGx5IHVzZSB0aGUgaGVpZ2h0IGFuZCBk
ZXB0aCBvZiB0aGUgc2VsZWN0ZWQgc2l6ZSB2YXJpYW50IGdseXBoLgotICAgICAgICAgICAgRmxv
YXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAg
ICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9y
Lm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0g
LWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGlu
ZSA9IGdseXBoQm91bmRzLm1heFkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IFdlIHJlc2NhbGUgdGhlIGhlaWdodCBhbmQgZGVwdGggcHJvcG9ydGlvbmF0ZWx5LgotICAgICAg
ICAgICAgZmxvYXQgdmFyaWFudFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX3ZhcmlhbnQpOworICAg
ICAgICAgICAgZmxvYXQgdmFyaWFudFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX21hdGhPcGVyYXRv
ci5tX3ZhcmlhbnQpOwogICAgICAgICAgICAgZmxvYXQgc2l6ZSA9IHN0cmV0Y2hTaXplKCk7CiAg
ICAgICAgICAgICBmbG9hdCBhc3BlY3QgPSBzaXplID4gMCA/IHZhcmlhbnRTaXplIC8gc2l6ZSA6
IDEuMDsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0
OwpAQCAtNjUzLDMwICszOTcsMzAgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRl
U3R5bGUoKQogICAgIH0KIAogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7Ci0gICAgICAgIGlmICht
X3N0cmV0Y2hUeXBlID09IFNpemVWYXJpYW50KSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICBpZiAobV9tYXRo
T3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlNpemVWYXJpYW50KSB7Cisg
ICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhP
cGVyYXRvci5tX3ZhcmlhbnQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNl
bGluZSA9IC1nbHlwaEJvdW5kcy55KCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93
QmFzZWxpbmUgPSBnbHlwaEJvdW5kcy5tYXhZKCk7Ci0gICAgICAgICAgICBtX3N0cmV0Y2hXaWR0
aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fdmFyaWFudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
bV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KSB7CisgICAgICAgICAgICBtX3N0cmV0Y2hX
aWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3Bl
cmF0b3I6OkdseXBoQXNzZW1ibHkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5k
czsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwOwogICAgICAg
ICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKIAotICAgICAgICAgICAgZ2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmxlZnQpOworICAgICAgICAgICAg
Z2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5Lmxl
ZnQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4
PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55
KCkpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8
TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZ
KCkpOwogCi0gICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1i
bHkucmlnaHQpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21h
dGhPcGVyYXRvci5tX2Fzc2VtYmx5LnJpZ2h0KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92
ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRo
QmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dC
YXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisgICAgICAgICAgICBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5z
aW9uKTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1h
eDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMu
eSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4
PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4
WSgpKTsKIAotICAgICAgICAgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewot
ICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5t
aWRkbGUpOworICAgICAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxl
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpOwogICAgICAgICAgICAgICAgIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgICAg
ICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0
cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAg
ICB9CkBAIC02ODYsMjM3ICs0MzAsNTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBk
YXRlU3R5bGUoKQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJzdExp
bmVCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNo
ZWQpCisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIHJldHVy
biBPcHRpb25hbDxpbnQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOwogICAgIHJldHVy
biBSZW5kZXJNYXRoTUxUb2tlbjo6Zmlyc3RMaW5lQmFzZWxpbmUoKTsKIH0KIAogdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2Fs
SGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVl
cyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5z
dHJldGNoZWQpCisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAg
IGxvZ2ljYWxIZWlnaHQgPSBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICsgbV9zdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lOwogICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQo
bG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCwgY29tcHV0ZWRWYWx1ZXMpOwogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEdseXBoKFBhaW50SW5mbyYgaW5mbywgY29u
c3QgR2x5cGhEYXRhJiBkYXRhLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50
VHJpbW1pbmcgdHJpbSkKLXsKLSAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChkYXRhKTsKLQotICAgIExheW91dFJlY3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBMYXlv
dXRTaXplKGdseXBoQm91bmRzLngoKSArIGdseXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91bmRz
LmhlaWdodCgpKSk7Ci0gICAgZ2x5cGhQYWludFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5cGhC
b3VuZHMueSgpKTsKLQotICAgIC8vIEluIG9yZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVnbHkg
d2l0aCBvbmUgYW5vdGhlciB3ZSBzbmFwIHRoZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVsIGJv
dW5kYXJpZXMKLSAgICAvLyBhbmQgdHJpbSBvZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJpbSBp
cyB0byBhY2NvdW50IGZvciBmb250cyB0aGF0IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZlIGxl
c3MKLSAgICAvLyB0aGFuIGZ1bGwgY292ZXJhZ2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBpbnRy
b2R1Y2Ugc21hbGwgc2VhbXMgYmV0d2VlbiBjb25uZWN0ZWQgZ2x5cGhzLgotICAgIEZsb2F0UmVj
dCBjbGlwQm91bmRzID0gaW5mby5yZWN0OwotICAgIHN3aXRjaCAodHJpbSkgewotICAgIGNhc2Ug
VHJpbVRvcDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRS
ZWN0LnkoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5
cGhQYWludFJlY3QueSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltQm90dG9tOgot
ICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4
WSgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5
cGhQYWludFJlY3QubWF4WSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltVG9wQW5k
Qm90dG9tOgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJl
Y3QueSgpLmNlaWwoKSArIDEpOwotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5k
cy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsKLSAgICAgICAgY2xpcEJvdW5kcy5z
aGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUcmltTGVmdDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGds
eXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhF
ZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmlt
UmlnaHQ6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50
UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRy
aW1MZWZ0QW5kUmlnaHQ6Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlw
aFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0
TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBj
bGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBjbGlw
Qm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOwotICAgIH0KLQot
ICAgIC8vIENsaXBwaW5nIHRoZSBlbmNsb3NpbmcgSW50UmVjdCBhdm9pZHMgYW55IHBvdGVudGlh
bCBpc3N1ZXMgYXQgam9pbmVkIGVkZ2VzLgotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlw
Qm91bmRzKTsKLQotICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEu
Z2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSkpOwotICAgIGluZm8u
Y29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBi
dWZmZXIsIDAsIDEsIG9yaWdpbik7Ci0KLSAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Ci19Ci0K
LXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlw
aChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQ
b2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3Ry
ZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5z
aW9uLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAv
LyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5m
by5jb250ZXh0KCkpOwotCi0gICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9hc3NlbWJseS5leHRlbnNpb24pOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVy
IHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGgg
aW50byB0aGUKLSAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3Jy
eWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBj
bGlwcGluZy4KLSAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xp
cEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZ
RWRnZVRvKHRvLnkoKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQot
ICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Ag
b2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCi0g
ICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAgTGF5
b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBv
ZmZzZXRUb0dseXBoVG9wKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJv
bSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFko
KSA8IHRvLnkoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgo
aW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9t
KTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRl
ZEdseXBoUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0
IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVu
IHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCi0gICAgICAgIC8vIHdpdGggdHJpbW1pbmcu
IEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KLSAgICAgICAgaWYgKGxhc3RQYWlu
dGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5
cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0
UG9pbnQmIHRvKQotewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9z
dHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5leHRl
bnNpb24uaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKLQotICAg
IC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24n
dCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihp
bmZvLmNvbnRleHQoKSk7Ci0KLSAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhl
cmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQot
ICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0
IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgot
ICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKLSAgICBjbGlwQm91bmRzLnNo
aWZ0WEVkZ2VUbyhmcm9tLngoKSk7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8odG8u
eCgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgLy8gVHJp
bW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIGV4
dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KLSAgICBmbG9h
dCBvZmZzZXRUb0dseXBoTGVmdCA9IC0yOwotICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0g
TGF5b3V0UG9pbnQoZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4oZnJvbS55
KCksIHRvLnkoKSkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBGbG9hdFJl
Y3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUg
KGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkgewotICAgICAgICBsYXN0UGFp
bnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGds
eXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChn
bHlwaE9yaWdpbi54KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC53aWR0aCgpKTsKLQotICAgICAg
ICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91
Z2ggdGhlIGdsdWUgZ2x5cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUK
LSAgICAgICAgLy8gd2l0aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3Ro
aW5nLgotICAgICAgICBpZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWlu
dChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBSZW5kZXJNYXRoTUxUb2tlbjo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogCi0gICAgaWYg
KGluZm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgbV9z
dHJldGNoVHlwZSA9PSBVbnN0cmV0Y2hlZCkKKyAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRp
bmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5
bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCAhbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNo
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKICAgICBpbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29s
b3Ioc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwogCi0g
ICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgQVNTRVJUKG1f
dmFyaWFudC5pc1ZhbGlkKCkpOworICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBl
ID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsKKyAgICAgICAgQVNTRVJUKG1fbWF0aE9w
ZXJhdG9yLm1fdmFyaWFudC5pc1ZhbGlkKCkpOwogICAgICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7
Ci0gICAgICAgIGJ1ZmZlci5hZGQobV92YXJpYW50LmdseXBoLCBtX3ZhcmlhbnQuZm9udCwgYWR2
YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9tYXRo
T3BlcmF0b3IubV92YXJpYW50LmdseXBoLCBtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9udCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KSk7CiAgICAgICAg
IExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0
ICsgbG9jYXRpb24oKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zv
ckdseXBoKG1fdmFyaWFudCk7CisgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5k
c0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgIExheW91dFBvaW50
IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkg
LSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0
eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fdmFyaWFudC5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJh
dG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZv
bnRDYXNjYWRlKCksICptX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9udCwgYnVmZmVyLCAwLCAx
LCBvcGVyYXRvck9yaWdpbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9p
c1ZlcnRpY2FsKQotICAgICAgICBwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShpbmZvLCBwYWlu
dE9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5
KGluZm8sIHBhaW50T2Zmc2V0KTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFp
bnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJU
KG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHku
dG9wLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tLmlzVmFsaWQoKSk7
Ci0KLSAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdl
IG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2Vz
IG9mIG91ciBwYWludCBib3guCisgICAgbV9tYXRoT3BlcmF0b3IubV9hc2NlbnQgPSBtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fZGVzY2VudCA9IG1f
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZTsKKyAgICBtX21hdGhPcGVyYXRvci5tX3dpZHRoID0g
bG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZWFkaW5nU3BhY2UgOiBtX3RyYWlsaW5nU3BhY2Us
IDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVm
dCk7Ci0gICAgRmxvYXRSZWN0IHRvcEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3Nl
bWJseS50b3ApOwotICAgIExheW91dFBvaW50IHRvcEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVm
dC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSB0b3BHbHlwaEJvdW5kcy55KCkpOwotICAgIExh
eW91dFJlY3QgdG9wR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHku
dG9wLCB0b3BHbHlwaE9yaWdpbiwgVHJpbUJvdHRvbSk7Ci0KLSAgICBGbG9hdFJlY3QgYm90dG9t
R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbSk7Ci0gICAgTGF5
b3V0UG9pbnQgYm90dG9tR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JU
b3BMZWZ0LnkoKSArIG9mZnNldEhlaWdodCgpIC0gKGJvdHRvbUdseXBoQm91bmRzLmhlaWdodCgp
ICsgYm90dG9tR2x5cGhCb3VuZHMueSgpKSk7Ci0gICAgTGF5b3V0UmVjdCBib3R0b21HbHlwaFBh
aW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5ib3R0b20sIGJvdHRvbUdseXBo
T3JpZ2luLCBUcmltVG9wKTsKLQotICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkp
IHsKLSAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQg
YW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50
IGhlaWdodCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlwaC4KLSAgICAgICAgRmxvYXRSZWN0IG1pZGRs
ZUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOwotICAgICAg
ICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BH
bHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0
UG9pbnQoMCwgKGJvdHRvbUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1h
eFkoKSkgLyAyLjApKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBv
aW50KDAsIG1pZGRsZUdseXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7Ci0KLSAgICAgICAgTGF5
b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJs
eS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAg
ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwot
ICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQ
YWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllD
b3JuZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25H
bHlwaChpbmZvLCB0b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlw
aFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICBBU1NFUlQoIW1faXNWZXJ0aWNhbCk7
Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJU
KG1fYXNzZW1ibHkubGVmdC5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LnJpZ2h0
LmlzVmFsaWQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0
aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdp
dGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCi0gICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JU
b3BMZWZ0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwotICAgIG9wZXJhdG9yVG9wTGVmdC5t
b3ZlKG1fbGVhZGluZ1NwYWNlLCAwKTsKLSAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQ
b2ludChvcGVyYXRvclRvcExlZnQpOwotICAgIExheW91dFBvaW50IGxlZnRHbHlwaE9yaWdpbihv
cGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpICsgbV9zdHJldGNoSGVpZ2h0
QWJvdmVCYXNlbGluZSk7Ci0gICAgTGF5b3V0UmVjdCBsZWZ0R2x5cGhQYWludFJlY3QgPSBwYWlu
dEdseXBoKGluZm8sIG1fYXNzZW1ibHkubGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmltUmlnaHQp
OwotCi0gICAgRmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fz
c2VtYmx5LnJpZ2h0KTsKLSAgICBMYXlvdXRQb2ludCByaWdodEdseXBoT3JpZ2luKG9wZXJhdG9y
VG9wTGVmdC54KCkgKyBvZmZzZXRXaWR0aCgpIC0gcmlnaHRHbHlwaEJvdW5kcy53aWR0aCgpLCBv
cGVyYXRvclRvcExlZnQueSgpICsgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAg
TGF5b3V0UmVjdCByaWdodEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2Vt
Ymx5LnJpZ2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVmdCk7Ci0KLSAgICBpZiAobV9hc3Nl
bWJseS5taWRkbGUuaXNWYWxpZCgpKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3Jp
Z2luIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KLSAgICAg
ICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVm
dEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlv
dXRQb2ludCgocmlnaHRHbHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4
WCgpKSAvIDIuMCwgMCkpOwotICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0
ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4s
IFRyaW1MZWZ0QW5kUmlnaHQpOwotICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25H
bHlwaChpbmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgbWlkZGxlR2x5
cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRh
bEV4dGVuc2lvbkdseXBoKGluZm8sIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVy
KCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGluZm8sIGxlZnRHbHlwaFBh
aW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29y
bmVyKCkpOworICAgIGlmIChtX2lzVmVydGljYWwpCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLnBh
aW50VmVydGljYWxHbHlwaEFzc2VtYmx5KHN0eWxlKCksIGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7
CisgICAgZWxzZQorICAgICAgICBtX21hdGhPcGVyYXRvci5wYWludEhvcml6b250YWxHbHlwaEFz
c2VtYmx5KHN0eWxlKCksIGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7CiB9CiAKIHZvaWQgUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBwYWludEluZm9Gb3JDaGlsZCwg
Ym9vbCB1c2VQcmludFJlY3QpCiB7CiAgICAgLy8gV2Ugc2tpcCBwYWludGluZyBmb3IgaW52aXNp
YmxlIG9wZXJhdG9ycyB0b28gdG8gYXZvaWQgc29tZSAibWlzc2luZyBjaGFyYWN0ZXIiIGdseXBo
IHRvIGFwcGVhciBpZiBhcHByb3ByaWF0ZSBtYXRoIGZvbnRzIGFyZSBub3QgYXZhaWxhYmxlLgot
ICAgIGlmIChtX3N0cmV0Y2hUeXBlICE9IFVuc3RyZXRjaGVkIHx8IGlzSW52aXNpYmxlT3BlcmF0
b3IoKSkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSB8fCBpc0ludmlzaWJs
ZU9wZXJhdG9yKCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6cGFp
bnRDaGlsZHJlbihwYWludEluZm8sIHBhaW50T2Zmc2V0LCBwYWludEluZm9Gb3JDaGlsZCwgdXNl
UHJpbnRSZWN0KTsKIH0KQEAgLTkzMSwxOSArNDkyLDE5IEBAIExheW91dFVuaXQgUmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcigpCiAgICAgLy8gSGVuY2Ugd2UgZGV0ZXJt
aW5lIHRoZSBlcnJvciBpbiB0aGUgbG9naWNhbCB3aWR0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIGFj
dHVhbCB3aWR0aCBvZiB0aGUgZ2x5cGgocykgdXNlZCB0byBwYWludCB0aGUgb3BlcmF0b3IuCiAg
ICAgTGF5b3V0VW5pdCB3aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwogCi0gICAgaWYgKG1fc3RyZXRj
aFR5cGUgPT0gVW5zdHJldGNoZWQpIHsKKyAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRj
aGVkKCkpIHsKICAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCku
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRDb250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSk7CiAgICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckds
eXBoKGRhdGEpOwogICAgIH0KIAotICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFNpemVWYXJpYW50
KQotICAgICAgICByZXR1cm4gd2lkdGggLSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3ZhcmlhbnQp
OworICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6
U2l6ZVZhcmlhbnQpCisgICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAKLSAgICBmbG9hdCBhc3NlbWJseVdpZHRoID0g
YWR2YW5jZVdpZHRoRm9yR2x5cGgobV9hc3NlbWJseS50b3ApOwotICAgIGFzc2VtYmx5V2lkdGgg
PSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5
LmJvdHRvbSkpOwotICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbikpOwotICAgIGlmIChtX2Fz
c2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCi0gICAgICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1h
eChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSkp
OworICAgIGZsb2F0IGFzc2VtYmx5V2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhP
cGVyYXRvci5tX2Fzc2VtYmx5LnRvcCk7CisgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFz
c2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1i
bHkuYm90dG9tKSk7CisgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgs
IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5zaW9u
KSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkK
KyAgICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlKSk7CiAgICAgcmV0
dXJuIHdpZHRoIC0gYXNzZW1ibHlXaWR0aDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCmluZGV4IGYwODY4MTAu
LjM4MGJiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHbHlw
aFBhZ2UuaCIKICNpbmNsdWRlICJNYXRoTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiTWF0aE9wZXJhdG9yLmgiCiAjaW5jbHVkZSAi
T3BlblR5cGVNYXRoRGF0YS5oIgogI2luY2x1ZGUgIlJlbmRlck1hdGhNTFRva2VuLmgiCiAKQEAg
LTUxLDcgKzUyLDcgQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBUaGUgZGlzcGxheXN0eWxlIHBy
b3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExODczNykuCiAgICAgYm9vbCBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuICFoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpTdHJldGNoeSkgJiYgaGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6TGFyZ2VPcCk7IH0KICAgICBib29sIGlzVmVydGljYWwoKSBjb25zdCB7IHJldHVybiBtX2lz
VmVydGljYWw7IH0KLSAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KKyAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX21hdGhPcGVyYXRvci5pdGFsaWNDb3JyZWN0aW9uKCk7IH0K
IAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlU3R5bGUoKSBmaW5hbDsKQEAg
LTczLDMyICs3NCw2IEBAIHByb3RlY3RlZDoKICAgICBVQ2hhciB0ZXh0Q29udGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgR2x5cGhB
c3NlbWJseURhdGEgewotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBHbHlwaERhdGEgdG9w
OwotICAgICAgICAgICAgR2x5cGhEYXRhIHJpZ2h0OwotICAgICAgICB9OwotICAgICAgICBHbHlw
aERhdGEgZXh0ZW5zaW9uOwotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAgICBHbHlwaERhdGEg
Ym90dG9tOwotICAgICAgICAgICAgR2x5cGhEYXRhIGxlZnQ7Ci0gICAgICAgIH07Ci0gICAgICAg
IEdseXBoRGF0YSBtaWRkbGU7Ci0gICAgR2x5cGhBc3NlbWJseURhdGEoKQotICAgIDogdG9wKCks
IGV4dGVuc2lvbigpLCBib3R0b20oKSwgbWlkZGxlKCkgeyB9Ci0gICAgfTsKLSAgICBlbnVtIFN0
cmV0Y2hUeXBlIHsKLSAgICAgICAgVW5zdHJldGNoZWQsCi0gICAgICAgIFNpemVWYXJpYW50LAot
ICAgICAgICBHbHlwaEFzc2VtYmx5Ci0gICAgfTsKLSAgICBTdHJldGNoVHlwZSBtX3N0cmV0Y2hU
eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgR2x5cGhEYXRhIG1fdmFyaWFudDsKLSAgICAgICAg
R2x5cGhBc3NlbWJseURhdGEgbV9hc3NlbWJseTsKLSAgICB9OwotICAgIExheW91dFVuaXQgbV9p
dGFsaWNDb3JyZWN0aW9uOwotCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGlzQW5vbnltb3VzKCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFu
b255bW91cykiIDogIlJlbmRlck1hdGhNTE9wZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGls
ZHJlbihQYWludEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBm
b3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRo
TUxPcGVyYXRvcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KQEAgLTExMiwyNyArODcs
NiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdDsK
IAotICAgIGJvb2wgZ2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKLSAgICB2
b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmKTsKLSAgICBib29s
IGdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1i
bHlQYXJ0PiwgR2x5cGhBc3NlbWJseURhdGEmKSBjb25zdDsKLSAgICB2b2lkIGZpbmREaXNwbGF5
U3R5bGVMYXJnZU9wZXJhdG9yKCk7Ci0gICAgdm9pZCBmaW5kU3RyZXRjaHlEYXRhKGZsb2F0KiBt
YXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7Ci0KLSAgICBlbnVt
IEdseXBoUGFpbnRUcmltbWluZyB7Ci0gICAgICAgIFRyaW1Ub3AsCi0gICAgICAgIFRyaW1Cb3R0
b20sCi0gICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCi0gICAgICAgIFRyaW1MZWZ0LAotICAgICAg
ICBUcmltUmlnaHQsCi0gICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKLSAgICB9OwotCi0gICAgTGF5
b3V0UmVjdCBwYWludEdseXBoKFBhaW50SW5mbyYsIGNvbnN0IEdseXBoRGF0YSYsIGNvbnN0IExh
eW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyk7Ci0gICAgdm9pZCBmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGZy
b20sIGNvbnN0IExheW91dFBvaW50JiB0byk7Ci0gICAgdm9pZCBmaWxsV2l0aEhvcml6b250YWxF
eHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3Qg
TGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludEhvcml6b250YWxH
bHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBz
ZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6Rmxh
ZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0T3BlcmF0b3JGbGFnRnJvbUF0
dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgdm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXNG
cm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOwpA
QCAtMTQ5LDYgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3RyYWlsaW5nU3Bh
Y2U7CiAgICAgTGF5b3V0VW5pdCBtX21pblNpemU7CiAgICAgTGF5b3V0VW5pdCBtX21heFNpemU7
CisgICAgTWF0aE9wZXJhdG9yIG1fbWF0aE9wZXJhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotLSAKMi44LjAucmMzCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277253</attachid>
            <date>2016-04-25 09:14:53 -0700</date>
            <delta_ts>2016-04-26 05:07:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-MathOperator-move-selection-and-painting.patch</filename>
            <type>text/plain</type>
            <size>76696</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA2ZjhmMTRlM2QyOWM0OWYzZGVkZTdjNzc1MWY1ZWJiNWU5MGVkZjdjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogRnJpLCAyMiBBcHIgMjAxNiAyMjowMTowNCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy81XSBN
YXRoT3BlcmF0b3IgKG1vdmUgc2VsZWN0aW9uIGFuZCBwYWludGluZykKCi0tLQogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjAgKysrCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAgOCAr
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAgICB8IDUx
NSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9N
YXRoT3BlcmF0b3IuaCAgICAgfCAxMTAgKysrKysKIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcCAgICAgIHwgNTM1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4u
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCAgICAgICAgfCAgNTEgKy0K
IDcgZmlsZXMgY2hhbmdlZCwgNzQ1IGluc2VydGlvbnMoKyksIDUzNSBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjNTgyOWY2Li5hNzU4
MWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjUxMCw2ICsyNTEwLDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAKIAogICAg
IHJlbmRlcmluZy9tYXRobWwvTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmNwcAorICAgIHJlbmRl
cmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQu
Y3BwCiAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBhNDlmZWYyLi5lZjEyOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjUgQEAKIDIw
MTYtMDQtMjIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCisgICAgICAgIE1v
dmUgc2VsZWN0aW9uIGFuZCBkcmF3aW5nIG9mIHN0cmV0Y2h5IG9wZXJhdG9ycyBpbnRvIGEgc2Vw
YXJhdGUgTWF0aE9wZXJhdG9yIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTY5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2VkLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCB0aGUgTWF0aE9wZXJhdG9yIGZpbGVzLgor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAg
ICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmJvdW5kc0ZvckdseXBoKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRv
ci4KKyAgICAgICAgKFdlYkNvcmU6OmhlaWdodEZvckdseXBoKTogTW92ZWQgZnJvbSBSZW5kZXJN
YXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OmFkdmFuY2VXaWR0aEZvckdseXBoKTog
TW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhP
cGVyYXRvcjo6TWF0aE9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6
c2V0T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpnZXRCYXNlR2x5
cGgpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkp
OiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IE1vdmVkIGZyb20gUmVu
ZGVyTWF0aE1MT3BlcmF0b3Igd2l0aCBhZGRpdGlvbmFsIHN0eWxlIHBhcmFtZXRlci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5z
aW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdp
dGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseSk6IERp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjppdGFsaWNDb3JyZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6aXNTdHJldGNoZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjp1bnN0cmV0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJh
dG9yOjpHbHlwaEFzc2VtYmx5RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBNb3ZlZCBmcm9tIFJl
bmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzdHJl
dGNoU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVy
cy4KKyAgICAgICAgRm9yIG5vdyB3ZSBjYWxsIHNldE9wZXJhdG9yIHRvIHRyYW5zbWl0IGluZm9y
bWF0aW9uIHRvIG1fbWF0aE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1M
T3BlcmF0b3I6OnVwZGF0ZVN0eWxlKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJl
cnMuCisgICAgICAgIEZvciBub3cgd2Ugc2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVtYmVycyB0
byB0cmFuc21pdCBpdCBzb21lIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OmZpcnN0TGluZUJhc2VsaW5lKTogVXBkYXRlZCB0byB1c2UgTWF0aE9w
ZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludCk6IERpdHRvLgorICAgICAgICBGb3Igbm93IHdlIHNldCBzb21l
IG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBpbmZvcm1hdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKTog
VXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0R2x5
cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZFN0
cmV0Y2h5RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6cGFpbnRHbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxF
eHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1i
bHkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjppdGFsaWND
b3JyZWN0aW9uKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGE6OkdseXBo
QXNzZW1ibHlEYXRhKTogRGVsZXRlZC4KKworMjAxNi0wNC0yMiAgRnJlZGVyaWMgV2FuZyAgPGZ3
YW5nQGlnYWxpYS5jb20+CisKICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3I6IHJlZmFjdG9y
IG1hbmFnZW1lbnQgb2Ygc3RyZXRjaHkgZGF0YSBhbmQgaXRhbGljIGNvcnJlY3Rpb24KICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjkxMwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OGFjNTQzMi4uNGMwNzQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY1OSw2ICsxNjU5LDggQEAKIAkJNDM5MDQ2RTgxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxTY3JpcHRzLmggKi87IH07CiAJCTQzOTA0NkU5MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAgKi87IH07CiAJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92
ZXIuaCAqLzsgfTsKKwkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZE
NTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLzsgfTsKKwkJNDM5MDQ2RUEx
MkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhP
cGVyYXRvci5oICovOyB9OwogCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0
aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2RDcxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLzsg
fTsKIAkJNDM5MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZEODEyREEy
NUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCAqLzsgfTsKIAkJNDM5RDMzNDMxM0E2
OTExQzAwQzIwRjRGIC8qIFNWR0FuaW1hdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5RDMzNDAxM0E2OTExQzAwQzIwRjRGIC8qIFNWR0Fu
aW1hdGVkVHlwZS5oICovOyB9OwpAQCAtOTE4OCw2ICs5MTkwLDggQEAKIAkJNDM5MDQ2RDQxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNjcmlwdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU2NyaXB0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ2MTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE9wZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFD
IC8qIE1hdGhPcGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRo
T3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDcxMkRBMjVF
ODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2Vu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFRva2VuLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAv
KiBTVkdBbmltYXRlZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkxMCw2ICsx
NjkxNCw4IEBACiAJCQkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRv
a2VuLmggKi8sCiAJCQkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVu
ZGVyT3Zlci5jcHAgKi8sCiAJCQkJNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5oICovLAorCQkJCTQzOTA0NkQ1MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwICovLAorCQkJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3Bl
cmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWF0aG1sOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTI3NjA5LDYgKzI3NjE1LDcgQEAKIAkJCQk0MzkwNDZFNjEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5
MDQ2RUMxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZFQTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9w
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyog
UmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJCURFQkNDREQyMTY2NDZFODIwMEE0NTJF
MSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFG
QTMwM0YxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzEyNzEsNiArMzEyNzgsNyBAQAogCQkJCTQzOTA0NkU1MTJEQTI1RTgwMEFGODBB
MiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzOTA0
NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4
IC8qIFJlbmRlck1lZGlhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFNDlCMzA5MTY1RjJGRTEw
MDEwMzM4RCAvKiBSZW5kZXJNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MUZBMzAzRTEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9scy5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0
aE9wZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTA3ZmQ3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2luY2x1ZGUgIk1hdGhP
cGVyYXRvci5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUlu
aGVyaXRlZERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEZs
b2F0UmVjdCBib3VuZHNGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpCit7CisgICAgcmV0
dXJuIGRhdGEuaXNWYWxpZCgpID8gZGF0YS5mb250LT5ib3VuZHNGb3JHbHlwaChkYXRhLmdseXBo
KSA6IEZsb2F0UmVjdCgpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGhlaWdodEZvckdseXBo
KGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gYm91bmRzRm9yR2x5cGgoZGF0
YSkuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYWR2YW5jZVdpZHRoRm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBkYXRhLmlzVmFsaWQoKSA/
IGRhdGEuZm9udC0+d2lkdGhGb3JHbHlwaChkYXRhLmdseXBoKSA6IDA7Cit9CisKKy8vIEZJWE1F
OiBUaGlzIGhhcmRjb2RlZCBkYXRhIGNhbiBiZSByZW1vdmVkIHdoZW4gT3BlblR5cGUgTUFUSCBm
b250IGFyZSB3aWRlbHkgYXZhaWxhYmxlIChodHRwOi8vd2tidWcvMTU2ODM3KS4KK3N0cnVjdCBT
dHJldGNoeUNoYXJhY3RlciB7CisgICAgVUNoYXIgY2hhcmFjdGVyOworICAgIFVDaGFyIHRvcENo
YXI7CisgICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKKyAgICBVQ2hhciBib3R0b21DaGFyOworICAg
IFVDaGFyIG1pZGRsZUNoYXI7Cit9OworLy8gVGhlIGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQg
cGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUg
bWlycm9yZWQgaW4gUlRMLgorc3RhdGljIGNvbnN0IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQg
PSA1Oworc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sx
NF0gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAv
LyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAweDI5ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAs
IDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcworICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4
MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJhY2tldAorICAgIHsgMHg1
ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJy
YWNrZXQKKyAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8v
IGxlZnQgY3VybHkgYnJhY2tldAorICAgIHsgMHg3ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2Fk
LCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAorICAgIHsgMHgyMzA4LCAweDIzYTEs
IDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWlsaW5nCisgICAgeyAweDIzMDks
IDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyByaWdodCBjZWlsaW5nCisgICAg
eyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29y
CisgICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdo
dCBmbG9vcgorICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3YywgICAweDAgICAgfSwg
Ly8gdmVydGljYWwgYmFyCisgICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4
MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQorICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4
MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8KKyAgICB7IDB4MjIyYiwgMHgy
MzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2lnbgorfTsKKworTWF0
aE9wZXJhdG9yOjpNYXRoT3BlcmF0b3IoKQorICAgIDogbV9iYXNlQ2hhcmFjdGVyKDApCisgICAg
LCBtX2lzVmVydGljYWwoZmFsc2UpCisgICAgLCBtX3N0cmV0Y2hUeXBlKFVuc3RyZXRjaGVkKQor
ICAgICwgbV93aWR0aCgwKQorICAgICwgbV9hc2NlbnQoMCkKKyAgICAsIG1fZGVzY2VudCgwKQor
ICAgICwgbV9pdGFsaWNDb3JyZWN0aW9uKDApCit7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpz
ZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBib29sIGlzVmVydGljYWwpCit7CisgICAg
bV9iYXNlQ2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlcjsKKyAgICBtX2lzVmVydGljYWwgPSBpc1Zl
cnRpY2FsOworfQorCitib29sIE1hdGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBiYXNlR2x5cGgpIGNvbnN0Cit7CisgICAgYmFzZUds
eXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV9iYXNlQ2hh
cmFjdGVyLCAhc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKKyAgICByZXR1cm4gYmFz
ZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5cGguZm9udCA9PSAmc3R5bGUuZm9udENhc2NhZGUo
KS5wcmltYXJ5Rm9udCgpOworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQo
Y29uc3QgR2x5cGhEYXRhJiBzaXplVmFyaWFudCkKK3sKKyAgICBBU1NFUlQoc2l6ZVZhcmlhbnQu
aXNWYWxpZCgpICYmIHNpemVWYXJpYW50LmZvbnQtPm1hdGhEYXRhKCkpOworICAgIG1fc3RyZXRj
aFR5cGUgPSBTaXplVmFyaWFudDsKKyAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKK30KKwor
dm9pZCBNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpH
bHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQoreworICAgIG1fc3RyZXRjaFR5cGUgPSBH
bHlwaEFzc2VtYmx5OworICAgIG1fYXNzZW1ibHkgPSBhc3NlbWJseURhdGE7Cit9CisKK3ZvaWQg
TWF0aE9wZXJhdG9yOjpmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUpCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisKKyAgICBHbHlwaERh
dGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpIHx8
ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPEdseXBoPiBzaXplVmFyaWFudHM7CisgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFz
c2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKKworICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5
T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVzIHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRo
YXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGltZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5
cGguCisgICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoaGVpZ2h0
Rm9yR2x5cGgoYmFzZUdseXBoKSAqIHNxcnRPZlR3b0Zsb2F0LCBiYXNlR2x5cGguZm9udC0+bWF0
aERhdGEoKS0+Z2V0TWF0aENvbnN0YW50KCpiYXNlR2x5cGguZm9udCwgT3BlblR5cGVNYXRoRGF0
YTo6RGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KSk7CisKKyAgICBiYXNlR2x5cGguZm9udC0+bWF0
aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlh
bnRzLCBhc3NlbWJseVBhcnRzKTsKKworICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2
YXJpYW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1p
bkhlaWdodCBhbmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCisg
ICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgeworICAgICAgICBHbHlw
aERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7CisgICAgICAgIHNl
dFNpemVWYXJpYW50KGdseXBoRGF0YSk7CisgICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGds
eXBoRGF0YS5mb250LT5tYXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEu
Zm9udCwgZ2x5cGhEYXRhLmdseXBoKTsKKyAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBo
RGF0YSkgPj0gZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitib29sIE1hdGhPcGVyYXRvcjo6Z2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFz
c2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMsIEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURh
dGEpCit7CisgICAgLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBUeXBlIE1hdGggdGFibGUg
aXMgYSBiaXQgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSB0aGUg
TWF0aE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBmYWxsYmFjayBpbiBhIHJlYXNvbmFibGUg
d2F5LgorICAgIC8vIEZJWE1FOiBNYXRoT3BlcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIG1vc3Qg
Z2VuZXJhbCBmb3JtYXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzAzMjcpLgorICAgIC8vIFdlIHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNvcHlDb21wb25lbnRz
IGZ1bmN0aW9uIGluIGdpdGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9ibG9iL21hc3Rlci9m
b250cy9PcGVuVHlwZU1hdGgvZm9udFV0aWwucHkKKworICAgIC8vIFdlIGNvdW50IHRoZSBudW1i
ZXIgb2Ygbm9uIGV4dGVuZGVyIHBpZWNlcy4KKyAgICBpbnQgbm9uRXh0ZW5kZXJDb3VudCA9IDA7
CisgICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAoIXBh
cnQuaXNFeHRlbmRlcikKKyAgICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQrKzsKKyAgICB9Cisg
ICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPiAzKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRo
aXMgaXMgbm90IHN1cHBvcnRlZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNlcy4KKworICAgIC8v
IFdlIG5vdyBicm93c2UgdGhlIGxpc3Qgb2YgcGllY2VzIGZyb20gbGVmdCB0byByaWdodCBmb3Ig
aG9yaXpvbnRhbCBvcGVyYXRvcnMgYW5kIGZyb20gYm90dG9tIHRvIHRvcCBmb3IgdmVydGljYWwg
b3BlcmF0b3JzLgorICAgIGVudW0gUGFydFR5cGUgeworICAgICAgICBTdGFydCwKKyAgICAgICAg
RXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUsCisgICAgICAgIE1pZGRsZSwKKyAgICAgICAg
RXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kLAorICAgICAgICBFbmQsCisgICAgICAgIE5vbmUK
KyAgICB9OworICAgIFBhcnRUeXBlIGV4cGVjdGVkUGFydFR5cGUgPSBTdGFydDsKKyAgICBhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKKyAgICBhc3NlbWJseURhdGEubWlkZGxlLmds
eXBoID0gMDsKKyAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7CisgICAgICAg
IGlmIChub25FeHRlbmRlckNvdW50IDwgMykgeworICAgICAgICAgICAgLy8gSWYgd2Ugb25seSBo
YXZlIGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhlbiB3ZSBza2lwIHRoZSBtaWRkbGUgZ2x5
cGguCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBFeHRlbmRlckJldHdlZW5T
dGFydEFuZE1pZGRsZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5k
ZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRQYXJ0
VHlwZSA9PSBNaWRkbGUpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEVuZDsK
KyAgICAgICAgfQorICAgICAgICBpZiAocGFydC5pc0V4dGVuZGVyKSB7CisgICAgICAgICAgICBp
ZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCisgICAgICAgICAgICAgICAgYXNzZW1i
bHlEYXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7IC8vIFdlIGNvcHkgdGhlIGV4dGVu
ZGVyIHBhcnQuCisgICAgICAgICAgICBlbHNlIGlmIChhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmds
eXBoICE9IHBhcnQuZ2x5cGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlz
IGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMgZGlmZmVyZW50IGV4dGVuZGVycy4K
KworICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7CisgICAgICAgICAgICBj
YXNlIFN0YXJ0OgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbGVmdC9ib3R0b20g
cGFydC4KKyAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVu
U3RhcnRBbmRNaWRkbGU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBj
YXNlIE1pZGRsZToKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIG1pZGRsZSBwYXJ0
LgorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRk
bGVBbmRFbmQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXNlIEVu
ZDoKKyAgICAgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5v
dCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRB
bmRNaWRkbGU6CisgICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoK
KyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZXh0ZW5k
ZXJzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7CisgICAgICAgIGNhc2UgU3Rh
cnQ6CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgorICAgICAg
ICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAg
ICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1p
ZGRsZToKKyAgICAgICAgY2FzZSBNaWRkbGU6CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBt
aWRkbGUgcGFydC4KKyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPSBwYXJ0
LmdseXBoOworICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vlbk1p
ZGRsZUFuZEVuZDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEV4dGVuZGVy
QmV0d2Vlbk1pZGRsZUFuZEVuZDoKKyAgICAgICAgY2FzZSBFbmQ6CisgICAgICAgICAgICAvLyBX
ZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4KKyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS50b3Au
Z2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IE5vbmU7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBOb25lOgorICAgICAgICAgICAg
Ly8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBub24tZXh0ZW5k
ZXIgcGFydC4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBo
YXZlIGFuIGV4dGVuc2lvbiBnbHlwaC4KKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdG9wL2Jv
dHRvbSBnbHlwaHMsIHdlIHVzZSB0aGUgZXh0ZW5zaW9uIGdseXBoLgorICAgIGlmICghYXNzZW1i
bHlEYXRhLnRvcC5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLnRvcC5nbHlwaCA9IGFzc2Vt
Ymx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisgICAgaWYgKCFhc3NlbWJseURhdGEuYm90dG9tLmds
eXBoKQorICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0gYXNzZW1ibHlEYXRhLmV4
dGVuc2lvbi5nbHlwaDsKKworICAgIGFzc2VtYmx5RGF0YS50b3AuZm9udCA9ICZzdHlsZS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5mb250
ID0gYXNzZW1ibHlEYXRhLnRvcC5mb250OworICAgIGFzc2VtYmx5RGF0YS5ib3R0b20uZm9udCA9
IGFzc2VtYmx5RGF0YS50b3AuZm9udDsKKyAgICBhc3NlbWJseURhdGEubWlkZGxlLmZvbnQgPSBh
c3NlbWJseURhdGEubWlkZGxlLmdseXBoID8gYXNzZW1ibHlEYXRhLnRvcC5mb250IDogbnVsbHB0
cjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZFN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0
aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQoreworICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lk
dGggfHwgbV9pc1ZlcnRpY2FsKTsKKworICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CisgICAgaWYg
KCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKKyAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2gg
aWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgorICAgICAgICBmbG9hdCBiYXNlU2l6
ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lk
dGhGb3JHbHlwaChiYXNlR2x5cGgpOworICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNYXRoT3BlcmF0b3I6OkdseXBo
QXNzZW1ibHlEYXRhIGFzc2VtYmx5RGF0YTsKKyAgICBpZiAoYmFzZUdseXBoLmZvbnQtPm1hdGhE
YXRhKCkpIHsKKyAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7CisgICAgICAgIFZl
Y3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5UGFydHM7CisgICAg
ICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBo
LmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7CisgICAg
ICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KKyAgICAgICAgZm9yIChhdXRvJiBz
aXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgeworICAgICAgICAgICAgR2x5cGhEYXRhIGdseXBo
RGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAgICAgICAgICAgaWYgKG1heGlt
dW1HbHlwaFdpZHRoKQorICAgICAgICAgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6
bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRTaXplVmFyaWFudChnbHlw
aERhdGEpOworICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBtX2lzVmVydGljYWwgPyBoZWln
aHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoZ2x5cGhEYXRhKTsK
KyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXplKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSB2
ZXJpZnkgaWYgdGhlcmUgaXMgYSBjb25zdHJ1Y3Rpb24uCisgICAgICAgIGlmICghZ2V0R2x5cGhB
c3NlbWJseUZhbGxCYWNrKHN0eWxlLCBhc3NlbWJseVBhcnRzLCBhc3NlbWJseURhdGEpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9pc1ZlcnRpY2Fs
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90
IGhhdmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0
cnVjdGlvbnMuCisgICAgICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyKiBzdHJldGNoeUNoYXJh
Y3RlciA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heEluZGV4ID0gV1RGX0FS
UkFZX0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBtYXhJbmRleDsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKHN0
cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IG1fYmFzZUNoYXJhY3Rlcikgewor
ICAgICAgICAgICAgICAgIHN0cmV0Y2h5Q2hhcmFjdGVyID0gJnN0cmV0Y2h5Q2hhcmFjdGVyc1tp
bmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgJiYgaW5kZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50ICogMikgeworICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24gd2Ugc2VsZWN0IHRo
ZSBtaXJyb3JlZCBmb3JtIGJ5IGFkZGluZyAtMSBvciArMSBhY2NvcmRpbmcgdG8gdGhlIHBhcml0
eSBvZiBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gaW5kZXggJSAyID8gLTEg
OiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgc3RyZXRj
aHkgY2hhcmFjdGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0ZXIsIHdlIGRvbid0IGtub3cgaG93IHRv
IHN0cmV0Y2ggaXQuCisgICAgICAgIGlmICghc3RyZXRjaHlDaGFyYWN0ZXIpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgLy8gV2UgY29udmVydCB0aGUgbGlzdCBvZiBVbmljb2RlIGNo
YXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4KKyAgICAgICAgYXNzZW1ibHlEYXRh
LnRvcCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5
Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNp
b24gPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNo
YXJhY3Rlci0+ZXh0ZW5zaW9uQ2hhciwgZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEuYm90
dG9tID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlD
aGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRs
ZSA9IHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNl
KSA6IEdseXBoRGF0YSgpOworICAgIH0KKworICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhl
IG1heGltdW0gd2lkdGgsIHZlcmlmeSBlYWNoIGNvbXBvbmVudC4KKyAgICBpZiAobWF4aW11bUds
eXBoV2lkdGgpIHsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGlt
dW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wKSk7Cisg
ICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOworICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpKTsKKyAgICAgICAgKm1heGltdW1HbHlw
aFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChhc3NlbWJseURhdGEuYm90dG9tKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGgg
b3ZlcmxhcHMuCisgICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/CisgICAgICAgIGhl
aWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3ApICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlE
YXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKQorICAgICAg
ICA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5sZWZ0KSArIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNz
ZW1ibHlEYXRhLnJpZ2h0KTsKKyAgICBpZiAobWluU2l6ZSA+IHRhcmdldFNpemUpCisgICAgICAg
IHJldHVybjsKKworICAgIHNldEdseXBoQXNzZW1ibHkoYXNzZW1ibHlEYXRhKTsKK30KKworTGF5
b3V0UmVjdCBNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBQYWludEluZm8mIGluZm8sIGNvbnN0IEdseXBoRGF0YSYgZGF0YSwgY29uc3QgTGF5b3V0UG9p
bnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nIHRyaW0pCit7CisgICAgRmxvYXRSZWN0IGds
eXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgoZGF0YSk7CisKKyAgICBMYXlvdXRSZWN0IGdseXBo
UGFpbnRSZWN0KG9yaWdpbiwgTGF5b3V0U2l6ZShnbHlwaEJvdW5kcy54KCkgKyBnbHlwaEJvdW5k
cy53aWR0aCgpLCBnbHlwaEJvdW5kcy5oZWlnaHQoKSkpOworICAgIGdseXBoUGFpbnRSZWN0LnNl
dFkob3JpZ2luLnkoKSArIGdseXBoQm91bmRzLnkoKSk7CisKKyAgICAvLyBJbiBvcmRlciB0byBo
YXZlIGdseXBocyBmaXQgc251Z2x5IHdpdGggb25lIGFub3RoZXIgd2Ugc25hcCB0aGUgY29ubmVj
dGluZyBlZGdlcyB0byBwaXhlbCBib3VuZGFyaWVzCisgICAgLy8gYW5kIHRyaW0gb2ZmIG9uZSBw
aXhlbC4gVGhlIHBpeGVsIHRyaW0gaXMgdG8gYWNjb3VudCBmb3IgZm9udHMgdGhhdCBoYXZlIGVk
Z2UgcGl4ZWxzIHRoYXQgaGF2ZSBsZXNzCisgICAgLy8gdGhhbiBmdWxsIGNvdmVyYWdlLiBUaGVz
ZSBlZGdlIHBpeGVscyBjYW4gaW50cm9kdWNlIHNtYWxsIHNlYW1zIGJldHdlZW4gY29ubmVjdGVk
IGdseXBocy4KKyAgICBGbG9hdFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBzd2l0
Y2ggKHRyaW0pIHsKKyAgICBjYXNlIFRyaW1Ub3A6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNo
aWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGNsaXBC
b3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVHJpbUJvdHRvbToKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhZRWRn
ZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3Vu
ZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVHJpbVRvcEFuZEJvdHRvbToKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hp
ZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQ
YWludFJlY3Quc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFkoKS5mbG9vcigpIC0g
MSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKSk7
CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFko
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUxlZnQ6CisgICAgICAgIGdseXBoUGFp
bnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7CisgICAg
ICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVHJpbVJpZ2h0OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlm
dE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAg
Y2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUcmltTGVmdEFuZFJpZ2h0OgorICAgICAgICBnbHlwaFBhaW50
UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOworICAgICAg
ICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WCgpLmZs
b29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QueCgpKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QubWF4WCgpKTsKKyAgICB9CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZW5jbG9zaW5nIEludFJl
Y3QgYXZvaWRzIGFueSBwb3RlbnRpYWwgaXNzdWVzIGF0IGpvaW5lZCBlZGdlcy4KKyAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOworICAgIGlu
Zm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7CisKKyAgICBHbHlwaEJ1ZmZlciBidWZmZXI7
CisgICAgYnVmZmVyLmFkZChkYXRhLmdseXBoLCBkYXRhLmZvbnQsIGFkdmFuY2VXaWR0aEZvckds
eXBoKGRhdGEpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlLmZvbnRDYXNj
YWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKKworICAgIHJldHVybiBn
bHlwaFBhaW50UmVjdDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxXaXRoVmVydGljYWxF
eHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sKKyAgICBB
U1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFz
c2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAg
ICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgpKTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNw
YWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5n
LgorICAgIGlmIChmcm9tLnkoKSA9PSB0by55KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAg
ICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVu
c2lvbik7CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dz
IHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQorICAgIC8vIHJl
Z2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3
IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgorICAgIExheW91
dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VU
byhmcm9tLnkoKSk7CisgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8odG8ueSgpKTsKKyAg
ICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAgLy8gVHJpbW1pbmcgbWF5
IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIHRvcCBvZiB0aGUgZXh0ZW5kZXIgZ2x5
cGgsIHNvIHdlIG1vdmUgaXQgdXAgYnkgdHdvIHBpeGVscy4KKyAgICBmbG9hdCBvZmZzZXRUb0ds
eXBoVG9wID0gZ2x5cGhCb3VuZHMueSgpICsgMjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdp
biA9IExheW91dFBvaW50KGZyb20ueCgpLCBmcm9tLnkoKSAtIG9mZnNldFRvR2x5cGhUb3ApOwor
ICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7CisK
KyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4WSgpIDwgdG8ueSgpKSB7CisgICAg
ICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3Nl
bWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKKyAgICAgICAg
Z2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5o
ZWlnaHQoKSk7CisKKyAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250
IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8g
YW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2Fz
ZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3Bl
cmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3Qg
TGF5b3V0UG9pbnQmIHRvKQoreworICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NF
UlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJs
eS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsK
KworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVn
aW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRv
IHRoZQorICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5n
IGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBw
aW5nLgorICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBjbGlwQm91
bmRzLnNoaWZ0WEVkZ2VUbyhmcm9tLngoKSk7CisgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdl
VG8odG8ueCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAg
Ly8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2Yg
dGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KKyAg
ICBmbG9hdCBvZmZzZXRUb0dseXBoTGVmdCA9IC0yOworICAgIExheW91dFBvaW50IGdseXBoT3Jp
Z2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4o
ZnJvbS55KCksIHRvLnkoKSkpOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChm
cm9tLCBGbG9hdFNpemUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4
WCgpIDwgdG8ueCgpKSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlw
aChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltTGVm
dEFuZFJpZ2h0KTsKKyAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54KCkgKyBs
YXN0UGFpbnRlZEdseXBoUmVjdC53aWR0aCgpKTsKKworICAgICAgICAvLyBUaGVyZSdzIGEgY2hh
bmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGgg
aGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKKyAgICAgICAgLy8gd2l0aCB0
cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgorICAgICAgICBpZiAo
bGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQo
bV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS50
b3AuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b20uaXNWYWxpZCgpKTsK
KworICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ug
b2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMg
b2Ygb3VyIHBhaW50IGJveC4KKyAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWlu
dE9mZnNldDsKKyAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRv
cExlZnQpOworICAgIEZsb2F0UmVjdCB0b3BHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
YXNzZW1ibHkudG9wKTsKKyAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9yaWdpbihvcGVyYXRvclRv
cExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhCb3VuZHMueSgpKTsKKyAg
ICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywg
bV9hc3NlbWJseS50b3AsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKKworICAgIEZsb2F0
UmVjdCBib3R0b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9t
KTsKKyAgICBMYXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgp
LCBvcGVyYXRvclRvcExlZnQueSgpICsgc3RyZXRjaFNpemUoKSAtIChib3R0b21HbHlwaEJvdW5k
cy5oZWlnaHQoKSArIGJvdHRvbUdseXBoQm91bmRzLnkoKSkpOworICAgIExheW91dFJlY3QgYm90
dG9tR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmJv
dHRvbSwgYm90dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOworCisgICAgaWYgKG1fYXNzZW1ibHku
bWlkZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBi
ZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hpZnQg
aXQgaGFsZiB0aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgorICAgICAg
ICBGbG9hdFJlY3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5
Lm1pZGRsZSk7CisgICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9y
VG9wTGVmdC54KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7CisgICAgICAgIG1pZGRsZUdseXBoT3Jp
Z2luLm1vdmVCeShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0gdG9w
R2x5cGhQYWludFJlY3QubWF4WSgpKSAvIDIuMCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdp
bi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAyLjAp
KTsKKworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlw
aChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmlt
VG9wQW5kQm90dG9tKTsKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKHN0
eWxlLCBpbmZvLCB0b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBtaWRkbGVHbHlw
aFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4
dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNv
cm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCB0
b3BHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5t
aW5YTWluWUNvcm5lcigpKTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKK3sKKyAgICBBU1NFUlQoIW1faXNWZXJ0
aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAg
QVNTRVJUKG1fYXNzZW1ibHkubGVmdC5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5
LnJpZ2h0LmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBo
cyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFj
dGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0UG9pbnQgb3Bl
cmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVk
SW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhPcmln
aW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsK
KyAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGlu
Zm8sIG1fYXNzZW1ibHkubGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmltUmlnaHQpOworCisgICAg
RmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnJp
Z2h0KTsKKyAgICBMYXlvdXRQb2ludCByaWdodEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCkgKyBtX3dpZHRoIC0gcmlnaHRHbHlwaEJvdW5kcy53aWR0aCgpLCBvcGVyYXRvclRvcExlZnQu
eSgpICsgbV9hc2NlbnQpOworICAgIExheW91dFJlY3QgcmlnaHRHbHlwaFBhaW50UmVjdCA9IHBh
aW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkucmlnaHQsIHJpZ2h0R2x5cGhPcmlnaW4s
IFRyaW1MZWZ0KTsKKworICAgIExheW91dFBvaW50IGJhc2VsaW5lU2hpZnQoMCwgbV9hc2NlbnQp
OworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQ2Vu
dGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWlu
dCBleHRlbnRzLgorICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRv
clRvcExlZnQueCgpLCBsZWZ0R2x5cGhPcmlnaW4ueSgpKTsKKyAgICAgICAgbWlkZGxlR2x5cGhP
cmlnaW4ubW92ZUJ5KExheW91dFBvaW50KChyaWdodEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRH
bHlwaFBhaW50UmVjdC5tYXhYKCkpIC8gMi4wLCAwKSk7CisgICAgICAgIExheW91dFJlY3QgbWlk
ZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5Lm1p
ZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOworICAgICAgICBmaWxs
V2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgbGVmdEdseXBoUGFpbnRS
ZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0LCBtaWRkbGVHbHlwaFBhaW50UmVj
dC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7CisgICAgICAgIGZpbGxXaXRoSG9y
aXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5t
YXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5Y
TWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxX
aXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBpbmZvLCBsZWZ0R2x5cGhQYWludFJl
Y3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQsIHJpZ2h0R2x5cGhQYWludFJlY3Qu
bWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0ZGUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmgKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWF0aE9wZXJhdG9yX2gKKyNk
ZWZpbmUgTWF0aE9wZXJhdG9yX2gKKworI2lmIEVOQUJMRShNQVRITUwpCisjaW5jbHVkZSAiR2x5
cGhQYWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIk9wZW5UeXBlTWF0
aERhdGEuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlIDx1bmljb2RlL3V0eXBl
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFz
cyBNYXRoT3BlcmF0b3IgeworcHVibGljOgorICAgIE1hdGhPcGVyYXRvcigpOworICAgIHZvaWQg
c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKTsKKworICAg
IExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXRhbGljQ29y
cmVjdGlvbjsgfQorCisgICAgYm9vbCBpc1N0cmV0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
ZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQ7IH0KKyAgICB2b2lkIHVuc3RyZXRjaCgpIHsgbV9zdHJl
dGNoVHlwZSA9IFVuc3RyZXRjaGVkOyB9CisKKyAgICAvLyBGSVhNRTogQWxsIHRoZSBjb2RlIGJl
bG93IHNob3VsZCBiZSBwcml2YXRlIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBieSBSZW5k
ZXJNYXRoTUxPcGVyYXRvciAoaHR0cDovL3dlYmtpdC5vcmcvYi8xNTIyNDQpLgorCisgICAgc3Ry
dWN0IEdseXBoQXNzZW1ibHlEYXRhIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgR2x5
cGhEYXRhIHRvcDsKKyAgICAgICAgICAgIEdseXBoRGF0YSByaWdodDsKKyAgICAgICAgfTsKKyAg
ICAgICAgR2x5cGhEYXRhIGV4dGVuc2lvbjsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
R2x5cGhEYXRhIGJvdHRvbTsKKyAgICAgICAgICAgIEdseXBoRGF0YSBsZWZ0OworICAgICAgICB9
OworICAgICAgICBHbHlwaERhdGEgbWlkZGxlOworICAgIEdseXBoQXNzZW1ibHlEYXRhKCkKKyAg
ICA6IHRvcCgpLCBleHRlbnNpb24oKSwgYm90dG9tKCksIG1pZGRsZSgpIHsgfQorICAgIH07Cisg
ICAgZW51bSBTdHJldGNoVHlwZSB7CisgICAgICAgIFVuc3RyZXRjaGVkLAorICAgICAgICBTaXpl
VmFyaWFudCwKKyAgICAgICAgR2x5cGhBc3NlbWJseQorICAgIH07CisgICAgZW51bSBHbHlwaFBh
aW50VHJpbW1pbmcgeworICAgICAgICBUcmltVG9wLAorICAgICAgICBUcmltQm90dG9tLAorICAg
ICAgICBUcmltVG9wQW5kQm90dG9tLAorICAgICAgICBUcmltTGVmdCwKKyAgICAgICAgVHJpbVJp
Z2h0LAorICAgICAgICBUcmltTGVmdEFuZFJpZ2h0CisgICAgfTsKKworICAgIExheW91dFVuaXQg
c3RyZXRjaFNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzVmVydGljYWwgPyBtX2FzY2VudCArIG1f
ZGVzY2VudCA6IG1fd2lkdGg7IH07CisgICAgYm9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVy
U3R5bGUmLCBHbHlwaERhdGEmKSBjb25zdDsKKyAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0
IEdseXBoRGF0YSYpOworICAgIHZvaWQgc2V0R2x5cGhBc3NlbWJseShjb25zdCBNYXRoT3BlcmF0
b3I6OkdseXBoQXNzZW1ibHlEYXRhJik7CisgICAgdm9pZCBmaW5kRGlzcGxheVN0eWxlTGFyZ2VP
cGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHZvaWQgZmluZFN0cmV0Y2h5RGF0YShj
b25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0
YXJnZXRTaXplID0gMCk7CisgICAgYm9vbCBnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0
PiYsIEdseXBoQXNzZW1ibHlEYXRhJik7CisKKyAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoY29u
c3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBHbHlwaERhdGEmLCBjb25zdCBMYXlv
dXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcpOworICAgIHZvaWQgZmlsbFdpdGhW
ZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7CisgICAgdm9pZCBm
aWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOwor
ICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRIb3Jpem9udGFs
R2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CisKKyAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0ZXI7CisgICAgYm9vbCBtX2lzVmVy
dGljYWw7CisgICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlwZTsKKyAgICB1bmlvbiB7CisgICAg
ICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7CisgICAgICAgIEdseXBoQXNzZW1ibHlEYXRhIG1fYXNz
ZW1ibHk7CisgICAgfTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisgICAgTGF5b3V0VW5pdCBt
X2FzY2VudDsKKyAgICBMYXlvdXRVbml0IG1fZGVzY2VudDsKKyAgICBMYXlvdXRVbml0IG1faXRh
bGljQ29ycmVjdGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisjZW5k
aWYgLy8gTWF0aE9wZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggOWNkMjE1MC4uYmYzNDc4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTQ1LDMzICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKIHVzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKIAotLy8gRklYTUU6IFRoZSBP
cGVuVHlwZSBNQVRIIHRhYmxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgc2hvdWxkIG92ZXJy
aWRlIHRoaXMgdGFibGUgKGh0dHA6Ly93a2J1Zy8xMjIyOTcpLgotc3RydWN0IFN0cmV0Y2h5Q2hh
cmFjdGVyIHsKLSAgICBVQ2hhciBjaGFyYWN0ZXI7Ci0gICAgVUNoYXIgdG9wQ2hhcjsKLSAgICBV
Q2hhciBleHRlbnNpb25DaGFyOwotICAgIFVDaGFyIGJvdHRvbUNoYXI7Ci0gICAgVUNoYXIgbWlk
ZGxlQ2hhcjsKLX07Ci0vLyBUaGUgZmlyc3QgbGVmdFJpZ2h0UGFpcnNDb3VudCBwYWlycyBjb3Jy
ZXNwb25kIHRvIGxlZnQvcmlnaHQgZmVuY2VzIHRoYXQgY2FuIGVhc2lseSBiZSBtaXJyb3JlZCBp
biBSVEwuCi1zdGF0aWMgY29uc3Qgc2hvcnQgbGVmdFJpZ2h0UGFpcnNDb3VudCA9IDU7Ci1zdGF0
aWMgY29uc3QgU3RyZXRjaHlDaGFyYWN0ZXIgc3RyZXRjaHlDaGFyYWN0ZXJzWzE0XSA9IHsKLSAg
ICB7IDB4MjggICwgMHgyMzliLCAweDIzOWMsIDB4MjM5ZCwgMHgwICAgIH0sIC8vIGxlZnQgcGFy
ZW50aGVzaXMKLSAgICB7IDB4MjkgICwgMHgyMzllLCAweDIzOWYsIDB4MjNhMCwgMHgwICAgIH0s
IC8vIHJpZ2h0IHBhcmVudGhlc2lzCi0gICAgeyAweDViICAsIDB4MjNhMSwgMHgyM2EyLCAweDIz
YTMsIDB4MCAgICB9LCAvLyBsZWZ0IHNxdWFyZSBicmFja2V0Ci0gICAgeyAweDVkICAsIDB4MjNh
NCwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBzcXVhcmUgYnJhY2tldAotICAg
IHsgMHg3YiAgLCAweDIzYTcsIDB4MjNhYSwgMHgyM2E5LCAweDIzYTggfSwgLy8gbGVmdCBjdXJs
eSBicmFja2V0Ci0gICAgeyAweDdkICAsIDB4MjNhYiwgMHgyM2FhLCAweDIzYWQsIDB4MjNhYyB9
LCAvLyByaWdodCBjdXJseSBicmFja2V0Ci0gICAgeyAweDIzMDgsIDB4MjNhMSwgMHgyM2EyLCAw
eDIzYTIsIDB4MCAgICB9LCAvLyBsZWZ0IGNlaWxpbmcKLSAgICB7IDB4MjMwOSwgMHgyM2E0LCAw
eDIzYTUsIDB4MjNhNSwgMHgwICAgIH0sIC8vIHJpZ2h0IGNlaWxpbmcKLSAgICB7IDB4MjMwYSwg
MHgyM2EyLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgZmxvb3IKLSAgICB7IDB4
MjMwYiwgMHgyM2E1LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IGZsb29yCi0g
ICAgeyAweDdjICAsIDB4N2MsICAgMHg3YywgICAweDdjLCAgIDB4MCAgICB9LCAvLyB2ZXJ0aWNh
bCBiYXIKLSAgICB7IDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgwICAgIH0sIC8v
IGRvdWJsZSB2ZXJ0aWNhbCBsaW5lCi0gICAgeyAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDIy
MjUsIDB4MCAgICB9LCAvLyBwYXJhbGxlbCB0bwotICAgIHsgMHgyMjJiLCAweDIzMjAsIDB4MjNh
ZSwgMHgyMzIxLCAweDAgICAgfSAvLyBpbnRlZ3JhbCBzaWduCi19OwotCiBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTWF0aE1MRWxlbWVudCYgZWxlbWVudCwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKICAgICA6IFJlbmRlck1hdGhNTFRva2Vu
KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNl
bGluZSgwKQpAQCAtMjk0LDggKzI2Nyw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNh
bCk7CiAgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0
aCA9IGdldEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5
cGgoYmFzZUdseXBoKSA6IDA7CisgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhP
cGVyYXRvci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGJhc2VHbHlwaCkgOiAwOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CiAgICAgICAg
IGlmIChtYXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCiAgICAgICAgICAgICBtYXhp
bXVtR2x5cGhXaWR0aCA9IHN0cmV0Y2hTaXplKCk7CkBAIC0zMDUsMTIgKzI3OSwxMiBAQCB2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAg
ICAgfQogICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKSB7CiAgICAgICAg
IC8vIExhcmdlIG9wZXJhdG9ycyBpbiBTVElYIFdvcmQgaGF2ZSBpbmNvcnJlY3QgYWR2YW5jZSB3
aWR0aCwgY2F1c2luZyBtaXNwbGFjZW1lbnQgb2Ygc3VwZXJzY3JpcHQsIHNvIHdlIHVzZSB0aGUg
Z2x5cGggYm91bmQgaW5zdGVhZCAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0aXhmb250cy90
cmFja2luZy80OS8pLgotICAgICAgICBmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcigpOwot
ICAgICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFudCkKLSAgICAgICAgICAgIG1h
eGltdW1HbHlwaFdpZHRoID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KS53aWR0aCgpOworICAg
ICAgICBtX21hdGhPcGVyYXRvci5maW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgp
KTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJh
dG9yOjpTaXplVmFyaWFudCkKKyAgICAgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0gYm91bmRz
Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KS53aWR0aCgpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAoZS5nLiB0aGUgb25lIGZvciAiRlJBQ1RJ
T04gU0xBU0giIGluIHRoZSBTVElYIE1hdGggZm9udCBvciBsYXJnZSBvcGVyYXRvcnMpIGhhdmUg
YSB3aWR0aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdodCwgcmVzdWx0aW5nIGluIGxhcmdlIGdh
cHMgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYpLgotICAg
ICAgICBmaW5kU3RyZXRjaHlEYXRhKCZtYXhpbXVtR2x5cGhXaWR0aCk7CisgICAgICAgIG1fbWF0
aE9wZXJhdG9yLmZpbmRTdHJldGNoeURhdGEoc3R5bGUoKSwgJm1heGltdW1HbHlwaFdpZHRoKTsK
ICAgICB9CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgbWF4aW11bUdseXBoV2lkdGggKyBtX3RyYWls
aW5nU3BhY2U7CiB9CkBAIC0zNzQsMjQ1ICszNDgsMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWwKICAgICB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKIH0KIAotYm9vbCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhE
YXRhJiBiYXNlR2x5cGgpIGNvbnN0Ci17Ci0gICAgYmFzZUdseXBoID0gc3R5bGUuZm9udENhc2Nh
ZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlLmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGJhc2VHbHlwaC5pc1ZhbGlkKCkgJiYgYmFz
ZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLX0KLQot
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRh
JiBzaXplVmFyaWFudCkKLXsKLSAgICBBU1NFUlQoc2l6ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNp
emVWYXJpYW50LmZvbnQtPm1hdGhEYXRhKCkpOwotICAgIG1fc3RyZXRjaFR5cGUgPSBTaXplVmFy
aWFudDsKLSAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKLX0KLQotdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNz
ZW1ibHlEYXRhKQotewotICAgIG1fc3RyZXRjaFR5cGUgPSBHbHlwaEFzc2VtYmx5OwotICAgIG1f
YXNzZW1ibHkgPSBhc3NlbWJseURhdGE7Ci19Ci0KLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1i
bHlQYXJ0PiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKSBj
b25zdAotewotICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRoIHRhYmxl
IGlzIGEgYml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkgdGhl
IFJlbmRlck1hdGhNTE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBmYWxsYmFjayBpbiBhIHJl
YXNvbmFibGUgd2F5LgotICAgIC8vIEZJWE1FOiBSZW5kZXJNYXRoTUxPcGVyYXRvciBzaG91bGQg
c3VwcG9ydCB0aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMDMyNykuCi0gICAgLy8gV2UgdXNlIHRoZSBhcHByb2FjaCBvZiB0
aGUgY29weUNvbXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9tYXRoamF4L01hdGhKYXgt
ZGV2L2Jsb2IvbWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRpbC5weQotCi0gICAgLy8g
V2UgY291bnQgdGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2VzLgotICAgIGludCBub25F
eHRlbmRlckNvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7
Ci0gICAgICAgIGlmICghcGFydC5pc0V4dGVuZGVyKQotICAgICAgICAgICAgbm9uRXh0ZW5kZXJD
b3VudCsrOwotICAgIH0KLSAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+IDMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVyZSBhcmUgdG9vIG1hbnkg
cGllY2VzLgotCi0gICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBvZiBwaWVjZXMgZnJvbSBs
ZWZ0IHRvIHJpZ2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQgZnJvbSBib3R0b20gdG8g
dG9wIGZvciB2ZXJ0aWNhbCBvcGVyYXRvcnMuCi0gICAgZW51bSBQYXJ0VHlwZSB7Ci0gICAgICAg
IFN0YXJ0LAotICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSwKLSAgICAgICAg
TWlkZGxlLAotICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQsCi0gICAgICAgIEVu
ZCwKLSAgICAgICAgTm9uZQotICAgIH07Ci0gICAgUGFydFR5cGUgZXhwZWN0ZWRQYXJ0VHlwZSA9
IFN0YXJ0OwotICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOwotICAgIGFzc2Vt
Ymx5RGF0YS5taWRkbGUuZ2x5cGggPSAwOwotICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5
UGFydHMpIHsKLSAgICAgICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7Ci0gICAgICAgICAg
ICAvLyBJZiB3ZSBvbmx5IGhhdmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVuIHdlIHNr
aXAgdGhlIG1pZGRsZSBnbHlwaC4KLSAgICAgICAgICAgIGlmIChleHBlY3RlZFBhcnRUeXBlID09
IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlKQotICAgICAgICAgICAgICAgIGV4cGVjdGVk
UGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICBlbHNl
IGlmIChleHBlY3RlZFBhcnRUeXBlID09IE1pZGRsZSkKLSAgICAgICAgICAgICAgICBleHBlY3Rl
ZFBhcnRUeXBlID0gRW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwYXJ0LmlzRXh0ZW5kZXIp
IHsKLSAgICAgICAgICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKLSAgICAg
ICAgICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlwaDsgLy8g
V2UgY29weSB0aGUgZXh0ZW5kZXIgcGFydC4KLSAgICAgICAgICAgIGVsc2UgaWYgKGFzc2VtYmx5
RGF0YS5leHRlbnNpb24uZ2x5cGggIT0gcGFydC5nbHlwaCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhhcyBkaWZm
ZXJlbnQgZXh0ZW5kZXJzLgotCi0gICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUp
IHsKLSAgICAgICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3Jl
IHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUg
PSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGNhc2UgTWlkZGxlOgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9y
ZSB0aGUgbWlkZGxlIHBhcnQuCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4
dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGNhc2UgRW5kOgotICAgICAgICAgICAgY2FzZSBOb25lOgotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQgZXh0ZW5k
ZXIuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FzZSBFeHRl
bmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKLSAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3
ZWVuTWlkZGxlQW5kRW5kOgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBtdWx0aXBsZSBj
b25zZWN1dGl2ZSBleHRlbmRlcnMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsK
LSAgICAgICAgY2FzZSBTdGFydDoKLSAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxlZnQvYm90
dG9tIHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0gcGFydC5n
bHlwaDsKLSAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5TdGFy
dEFuZE1pZGRsZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIEV4dGVuZGVy
QmV0d2VlblN0YXJ0QW5kTWlkZGxlOgotICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAg
IC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRhLm1p
ZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0g
RXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgotICAgICAgICBjYXNlIEVuZDoK
LSAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgotICAgICAgICAgICAg
YXNzZW1ibHlEYXRhLnRvcC5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3Rl
ZFBhcnRUeXBlID0gTm9uZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIE5v
bmU6Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4
cGVjdGVkIG5vbi1leHRlbmRlciBwYXJ0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgYWx3YXlz
IGFzc3VtZSB0aGF0IHdlIGhhdmUgYW4gZXh0ZW5zaW9uIGdseXBoLgotCi0gICAgLy8gSWYgd2Ug
ZG9uJ3QgaGF2ZSB0b3AvYm90dG9tIGdseXBocywgd2UgdXNlIHRoZSBleHRlbnNpb24gZ2x5cGgu
Ci0gICAgaWYgKCFhc3NlbWJseURhdGEudG9wLmdseXBoKQotICAgICAgICBhc3NlbWJseURhdGEu
dG9wLmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKLSAgICBpZiAoIWFzc2Vt
Ymx5RGF0YS5ib3R0b20uZ2x5cGgpCi0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20uZ2x5cGgg
PSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOwotCi0gICAgYXNzZW1ibHlEYXRhLnRvcC5m
b250ID0gJnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgIGFzc2VtYmx5
RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0YS50b3AuZm9udDsKLSAgICBhc3NlbWJs
eURhdGEuYm90dG9tLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZvbnQ7Ci0gICAgYXNzZW1ibHlE
YXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA/IGFzc2VtYmx5RGF0
YS50b3AuZm9udCA6IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKQotewotICAg
IEFTU0VSVChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7
Ci0KLSAgICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxl
KCksIGJhc2VHbHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKLSAgICBWZWN0b3I8T3Bl
blR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotCi0gICAgLy8gVGhl
IHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxs
LCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6
ZSBvZiB0aGUgYmFzZSBnbHlwaC4KLSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQg
PSBzdGQ6Om1heChiYXNlR2x5cGguZm9udC0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBo
KS5oZWlnaHQoKSAqIHNxcnRPZlR3b0Zsb2F0LCBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+
Z2V0TWF0aENvbnN0YW50KCpiYXNlR2x5cGguZm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxh
eU9wZXJhdG9yTWluSGVpZ2h0KSk7Ci0KLSAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+
Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3Nl
bWJseVBhcnRzKTsKLQotICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRo
YXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBh
bmQgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCi0gICAgZm9yIChh
dXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgewotICAgICAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7Ci0gICAgICAgIHNldFNpemVWYXJp
YW50KGdseXBoRGF0YSk7Ci0gICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5m
b250LT5tYXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5
cGhEYXRhLmdseXBoKTsKLSAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0g
ZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKGZsb2F0KiBtYXhp
bXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQotewotICAgIEFTU0VSVCghbWF4
aW11bUdseXBoV2lkdGggfHwgbV9pc1ZlcnRpY2FsKTsKLQotICAgIEdseXBoRGF0YSBiYXNlR2x5
cGg7Ci0gICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAgLy8g
V2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAg
ICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VH
bHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOwotICAgICAgICBpZiAodGFy
Z2V0U2l6ZSA8PSBiYXNlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBH
bHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7Ci0gICAgaWYgKGJhc2VHbHlwaC5mb250LT5t
YXRoRGF0YSgpKSB7Ci0gICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwotICAgICAg
ICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwot
ICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VH
bHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwot
ICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCi0gICAgICAgIGZvciAoYXV0
byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgICAgIEdseXBoRGF0YSBn
bHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKLSAgICAgICAgICAgIGlmICht
YXhpbXVtR2x5cGhXaWR0aCkKLSAgICAgICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBz
dGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0
YSkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQo
Z2x5cGhEYXRhKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8g
aGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0
YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
V2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgotICAgICAgICBpZiAoIWdldEds
eXBoQXNzZW1ibHlGYWxsQmFjayhhc3NlbWJseVBhcnRzLCBhc3NlbWJseURhdGEpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9pc1ZlcnRpY2FsKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90IGhh
dmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0cnVj
dGlvbnMuCi0gICAgICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyKiBzdHJldGNoeUNoYXJhY3Rl
ciA9IG51bGxwdHI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heEluZGV4ID0gV1RGX0FSUkFZ
X0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBtYXhJbmRleDsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKHN0cmV0
Y2h5Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IG1fdGV4dENvbnRlbnQpIHsKLSAgICAg
ICAgICAgICAgICBzdHJldGNoeUNoYXJhY3RlciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhd
OwotICAgICAgICAgICAgICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
JiYgaW5kZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50ICogMikgewotICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24gd2Ugc2VsZWN0IHRoZSBt
aXJyb3JlZCBmb3JtIGJ5IGFkZGluZyAtMSBvciArMSBhY2NvcmRpbmcgdG8gdGhlIHBhcml0eSBv
ZiBpbmRleC4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gaW5kZXggJSAyID8gLTEgOiAx
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgc3RyZXRjaHkg
Y2hhcmFjdGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0ZXIsIHdlIGRvbid0IGtub3cgaG93IHRvIHN0
cmV0Y2ggaXQuCi0gICAgICAgIGlmICghc3RyZXRjaHlDaGFyYWN0ZXIpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgLy8gV2UgY29udmVydCB0aGUgbGlzdCBvZiBVbmljb2RlIGNoYXJh
Y3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4KLSAgICAgICAgYXNzZW1ibHlEYXRhLnRv
cCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlD
aGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lv
biA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlD
aGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmJv
dHRvbSA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRj
aHlDaGFyYWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLm1p
ZGRsZSA9IHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwg
ZmFsc2UpIDogR2x5cGhEYXRhKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIG1lYXN1cmlu
ZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgotICAgIGlmIChtYXhp
bXVtR2x5cGhXaWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgq
bWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3Ap
KTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdp
ZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuZXh0ZW5zaW9uKSk7Ci0gICAg
ICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2
YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkpOwotICAgICAgICAqbWF4aW11
bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b20pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBhdm9pZCBn
bHlwaCBvdmVybGFwcy4KLSAgICBmbG9hdCBtaW5TaXplID0gbV9pc1ZlcnRpY2FsID8KLSAgICAg
ICAgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkgKyBoZWlnaHRGb3JHbHlwaChhc3Nl
bWJseURhdGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b20pCi0g
ICAgICAgIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmxlZnQpICsgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNlV2lkdGhGb3JHbHlw
aChhc3NlbWJseURhdGEucmlnaHQpOwotICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc2V0R2x5cGhBc3NlbWJseShhc3NlbWJseURhdGEpOwotfQot
CiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiB7CiAgICAgQVNTRVJU
KGZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fc3RyZXRjaFR5cGUgPSBVbnN0cmV0Y2hlZDsKLSAgICBtX2l0YWxpY0NvcnJlY3Rp
b24gPSAwOworICAgIG1fbWF0aE9wZXJhdG9yLnVuc3RyZXRjaCgpOworICAgIG1fbWF0aE9wZXJh
dG9yLm1faXRhbGljQ29ycmVjdGlvbiA9IDA7CiAgICAgLy8gV2UgYWRkIHNwYWNpbmcgYXJvdW5k
IHRoZSBvcGVyYXRvci4KICAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJlIGFkZGVk
IHRvIHRoZSB3aG9sZSBlbWJlbGxpc2hlZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNDgzMSkuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNo
b3VsZCBvbmx5IGJlIGFkZGVkIGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDov
L3d3dy53My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KQEAg
LTYyNiwyNSArMzY5LDI2IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxl
KCkKICAgICBpZiAoIXNob3VsZEFsbG93U3RyZXRjaGluZygpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGlj
YWwpOwogICAgIGlmIChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5
bGUoKSkKLSAgICAgICAgZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKTsKKyAgICAgICAg
bV9tYXRoT3BlcmF0b3IuZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGZpbmRTdHJldGNoeURhdGEobnVsbHB0ciwgc3RyZXRjaFNpemUo
KSk7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFVuc3RyZXRjaGVkKQorICAgICAgICBt
X21hdGhPcGVyYXRvci5maW5kU3RyZXRjaHlEYXRhKHN0eWxlKCksIG51bGxwdHIsIHN0cmV0Y2hT
aXplKCkpOworICAgICAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX3N0cmV0
Y2hUeXBlID09IFNpemVWYXJpYW50KSB7CisgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX21hdGhP
cGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsKICAg
ICAgICAgLy8gV2UgcmVzaXplIHRoZSBvcGVyYXRvciB0byBtYXRjaCB0aGUgb25lIG9mIHRoZSBz
aXplIHZhcmlhbnQuCiAgICAgICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgp
KSB7CiAgICAgICAgICAgICAvLyBUaGUgc3RyZXRjaCBzaXplIGlzIGFjdHVhbGx5IG5vdCBpbnZv
bHZlZCBpbiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBzaXplIHZhcmlhbnQgaW4gZmluZERpc3BsYXlT
dHlsZUxhcmdlT3BlcmF0b3IuCiAgICAgICAgICAgICAvLyBXZSBzaW1wbHkgdXNlIHRoZSBoZWln
aHQgYW5kIGRlcHRoIG9mIHRoZSBzZWxlY3RlZCBzaXplIHZhcmlhbnQgZ2x5cGguCi0gICAgICAg
ICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOwor
ICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRo
T3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmUgPSAtZ2x5cGhCb3VuZHMueSgpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxv
d0Jhc2VsaW5lID0gZ2x5cGhCb3VuZHMubWF4WSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gV2UgcmVzY2FsZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBwcm9wb3J0aW9uYXRlbHku
Ci0gICAgICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckdseXBoKG1fdmFyaWFu
dCk7CisgICAgICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckdseXBoKG1fbWF0
aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBmbG9hdCBzaXplID0gc3RyZXRjaFNp
emUoKTsKICAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9IHNpemUgPiAwID8gdmFyaWFudFNpemUg
LyBzaXplIDogMS4wOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSAq
PSBhc3BlY3Q7CkBAIC02NTMsMzAgKzM5NywzMCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp1cGRhdGVTdHlsZSgpCiAgICAgfQogCiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKLSAgICAg
ICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgICAgIEZsb2F0
UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fdmFyaWFudCk7CisgICAgICAgIGlm
IChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlh
bnQpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRB
Ym92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKLSAgICAgICAgICAgIG1fc3Ry
ZXRjaFdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsKLSAgICAgICAgfSBl
bHNlIGlmIChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpIHsKKyAgICAgICAgICAgIG1f
c3RyZXRjaFdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJp
YW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09
IE1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGds
eXBoQm91bmRzOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDA7
CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSAwOwogCi0gICAgICAg
ICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkubGVmdCk7CisgICAg
ICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNz
ZW1ibHkubGVmdCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBo
Qm91bmRzLnkoKSk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBz
dGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91
bmRzLm1heFkoKSk7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9hc3NlbWJseS5yaWdodCk7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkucmlnaHQpOwogICAgICAgICAgICAgbV9zdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJl
dGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVw
dGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKKyAgICAgICAg
ICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJs
eS5leHRlbnNpb24pOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9
IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlw
aEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJv
dW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fz
c2VtYmx5Lm1pZGRsZSk7CisgICAgICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJs
eS5taWRkbGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3Vu
ZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZSk7CiAgICAgICAgICAg
ICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAg
ICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVu
aXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAg
ICAgICAgICAgIH0KQEAgLTY4NiwyMzcgKzQzMCw1NCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjp1cGRhdGVTdHlsZSgpCiAKIE9wdGlvbmFsPGludD4gUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKIHsKLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBV
bnN0cmV0Y2hlZCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPGludD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7CiAg
ICAgcmV0dXJuIFJlbmRlck1hdGhNTFRva2VuOjpmaXJzdExpbmVCYXNlbGluZSgpOwogfQogCiB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1
dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAobV9zdHJldGNoVHlw
ZSAhPSBVbnN0cmV0Y2hlZCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkK
ICAgICAgICAgbG9naWNhbEhlaWdodCA9IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKyBt
X3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVlcyk7CiB9CiAK
LUxheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEds
eXBoUGFpbnRUcmltbWluZyB0cmltKQotewotICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJv
dW5kc0ZvckdseXBoKGRhdGEpOwotCi0gICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmln
aW4sIExheW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5
cGhCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkg
KyBnbHlwaEJvdW5kcy55KCkpOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0
IHNudWdseSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8g
cGl4ZWwgYm91bmRhcmllcwotICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhl
bCB0cmltIGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0
IGhhdmUgbGVzcwotICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMg
Y2FuIGludHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCi0gICAg
RmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgc3dpdGNoICh0cmltKSB7Ci0g
ICAgY2FzZSBUcmltVG9wOgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5
cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1C
b3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50
UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRy
aW1Ub3BBbmRCb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlw
aFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0
TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBj
bGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBjbGlw
Qm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0OgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhF
ZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOwotICAgICAgICBjbGlwQm91bmRz
LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRyaW1SaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGds
eXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hp
ZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVHJpbUxlZnRBbmRSaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRn
ZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgZ2x5cGhQYWludFJl
Y3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0g
ICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7Ci0gICAg
ICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0g
ICAgfQotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkg
cG90ZW50aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCi0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5j
bGlwKGNsaXBCb3VuZHMpOwotCi0gICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZlci5h
ZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7Ci0g
ICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRh
LmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKLQotICAgIHJldHVybiBnbHlwaFBhaW50UmVj
dDsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVu
c2lvbkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0
IExheW91dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NF
UlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJs
eS5leHRlbnNpb24uaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgpKTsK
LQotICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgIGlmIChmcm9tLnkoKSA9PSB0by55KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihpbmZvLmNvbnRleHQoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3Vu
ZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7Ci0KLSAgICAvLyBDbGlwcGluZyB0aGUg
ZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRl
ciBnbHlwaCBpbnRvIHRoZQotICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVz
IGxhdGVyIGNsaXBwaW5nLgotICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsK
LSAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhmcm9tLnkoKSk7Ci0gICAgY2xpcEJvdW5kcy5z
aGlmdE1heFlFZGdlVG8odG8ueSgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3Vu
ZHMpOwotCi0gICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20g
dGhlIHRvcCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgdXAgYnkgdHdvIHBp
eGVscy4KLSAgICBmbG9hdCBvZmZzZXRUb0dseXBoVG9wID0gZ2x5cGhCb3VuZHMueSgpICsgMjsK
LSAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpLCBmcm9t
LnkoKSAtIG9mZnNldFRvR2x5cGhUb3ApOwotICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBo
UmVjdChmcm9tLCBGbG9hdFNpemUoKSk7Ci0KLSAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJl
Y3QubWF4WSgpIDwgdG8ueSgpKSB7Ci0gICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFp
bnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmlnaW4sIFRyaW1Ub3BB
bmRCb3R0b20pOwotICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGdseXBoT3JpZ2luLnkoKSArIGxh
c3RQYWludGVkR2x5cGhSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBUaGVyZSdzIGEgY2hh
bmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGgg
aGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAgICAgLy8gd2l0aCB0
cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgotICAgICAgICBpZiAo
bGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRl
bnNpb25HbHlwaChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25z
dCBMYXlvdXRQb2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOwotICAgIEFT
U0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX2Fzc2Vt
Ymx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChmcm9tLngoKSA8PSB0by54KCkp
OwotCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBleHRlbnNpb24gZ2x5cGgs
IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgaWYgKGZyb20ueCgpID09IHRvLngo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLQotICAgIC8vIENsaXBwaW5nIHRoZSBleHRlbmRlciBy
ZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90dG9tIGV4dGVuZGVyIGdseXBoIGlu
dG8gdGhlCi0gICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9tIGdseXBoIHdpdGhvdXQgd29ycnlp
bmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5kIHNpbXBsaWZpZXMgbGF0ZXIgY2xp
cHBpbmcuCi0gICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0OwotICAgIGNsaXBC
b3VuZHMuc2hpZnRYRWRnZVRvKGZyb20ueCgpKTsKLSAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVk
Z2VUbyh0by54KCkpOwotICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7Ci0KLSAg
ICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBwaXhlbHMgZnJvbSB0aGUgbGVmdCBv
ZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgbGVmdCBieSB0d28gcGl4ZWxzLgot
ICAgIGZsb2F0IG9mZnNldFRvR2x5cGhMZWZ0ID0gLTI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5cGhP
cmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSArIG9mZnNldFRvR2x5cGhMZWZ0LCBzdGQ6Om1p
bihmcm9tLnkoKSwgdG8ueSgpKSArIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOwotICAg
IEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7Ci0KLSAg
ICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4WCgpIDwgdG8ueCgpKSB7Ci0gICAgICAg
IGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmV4dGVu
c2lvbiwgZ2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOwotICAgICAgICBnbHlwaE9yaWdp
bi5zZXRYKGdseXBoT3JpZ2luLngoKSArIGxhc3RQYWludGVkR2x5cGhSZWN0LndpZHRoKCkpOwot
Ci0gICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNt
YWxsIGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJl
Y3RhbmdsZQotICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBk
cmF3IG5vdGhpbmcuCi0gICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0
b3I6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQogewogICAgIFJlbmRlck1hdGhNTFRva2VuOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAK
LSAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSB8fCBtX3N0cmV0Y2hUeXBlID09IFVuc3RyZXRjaGVkKQorICAgIGlmIChpbmZvLmNvbnRleHQo
KS5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8ICFtX21hdGhPcGVyYXRvci5p
c1N0cmV0Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwogICAgIGluZm8uY29udGV4dCgpLnNl
dEZpbGxDb2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSk7CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFudCkgewotICAgICAgICBB
U1NFUlQobV92YXJpYW50LmlzVmFsaWQoKSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3Ry
ZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFyaWFudCkgeworICAgICAgICBBU1NFUlQo
bV9tYXRoT3BlcmF0b3IubV92YXJpYW50LmlzVmFsaWQoKSk7CiAgICAgICAgIEdseXBoQnVmZmVy
IGJ1ZmZlcjsKLSAgICAgICAgYnVmZmVyLmFkZChtX3ZhcmlhbnQuZ2x5cGgsIG1fdmFyaWFudC5m
b250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX3ZhcmlhbnQpKTsKKyAgICAgICAgYnVmZmVyLmFk
ZChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZ2x5cGgsIG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFu
dC5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpKTsK
ICAgICAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRz
ID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAgTGF5
b3V0UG9pbnQgb3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BM
ZWZ0LnkoKSAtIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dCgpLmRyYXdH
bHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV92YXJpYW50LmZvbnQsIGJ1ZmZlciwgMCwg
MSwgb3BlcmF0b3JPcmlnaW4pOworICAgICAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0
eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5mb250LCBidWZm
ZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChtX2lzVmVydGljYWwpCi0gICAgICAgIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGlu
Zm8sIHBhaW50T2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50SG9yaXpvbnRhbEdseXBo
QXNzZW1ibHkoaW5mbywgcGFpbnRPZmZzZXQpOwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKLSAg
ICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9h
c3NlbWJseS50b3AuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b20uaXNW
YWxpZCgpKTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQg
dGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0
aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KKyAgICBtX21hdGhPcGVyYXRvci5tX2FzY2VudCA9
IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmU7CisgICAgbV9tYXRoT3BlcmF0b3IubV9kZXNj
ZW50ID0gbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1f
d2lkdGggPSBsb2dpY2FsV2lkdGgoKTsKICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQg
PSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5
bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxp
bmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0
b3JUb3BMZWZ0KTsKLSAgICBGbG9hdFJlY3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX2Fzc2VtYmx5LnRvcCk7Ci0gICAgTGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0
b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7
Ci0gICAgTGF5b3V0UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9h
c3NlbWJseS50b3AsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQotICAgIEZsb2F0UmVj
dCBib3R0b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9tKTsK
LSAgICBMYXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBv
cGVyYXRvclRvcExlZnQueSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAoYm90dG9tR2x5cGhCb3VuZHMu
aGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKLSAgICBMYXlvdXRSZWN0IGJvdHRv
bUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbSwgYm90
dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOwotCi0gICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlz
VmFsaWQoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRo
ZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hpZnQgaXQgaGFsZiB0
aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgotICAgICAgICBGbG9hdFJl
Y3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSk7
Ci0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVC
eShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0gdG9wR2x5cGhQYWlu
dFJlY3QubWF4WSgpKSAvIDIuMCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnko
TGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAyLjApKTsKLQotICAg
ICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBt
X2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0b20pOwot
ICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgdG9wR2x5cGhQYWlu
dFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3Ju
ZXIoKSk7Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRk
bGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5t
aW5YTWluWUNvcm5lcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4
dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJv
dHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotfQotCi12b2lkIFJlbmRlck1h
dGhNTE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIEFTU0VSVCghbV9pc1Zl
cnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAg
ICBBU1NFUlQobV9hc3NlbWJseS5sZWZ0LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1i
bHkucmlnaHQuaXNWYWxpZCgpKTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5
cGhzIHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4
YWN0bHkgd2l0aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KLSAgICBMYXlvdXRQb2ludCBv
cGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7Ci0gICAgb3BlcmF0b3JU
b3BMZWZ0Lm1vdmUobV9sZWFkaW5nU3BhY2UsIDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNl
aWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7Ci0gICAgTGF5b3V0UG9pbnQgbGVmdEdseXBo
T3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVj
dCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5sZWZ0LCBsZWZ0R2x5cGhPcmlnaW4sIFRy
aW1SaWdodCk7Ci0KLSAgICBGbG9hdFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fYXNzZW1ibHkucmlnaHQpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmlnaW4o
b3BlcmF0b3JUb3BMZWZ0LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91bmRzLndp
ZHRoKCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5l
KTsKLSAgICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8s
IG1fYXNzZW1ibHkucmlnaHQsIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKLQotICAgIGlm
IChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gQ2VudGVyIHRoZSBn
bHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRz
LgotICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQu
eCgpLCBsZWZ0R2x5cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92
ZUJ5KExheW91dFBvaW50KChyaWdodEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRHbHlwaFBhaW50
UmVjdC5tYXhYKCkpIC8gMi4wLCAwKSk7Ci0gICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQ
YWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlw
aE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7Ci0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCBt
aWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICAgICAgZmlsbFdpdGhI
b3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1p
bllDb3JuZXIoKSwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbGVm
dEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWlu
WE1pbllDb3JuZXIoKSk7CisgICAgaWYgKG1faXNWZXJ0aWNhbCkKKyAgICAgICAgbV9tYXRoT3Bl
cmF0b3IucGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoc3R5bGUoKSwgaW5mbywgb3BlcmF0b3JU
b3BMZWZ0KTsKKyAgICBlbHNlCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLnBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkoc3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0KTsKIH0KIAogdm9p
ZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBQYWludEluZm8mIHBhaW50SW5mb0Zv
ckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkKIHsKICAgICAvLyBXZSBza2lwIHBhaW50aW5nIGZv
ciBpbnZpc2libGUgb3BlcmF0b3JzIHRvbyB0byBhdm9pZCBzb21lICJtaXNzaW5nIGNoYXJhY3Rl
ciIgZ2x5cGggdG8gYXBwZWFyIGlmIGFwcHJvcHJpYXRlIG1hdGggZm9udHMgYXJlIG5vdCBhdmFp
bGFibGUuCi0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQgfHwgaXNJbnZpc2li
bGVPcGVyYXRvcigpKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpIHx8IGlz
SW52aXNpYmxlT3BlcmF0b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlbmRlck1hdGhNTFRv
a2VuOjpwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBhaW50SW5mb0ZvckNo
aWxkLCB1c2VQcmludFJlY3QpOwogfQpAQCAtOTMxLDE5ICs0OTIsMTkgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKICAgICAvLyBIZW5jZSB3
ZSBkZXRlcm1pbmUgdGhlIGVycm9yIGluIHRoZSBsb2dpY2FsIHdpZHRoIHdpdGggcmVzcGVjdCB0
byB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBnbHlwaChzKSB1c2VkIHRvIHBhaW50IHRoZSBvcGVy
YXRvci4KICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAKLSAgICBpZiAo
bV9zdHJldGNoVHlwZSA9PSBVbnN0cmV0Y2hlZCkgeworICAgIGlmICghbV9tYXRoT3BlcmF0b3Iu
aXNTdHJldGNoZWQoKSkgewogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENh
c2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdp
ZHRoRm9yR2x5cGgoZGF0YSk7CiAgICAgfQogCi0gICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6
ZVZhcmlhbnQpCi0gICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKG1f
dmFyaWFudCk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9w
ZXJhdG9yOjpTaXplVmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRo
Rm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFzc2VtYmx5
V2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcCk7Ci0gICAgYXNzZW1i
bHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1f
YXNzZW1ibHkuYm90dG9tKSk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5
V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKSk7Ci0gICAg
aWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkKLSAgICAgICAgYXNzZW1ibHlXaWR0aCA9
IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHku
bWlkZGxlKSk7CisgICAgZmxvYXQgYXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkudG9wKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3Rk
OjptYXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3Iu
bV9hc3NlbWJseS5ib3R0b20pKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1i
bHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5l
eHRlbnNpb24pKTsKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUuaXNW
YWxpZCgpKQorICAgICAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0aCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpKTsK
ICAgICByZXR1cm4gd2lkdGggLSBhc3NlbWJseVdpZHRoOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKaW5kZXgg
ZjA4NjgxMC4uMzgwYmJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkdseXBoUGFnZS5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJNYXRoT3BlcmF0b3IuaCIKICNp
bmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MVG9rZW4u
aCIKIApAQCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRoZSBkaXNwbGF5
c3R5bGUgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICBib29sIGlzTGFyZ2VPcGVyYXRvckluRGlz
cGxheVN0eWxlKCkgY29uc3QgeyByZXR1cm4gIWhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OlN0cmV0Y2h5KSAmJiBoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5OjpMYXJnZU9wKTsgfQogICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNWZXJ0aWNhbDsgfQotICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsgfQorICAgIExheW91dFVuaXQgaXRhbGlj
Q29ycmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0aE9wZXJhdG9yLml0YWxpY0NvcnJlY3Rp
b24oKTsgfQogCiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVTdHlsZSgpIGZp
bmFsOwpAQCAtNzMsMzIgKzc0LDYgQEAgcHJvdGVjdGVkOgogICAgIFVDaGFyIHRleHRDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGVudDsgfQogCiBwcml2YXRlOgotICAgIHN0cnVj
dCBHbHlwaEFzc2VtYmx5RGF0YSB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIEdseXBo
RGF0YSB0b3A7Ci0gICAgICAgICAgICBHbHlwaERhdGEgcmlnaHQ7Ci0gICAgICAgIH07Ci0gICAg
ICAgIEdseXBoRGF0YSBleHRlbnNpb247Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIEds
eXBoRGF0YSBib3R0b207Ci0gICAgICAgICAgICBHbHlwaERhdGEgbGVmdDsKLSAgICAgICAgfTsK
LSAgICAgICAgR2x5cGhEYXRhIG1pZGRsZTsKLSAgICBHbHlwaEFzc2VtYmx5RGF0YSgpCi0gICAg
OiB0b3AoKSwgZXh0ZW5zaW9uKCksIGJvdHRvbSgpLCBtaWRkbGUoKSB7IH0KLSAgICB9OwotICAg
IGVudW0gU3RyZXRjaFR5cGUgewotICAgICAgICBVbnN0cmV0Y2hlZCwKLSAgICAgICAgU2l6ZVZh
cmlhbnQsCi0gICAgICAgIEdseXBoQXNzZW1ibHkKLSAgICB9OwotICAgIFN0cmV0Y2hUeXBlIG1f
c3RyZXRjaFR5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50Owot
ICAgICAgICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5OwotICAgIH07Ci0gICAgTGF5b3V0
VW5pdCBtX2l0YWxpY0NvcnJlY3Rpb247Ci0KICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxPcGVy
YXRvciAoYW5vbnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3IiOyB9CiAgICAgdm9pZCBw
YWludENoaWxkcmVuKFBhaW50SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWlu
dEluZm8mIGZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkgZmluYWw7CiAgICAgYm9vbCBpc1Jl
bmRlck1hdGhNTE9wZXJhdG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTEy
LDI3ICs4Nyw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEFsbG93U3RyZXRjaGluZygp
IGNvbnN0OwogCi0gICAgYm9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBHbHlw
aERhdGEmKSBjb25zdDsKLSAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYp
OwotICAgIHZvaWQgc2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOwot
ICAgIGJvb2wgZ2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRh
OjpBc3NlbWJseVBhcnQ+LCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwotICAgIHZvaWQgZmlu
ZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKTsKLSAgICB2b2lkIGZpbmRTdHJldGNoeURhdGEo
ZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUgPSAwKTsKLQot
ICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKLSAgICAgICAgVHJpbVRvcCwKLSAgICAgICAg
VHJpbUJvdHRvbSwKLSAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKLSAgICAgICAgVHJpbUxlZnQs
Ci0gICAgICAgIFRyaW1SaWdodCwKLSAgICAgICAgVHJpbUxlZnRBbmRSaWdodAotICAgIH07Ci0K
LSAgICBMYXlvdXRSZWN0IHBhaW50R2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwg
Y29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKLSAgICB2b2lk
IGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIGZpbGxXaXRoSG9y
aXpvbnRhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9t
LCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOwotICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNz
ZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50SG9y
aXpvbnRhbEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAg
ICB2b2lkIHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpGbGFnLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZs
YWdGcm9tQXR0cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25z
dCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKICAgICB2b2lkIHNldE9wZXJhdG9yUHJv
cGVydGllc0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVu
dHJ5Kik7CkBAIC0xNDksNiArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1fdHJh
aWxpbmdTcGFjZTsKICAgICBMYXlvdXRVbml0IG1fbWluU2l6ZTsKICAgICBMYXlvdXRVbml0IG1f
bWF4U2l6ZTsKKyAgICBNYXRoT3BlcmF0b3IgbV9tYXRoT3BlcmF0b3I7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0tIAoyLjguMC5yYzMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277355</attachid>
            <date>2016-04-26 05:07:51 -0700</date>
            <delta_ts>2016-04-27 06:24:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-move-to-mathoperator.patch</filename>
            <type>text/plain</type>
            <size>76661</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBhZmZmMDhiMGY2MjM4ZDc4MmM3MGYxMTc4Y2RjMGUzZWQ0ZDk1ZjBmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAwOToyMToxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDMvMTld
IG1vdmUgdG8gbWF0aG9wZXJhdG9yCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYwICsrKwogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAgIDggKwogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwICAgfCA1MTUgKysrKysrKysrKysrKysrKysr
KysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggICAgIHwg
MTEwICsrKysrCiAuLi4vcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAg
ICAgICB8IDUzNSArKy0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmggICAgICAgIHwgIDUxICstCiA3IGZpbGVzIGNoYW5nZWQsIDc0
NSBpbnNlcnRpb25zKCspLCA1MzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGMxY2JmMi4uYWQzMDkzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTEsNiArMjUxMSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTQ3YzkyZS4uOTI3
YTA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY1IEBACiAyMDE2LTA0LTIyICBGcmVkZXJpYyBX
YW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAorICAgICAgICBNb3ZlIHNlbGVjdGlvbiBhbmQgZHJh
d2luZyBvZiBzdHJldGNoeSBvcGVyYXRvcnMgaW50byBhIHNlcGFyYXRlIE1hdGhPcGVyYXRvciBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OiBBZGQgdGhlIE1hdGhPcGVyYXRvciBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpib3VuZHNGb3JH
bHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpoZWlnaHRGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAg
ICAgIChXZWJDb3JlOjphZHZhbmNlV2lkdGhGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0
aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogTW92ZWQgZnJvbSBSZW5k
ZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0U2l6
ZVZhcmlhbnQpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogTW92ZWQgZnJvbSBSZW5kZXJN
YXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmluZERpc3Bs
YXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yIHdp
dGggYWRkaXRpb25hbCBzdHlsZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lv
bkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50VmVy
dGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0
b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OmlzU3RyZXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6dW5z
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURh
dGE6OkdseXBoQXNzZW1ibHlEYXRhKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c3RyZXRjaFNpemUpOgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIEZvciBub3cg
d2UgY2FsbCBzZXRPcGVyYXRvciB0byB0cmFuc21pdCBpbmZvcm1hdGlvbiB0byBtX21hdGhPcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHls
ZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICBGb3Igbm93
IHdlIHNldCBzb21lIG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBp
bmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJz
dExpbmVCYXNlbGluZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQp
OiBEaXR0by4KKyAgICAgICAgRm9yIG5vdyB3ZSBzZXQgc29tZSBtX21hdGhPcGVyYXRvciBtZW1i
ZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbik6IFVwZGF0ZWQgdG8gdXNlIE1hdGhP
cGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnRyYWlsaW5nU3BhY2VFcnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW1i
bHlGYWxsQmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRo
VmVydGljYWxFeHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGlj
YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IFVwZGF0ZWQg
dG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IERlbGV0
ZWQuCisKKzIwMTYtMDQtMjIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOiByZWZhY3RvciBtYW5hZ2VtZW50IG9mIHN0cmV0
Y2h5IGRhdGEgYW5kIGl0YWxpYyBjb3JyZWN0aW9uCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5MTMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk2YmVkMTUuLjgyMzI0MTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE2NTksNiArMTY1OSw4IEBACiAJCTQzOTA0NkU4MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MzkwNDZENDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5o
ICovOyB9OwogCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
OTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovOyB9
OwogCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENjEy
REEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggKi87IH07CisJCTQzOTA0
NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODEyQUY4MEFDIC8q
IE1hdGhPcGVyYXRvci5jcHAgKi87IH07CisJCTQzOTA0NkVBMTJEQTI1RTgxMkFGODBBQyAvKiBN
YXRoT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAqLzsgfTsKIAkJ
NDM5MDQ2RUIxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ3MTJEQTI1RTgw
MEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgKi87IH07CiAJCTQzOTA0NkVDMTJEQTI1
RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRl
ck1hdGhNTFRva2VuLmggKi87IH07CiAJCTQzOUQzMzQzMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdB
bmltYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLzsgfTsK
QEAgLTkxODksNiArOTE5MSw4IEBACiAJCTQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxTY3JpcHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ck1hdGhNTFNjcmlwdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDUx
MkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1hdGhNTFVuZGVyT3Zlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0Mzkw
NDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhPcGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE9wZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ3MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJN
YXRoTUxUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJNYXRoTUxUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ4
MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzlEMzM0MDEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0ZWRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5MTIsNiArMTY5MTYsOCBAQAogCQkJCTQzOTA0
NkQ4MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovLAogCQkJCTQzOTA0
NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovLAogCQkJ
CTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLywK
KwkJCQk0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLywKKwkJ
CQk0MzkwNDZENjEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IG1hdGhtbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNzYxMiw2
ICsyNzYxOCw3IEBACiAJCQkJNDM5MDQ2RTYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFNxdWFyZVJvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBB
OSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250
cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZD
NSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjc1LDYgKzMx
MjgyLDcgQEAKIAkJCQk0MzkwNDZFNTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkg
LyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2RTkxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MzkwNDZFOTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlERTQ5QjMwOTE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVyTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGQTMwM0UxMzE2QzI5
QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwN2ZkNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApAQCAtMCww
ICsxLDUxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKE1BVEhNTCkKKyNpbmNsdWRlICJNYXRoT3BlcmF0b3IuaCIKKworI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBGbG9hdFJlY3QgYm91bmRzRm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBkYXRhLmlzVmFsaWQoKSA/
IGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlwaCkgOiBGbG9hdFJlY3QoKTsKK30K
Kworc3RhdGljIGlubGluZSBmbG9hdCBoZWlnaHRGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRh
dGEpCit7CisgICAgcmV0dXJuIGJvdW5kc0ZvckdseXBoKGRhdGEpLmhlaWdodCgpOworfQorCitz
dGF0aWMgaW5saW5lIGZsb2F0IGFkdmFuY2VXaWR0aEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYg
ZGF0YSkKK3sKKyAgICByZXR1cm4gZGF0YS5pc1ZhbGlkKCkgPyBkYXRhLmZvbnQtPndpZHRoRm9y
R2x5cGgoZGF0YS5nbHlwaCkgOiAwOworfQorCisvLyBGSVhNRTogVGhpcyBoYXJkY29kZWQgZGF0
YSBjYW4gYmUgcmVtb3ZlZCB3aGVuIE9wZW5UeXBlIE1BVEggZm9udCBhcmUgd2lkZWx5IGF2YWls
YWJsZSAoaHR0cDovL3drYnVnLzE1NjgzNykuCitzdHJ1Y3QgU3RyZXRjaHlDaGFyYWN0ZXIgewor
ICAgIFVDaGFyIGNoYXJhY3RlcjsKKyAgICBVQ2hhciB0b3BDaGFyOworICAgIFVDaGFyIGV4dGVu
c2lvbkNoYXI7CisgICAgVUNoYXIgYm90dG9tQ2hhcjsKKyAgICBVQ2hhciBtaWRkbGVDaGFyOwor
fTsKKy8vIFRoZSBmaXJzdCBsZWZ0UmlnaHRQYWlyc0NvdW50IHBhaXJzIGNvcnJlc3BvbmQgdG8g
bGVmdC9yaWdodCBmZW5jZXMgdGhhdCBjYW4gZWFzaWx5IGJlIG1pcnJvcmVkIGluIFJUTC4KK3N0
YXRpYyBjb25zdCBzaG9ydCBsZWZ0UmlnaHRQYWlyc0NvdW50ID0gNTsKK3N0YXRpYyBjb25zdCBT
dHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0geworICAgIHsgMHgyOCAg
LCAweDIzOWIsIDB4MjM5YywgMHgyMzlkLCAweDAgICAgfSwgLy8gbGVmdCBwYXJlbnRoZXNpcwor
ICAgIHsgMHgyOSAgLCAweDIzOWUsIDB4MjM5ZiwgMHgyM2EwLCAweDAgICAgfSwgLy8gcmlnaHQg
cGFyZW50aGVzaXMKKyAgICB7IDB4NWIgICwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMywgMHgwICAg
IH0sIC8vIGxlZnQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4NWQgICwgMHgyM2E0LCAweDIzYTUs
IDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IHNxdWFyZSBicmFja2V0CisgICAgeyAweDdiICAs
IDB4MjNhNywgMHgyM2FhLCAweDIzYTksIDB4MjNhOCB9LCAvLyBsZWZ0IGN1cmx5IGJyYWNrZXQK
KyAgICB7IDB4N2QgICwgMHgyM2FiLCAweDIzYWEsIDB4MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0
IGN1cmx5IGJyYWNrZXQKKyAgICB7IDB4MjMwOCwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMiwgMHgw
ICAgIH0sIC8vIGxlZnQgY2VpbGluZworICAgIHsgMHgyMzA5LCAweDIzYTQsIDB4MjNhNSwgMHgy
M2E1LCAweDAgICAgfSwgLy8gcmlnaHQgY2VpbGluZworICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4
MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBmbG9vcgorICAgIHsgMHgyMzBiLCAweDIz
YTUsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgZmxvb3IKKyAgICB7IDB4N2Mg
ICwgMHg3YywgICAweDdjLCAgIDB4N2MsICAgMHgwICAgIH0sIC8vIHZlcnRpY2FsIGJhcgorICAg
IHsgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDAgICAgfSwgLy8gZG91YmxlIHZl
cnRpY2FsIGxpbmUKKyAgICB7IDB4MjIyNSwgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgwICAg
IH0sIC8vIHBhcmFsbGVsIHRvCisgICAgeyAweDIyMmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEs
IDB4MCAgICB9IC8vIGludGVncmFsIHNpZ24KK307CisKK01hdGhPcGVyYXRvcjo6TWF0aE9wZXJh
dG9yKCkKKyAgICA6IG1fYmFzZUNoYXJhY3RlcigwKQorICAgICwgbV9pc1ZlcnRpY2FsKGZhbHNl
KQorICAgICwgbV9zdHJldGNoVHlwZShVbnN0cmV0Y2hlZCkKKyAgICAsIG1fd2lkdGgoMCkKKyAg
ICAsIG1fYXNjZW50KDApCisgICAgLCBtX2Rlc2NlbnQoMCkKKyAgICAsIG1faXRhbGljQ29ycmVj
dGlvbigwKQoreworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFz
ZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKQoreworICAgIG1fYmFzZUNoYXJhY3RlciA9IGJh
c2VDaGFyYWN0ZXI7CisgICAgbV9pc1ZlcnRpY2FsID0gaXNWZXJ0aWNhbDsKK30KKworYm9vbCBN
YXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBo
RGF0YSYgYmFzZUdseXBoKSBjb25zdAoreworICAgIGJhc2VHbHlwaCA9IHN0eWxlLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fYmFzZUNoYXJhY3RlciwgIXN0eWxlLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGJhc2VHbHlwaC5pc1ZhbGlkKCkgJiYg
YmFzZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKK30K
Kwordm9pZCBNYXRoT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYgc2l6
ZVZhcmlhbnQpCit7CisgICAgQVNTRVJUKHNpemVWYXJpYW50LmlzVmFsaWQoKSAmJiBzaXplVmFy
aWFudC5mb250LT5tYXRoRGF0YSgpKTsKKyAgICBtX3N0cmV0Y2hUeXBlID0gU2l6ZVZhcmlhbnQ7
CisgICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpz
ZXRHbHlwaEFzc2VtYmx5KGNvbnN0IE1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGEmIGFz
c2VtYmx5RGF0YSkKK3sKKyAgICBtX3N0cmV0Y2hUeXBlID0gR2x5cGhBc3NlbWJseTsKKyAgICBt
X2Fzc2VtYmx5ID0gYXNzZW1ibHlEYXRhOworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6ZmluZERp
c3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAg
IEFTU0VSVChtX2lzVmVydGljYWwpOworCisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKKyAgICBp
ZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFzZUdseXBoKSB8fCAhYmFzZUdseXBoLmZvbnQtPm1h
dGhEYXRhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlh
bnRzOworICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2VtYmx5
UGFydHM7CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGlz
IHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0IFxz
cXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgorICAgIGZsb2F0IGRpc3Bs
YXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkg
KiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhDb25z
dGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1p
bkhlaWdodCkpOworCisgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJp
YW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7
CisKKyAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdl
ciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lz
ZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgorICAgIGZvciAoYXV0byYgc2l6ZVZh
cmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXpl
VmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERh
dGEpOworICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSBnbHlwaERhdGEuZm9udC0+bWF0aERh
dGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhEYXRhLmZvbnQsIGdseXBoRGF0YS5nbHlw
aCk7CisgICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpID49IGRpc3BsYXlPcGVy
YXRvck1pbkhlaWdodCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBNYXRo
T3BlcmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+JiBhc3NlbWJs
eVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKQoreworICAgIC8vIFRoZSBz
dHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRoIHRhYmxlIGlzIGEgYml0IG1vcmUgZ2VuZXJh
bCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkgdGhlIE1hdGhPcGVyYXRvciBjb2RlLCBz
byB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25hYmxlIHdheS4KKyAgICAvLyBGSVhNRTog
TWF0aE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRoZSBtb3N0IGdlbmVyYWwgZm9ybWF0IChodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI3KS4KKyAgICAvLyBXZSB1
c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29tcG9uZW50cyBmdW5jdGlvbiBpbiBnaXRodWIu
Y29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9tYXN0ZXIvZm9udHMvT3BlblR5cGVNYXRoL2Zv
bnRVdGlsLnB5CisKKyAgICAvLyBXZSBjb3VudCB0aGUgbnVtYmVyIG9mIG5vbiBleHRlbmRlciBw
aWVjZXMuCisgICAgaW50IG5vbkV4dGVuZGVyQ291bnQgPSAwOworICAgIGZvciAoYXV0byYgcGFy
dCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYgKCFwYXJ0LmlzRXh0ZW5kZXIpCisgICAg
ICAgICAgICBub25FeHRlbmRlckNvdW50Kys7CisgICAgfQorICAgIGlmIChub25FeHRlbmRlckNv
dW50ID4gMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6
IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCisKKyAgICAvLyBXZSBub3cgYnJvd3NlIHRoZSBs
aXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGhvcml6b250YWwgb3BlcmF0b3Jz
IGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZlcnRpY2FsIG9wZXJhdG9ycy4KKyAgICBlbnVt
IFBhcnRUeXBlIHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIEV4dGVuZGVyQmV0d2VlblN0YXJ0
QW5kTWlkZGxlLAorICAgICAgICBNaWRkbGUsCisgICAgICAgIEV4dGVuZGVyQmV0d2Vlbk1pZGRs
ZUFuZEVuZCwKKyAgICAgICAgRW5kLAorICAgICAgICBOb25lCisgICAgfTsKKyAgICBQYXJ0VHlw
ZSBleHBlY3RlZFBhcnRUeXBlID0gU3RhcnQ7CisgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5n
bHlwaCA9IDA7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IDA7CisgICAgZm9yIChh
dXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAobm9uRXh0ZW5kZXJDb3Vu
dCA8IDMpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBhdCBtb3N0IHR3byBub24t
ZXh0ZW5kZXJzIHRoZW4gd2Ugc2tpcCB0aGUgbWlkZGxlIGdseXBoLgorICAgICAgICAgICAgaWYg
KGV4cGVjdGVkUGFydFR5cGUgPT0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUpCisgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVu
ZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0gTWlkZGxlKQorICAg
ICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFbmQ7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHBhcnQuaXNFeHRlbmRlcikgeworICAgICAgICAgICAgaWYgKCFhc3NlbWJseURhdGEuZXh0
ZW5zaW9uLmdseXBoKQorICAgICAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5
cGggPSBwYXJ0LmdseXBoOyAvLyBXZSBjb3B5IHRoZSBleHRlbmRlciBwYXJ0LgorICAgICAgICAg
ICAgZWxzZSBpZiAoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCAhPSBwYXJ0LmdseXBoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0
aGUgYXNzZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCisKKyAgICAgICAgICAgIHN3aXRj
aCAoZXhwZWN0ZWRQYXJ0VHlwZSkgeworICAgICAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAg
ICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGxlZnQvYm90dG9tIHBhcnQuCisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBNaWRkbGU6CisgICAgICAg
ICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBtaWRkbGUgcGFydC4KKyAgICAgICAgICAgICAgICBl
eHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBFbmQ6CisgICAgICAgICAgICBjYXNl
IE5vbmU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBnb3Qg
YW4gdW5leHBlY3RlZCBleHRlbmRlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICAg
ICAgY2FzZSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6CisgICAgICAgICAgICAgICAgLy8g
V2UgaWdub3JlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGV4dGVuZGVycy4KKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAo
ZXhwZWN0ZWRQYXJ0VHlwZSkgeworICAgICAgICBjYXNlIFN0YXJ0OgorICAgICAgICAgICAgLy8g
V2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KKyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5i
b3R0b20uZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9
IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU6CisgICAgICAgIGNhc2Ug
TWlkZGxlOgorICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgbWlkZGxlIHBhcnQuCisgICAgICAg
ICAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gcGFydC5nbHlwaDsKKyAgICAgICAgICAg
IGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6
CisgICAgICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgcmlnaHQvdG9w
IHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEudG9wLmdseXBoID0gcGFydC5nbHlwaDsK
KyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBOb25lOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBv
cnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQgbm9uLWV4dGVuZGVyIHBhcnQuCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWFzc2VtYmx5RGF0
YS5leHRlbnNpb24uZ2x5cGgpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qg
c3VwcG9ydGVkOiB3ZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5
cGguCisKKyAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRvcC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2Ug
dGhlIGV4dGVuc2lvbiBnbHlwaC4KKyAgICBpZiAoIWFzc2VtYmx5RGF0YS50b3AuZ2x5cGgpCisg
ICAgICAgIGFzc2VtYmx5RGF0YS50b3AuZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmds
eXBoOworICAgIGlmICghYXNzZW1ibHlEYXRhLmJvdHRvbS5nbHlwaCkKKyAgICAgICAgYXNzZW1i
bHlEYXRhLmJvdHRvbS5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisKKyAg
ICBhc3NlbWJseURhdGEudG9wLmZvbnQgPSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9u
dCgpOworICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0YS50b3Au
Zm9udDsKKyAgICBhc3NlbWJseURhdGEuYm90dG9tLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZv
bnQ7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1pZGRsZS5n
bHlwaCA/IGFzc2VtYmx5RGF0YS50b3AuZm9udCA6IG51bGxwdHI7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0
U2l6ZSkKK3sKKyAgICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7
CisKKyAgICBHbHlwaERhdGEgYmFzZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxl
LCBiYXNlR2x5cGgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1heGltdW1HbHlwaFdp
ZHRoKSB7CisgICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlz
IGxhcmdlIGVub3VnaC4KKyAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBo
ZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBo
KTsKKyAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJs
eURhdGE7CisgICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CisgICAgICAgIFZl
Y3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOworICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0
YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOworICAgICAgICBiYXNlR2x5cGguZm9udC0+
bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2Fs
LCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworICAgICAgICAvLyBXZSB2ZXJpZnkgdGhl
IHNpemUgdmFyaWFudHMuCisgICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFy
aWFudHMpIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJh
c2VHbHlwaC5mb250KTsKKyAgICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKKyAgICAg
ICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lk
dGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRh
KSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgaWYg
KHNpemUgPj0gdGFyZ2V0U2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEg
Y29uc3RydWN0aW9uLgorICAgICAgICBpZiAoIWdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHls
ZSwgYXNzZW1ibHlQYXJ0cywgYXNzZW1ibHlEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAvLyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwg
d2UgZmFsbGJhY2sgdG8gdGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgorICAgICAgICBj
b25zdCBTdHJldGNoeUNoYXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlD
aGFyYWN0ZXJzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4
SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5k
ZXhdLmNoYXJhY3RlciA9PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdHJl
dGNoeUNoYXJhY3RlciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICAgICAg
ICAgIGlmICghc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJp
Z2h0UGFpcnNDb3VudCAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGlu
IHJpZ2h0LXRvLWxlZnQgZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBh
ZGRpbmcgLTEgb3IgKzEgYWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9y
IHRoaXMgY2hhcmFjdGVyLCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgorICAgICAg
ICBpZiAoIXN0cmV0Y2h5Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IC8vIFdlIGNvbnZlcnQgdGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0
IG9mIGdseXBoIGRhdGEuCisgICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBzdHlsZS5mb250Q2Fz
Y2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwg
ZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uID0gc3R5bGUuZm9udENhc2Nh
ZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNo
YXIsIGZhbHNlKTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbSA9IHN0eWxlLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFy
LCBmYWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rl
ci0+bWlkZGxlQ2hhciA/IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyLCBmYWxzZSkgOiBHbHlwaERhdGEoKTsKKyAg
ICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBtYXhpbXVtIHdpZHRoLCB2ZXJp
ZnkgZWFjaCBjb21wb25lbnQuCisgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAg
ICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkpOworICAgICAgICAqbWF4aW11bUdseXBo
V2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0g
c3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJs
eURhdGEubWlkZGxlKSk7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCpt
YXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRv
bSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZW5zdXJlIHRoYXQgdGhl
IHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBzLgorICAgIGZsb2F0
IG1pblNpemUgPSBtX2lzVmVydGljYWwgPworICAgICAgICBoZWlnaHRGb3JHbHlwaChhc3NlbWJs
eURhdGEudG9wKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgaGVpZ2h0
Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbSkKKyAgICAgICAgOiBhZHZhbmNlV2lkdGhGb3JH
bHlwaChhc3NlbWJseURhdGEubGVmdCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURh
dGEubWlkZGxlKSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5yaWdodCk7Cisg
ICAgaWYgKG1pblNpemUgPiB0YXJnZXRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRH
bHlwaEFzc2VtYmx5KGFzc2VtYmx5RGF0YSk7Cit9CisKK0xheW91dFJlY3QgTWF0aE9wZXJhdG9y
OjpwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFp
bnRUcmltbWluZyB0cmltKQoreworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zv
ckdseXBoKGRhdGEpOworCisgICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExh
eW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3Vu
ZHMuaGVpZ2h0KCkpKTsKKyAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlw
aEJvdW5kcy55KCkpOworCisgICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWds
eSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwg
Ym91bmRhcmllcworICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmlt
IGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUg
bGVzcworICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGlu
dHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCisgICAgRmxvYXRS
ZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgc3dpdGNoICh0cmltKSB7CisgICAgY2Fz
ZSBUcmltVG9wOgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWlu
dFJlY3QueSgpLmNlaWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC55KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Cb3R0b206
CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5t
YXhZKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Ub3BB
bmRCb3R0b206CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50
UmVjdC55KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91
bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOworICAgICAgICBjbGlwQm91bmRz
LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRyaW1MZWZ0OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8o
Z2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0
WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRy
aW1SaWdodDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFp
bnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhY
RWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VHJpbUxlZnRBbmRSaWdodDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGds
eXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hp
ZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7CisgICAgICAg
IGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7CisgICAgICAgIGNs
aXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7CisgICAgfQor
CisgICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50
aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNs
aXBCb3VuZHMpOworCisgICAgR2x5cGhCdWZmZXIgYnVmZmVyOworICAgIGJ1ZmZlci5hZGQoZGF0
YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7CisgICAgaW5m
by5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBi
dWZmZXIsIDAsIDEsIG9yaWdpbik7CisKKyAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Cit9CisK
K3ZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBm
cm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7
CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJU
KG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKGZyb20ueSgpIDw9
IHRvLnkoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lv
biBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZnJvbS55KCkg
PT0gdG8ueSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOworCisgICAgRmxvYXRSZWN0IGdseXBoQm91
bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5leHRlbnNpb24pOworCisgICAgLy8gQ2xp
cHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0
b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAgICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20g
Z2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQg
c2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBp
bmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55KCkpOworICAgIGNs
aXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnkoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xp
cChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBp
eGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVw
IGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9IGdseXBoQm91bmRz
LnkoKSArIDI7CisgICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9t
LngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBoVG9wKTsKKyAgICBGbG9hdFJlY3QgbGFzdFBh
aW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOworCisgICAgd2hpbGUgKGxhc3RQYWlu
dGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkgeworICAgICAgICBsYXN0UGFpbnRlZEdseXBo
UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlw
aE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZ2x5
cGhPcmlnaW4ueSgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAg
IC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVub3Vn
aCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3RhbmdsZQor
ICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5vdGhp
bmcuCisgICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6
b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYg
aW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKK3sK
KyAgICBBU1NFUlQoIW1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0g
R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQo
KSk7CisgICAgQVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBp
cyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBh
bnl0aGluZy4KKyAgICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkp
OworCisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0
byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAgICAvLyByZWdpb25z
IG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFp
cnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAgICBMYXlvdXRSZWN0
IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZnJv
bS54KCkpOworICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngoKSk7CisgICAgaW5m
by5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1taW5nIG1heSByZW1v
dmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRlbmRlciBnbHlwaCwg
c28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQgb2Zmc2V0VG9HbHlw
aExlZnQgPSAtMjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZy
b20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgpLCB0by55KCkpKTsK
KyAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwor
CisgICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkgeworICAg
ICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNz
ZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7CisgICAgICAg
IGdseXBoT3JpZ2luLnNldFgoZ2x5cGhPcmlnaW4ueCgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qu
d2lkdGgoKSk7CisKKyAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250
IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8g
YW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2Fz
ZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3Bl
cmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCit7Cisg
ICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5
cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wLmlzVmFsaWQoKSk7CisgICAg
QVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tLmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9z
aXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBi
b3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisg
ICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0
b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBGbG9hdFJl
Y3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcCk7CisgICAg
TGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JU
b3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7CisgICAgTGF5b3V0UmVjdCB0b3BHbHlw
aFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkudG9wLCB0b3BH
bHlwaE9yaWdpbiwgVHJpbUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhCb3Vu
ZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbSk7CisgICAgTGF5b3V0UG9pbnQg
Ym90dG9tR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0Lnko
KSArIHN0cmV0Y2hTaXplKCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21H
bHlwaEJvdW5kcy55KCkpKTsKKyAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0g
cGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5ib3R0b20sIGJvdHRvbUdseXBoT3Jp
Z2luLCBUcmltVG9wKTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5k
IGVuZCBnbHlwaCBwYWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50IGhl
aWdodCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRSZWN0IG1pZGRsZUds
eXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAgICAgICBM
YXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BHbHlw
aE9yaWdpbi55KCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9p
bnQoMCwgKGJvdHRvbUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1heFko
KSkgLyAyLjApKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50
KDAsIG1pZGRsZUdseXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAgICAgICAgTGF5b3V0
UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNz
ZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7CisgICAg
ICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQ
YWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllD
b3JuZXIoKSk7CisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwg
aW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQ
YWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxXaXRo
VmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWlu
WE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Cit9
CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCit7CisgICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VSVCht
X3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5Lmxl
ZnQuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5yaWdodC5pc1ZhbGlkKCkpOwor
CisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRnZSBv
ZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRoIHRoZSBlZGdlcyBv
ZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50
T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9w
TGVmdCk7CisgICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54
KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCBsZWZ0
R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmxlZnQs
IGxlZnRHbHlwaE9yaWdpbiwgVHJpbVJpZ2h0KTsKKworICAgIEZsb2F0UmVjdCByaWdodEdseXBo
Qm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5yaWdodCk7CisgICAgTGF5b3V0UG9p
bnQgcmlnaHRHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpICsgbV93aWR0aCAtIHJpZ2h0
R2x5cGhCb3VuZHMud2lkdGgoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsKKyAg
ICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZv
LCBtX2Fzc2VtYmx5LnJpZ2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVmdCk7CisKKyAgICBM
YXlvdXRQb2ludCBiYXNlbGluZVNoaWZ0KDAsIG1fYXNjZW50KTsKKyAgICBpZiAobV9hc3NlbWJs
eS5taWRkbGUuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2lu
IGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KKyAgICAgICAg
TGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVmdEds
eXBoT3JpZ2luLnkoKSk7CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQ
b2ludCgocmlnaHRHbHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4WCgp
KSAvIDIuMCwgMCkpOworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0g
cGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3Jp
Z2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5z
aW9uR2x5cGgoc3R5bGUsIGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigp
ICsgYmFzZWxpbmVTaGlmdCwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSAr
IGJhc2VsaW5lU2hpZnQpOworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlw
aChzdHlsZSwgaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJh
c2VsaW5lU2hpZnQsIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2Vs
aW5lU2hpZnQpOworICAgIH0gZWxzZQorICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNp
b25HbHlwaChzdHlsZSwgaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkg
KyBiYXNlbGluZVNoaWZ0LCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBi
YXNlbGluZVNoaWZ0KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjRiNGRlMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE1hdGhPcGVyYXRvcl9oCisjZGVmaW5lIE1hdGhPcGVyYXRvcl9o
CisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2luY2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUg
IkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJPcGVuVHlwZU1hdGhEYXRhLmgiCisjaW5jbHVkZSAi
UGFpbnRJbmZvLmgiCisjaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworY2xhc3MgTWF0aE9wZXJhdG9yIHsKK3B1
YmxpYzoKKyAgICBNYXRoT3BlcmF0b3IoKTsKKyAgICB2b2lkIHNldE9wZXJhdG9yKFVDaGFyIGJh
c2VDaGFyYWN0ZXIsIGJvb2wgaXNWZXJ0aWNhbCk7CisKKyAgICBMYXlvdXRVbml0IGl0YWxpY0Nv
cnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0KKworICAgIGJv
b2wgaXNTdHJldGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cmV0Y2hUeXBlICE9IFVuc3RyZXRj
aGVkOyB9CisgICAgdm9pZCB1bnN0cmV0Y2goKSB7IG1fc3RyZXRjaFR5cGUgPSBVbnN0cmV0Y2hl
ZDsgfQorCisgICAgLy8gRklYTUU6IEFsbCB0aGUgY29kZSBiZWxvdyBzaG91bGQgYmUgcHJpdmF0
ZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYnkgUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGh0
dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4KKworICAgIHN0cnVjdCBHbHlwaEFzc2VtYmx5RGF0
YSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSB0b3A7CisgICAgICAg
ICAgICBHbHlwaERhdGEgcmlnaHQ7CisgICAgICAgIH07CisgICAgICAgIEdseXBoRGF0YSBleHRl
bnNpb247CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSBib3R0b207Cisg
ICAgICAgICAgICBHbHlwaERhdGEgbGVmdDsKKyAgICAgICAgfTsKKyAgICAgICAgR2x5cGhEYXRh
IG1pZGRsZTsKKyAgICBHbHlwaEFzc2VtYmx5RGF0YSgpCisgICAgOiB0b3AoKSwgZXh0ZW5zaW9u
KCksIGJvdHRvbSgpLCBtaWRkbGUoKSB7IH0KKyAgICB9OworICAgIGVudW0gU3RyZXRjaFR5cGUg
eworICAgICAgICBVbnN0cmV0Y2hlZCwKKyAgICAgICAgU2l6ZVZhcmlhbnQsCisgICAgICAgIEds
eXBoQXNzZW1ibHkKKyAgICB9OworICAgIGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKKyAgICAg
ICAgVHJpbVRvcCwKKyAgICAgICAgVHJpbUJvdHRvbSwKKyAgICAgICAgVHJpbVRvcEFuZEJvdHRv
bSwKKyAgICAgICAgVHJpbUxlZnQsCisgICAgICAgIFRyaW1SaWdodCwKKyAgICAgICAgVHJpbUxl
ZnRBbmRSaWdodAorICAgIH07CisKKyAgICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1ZlcnRpY2FsID8gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOyB9
OworICAgIGJvb2wgZ2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikg
Y29uc3Q7CisgICAgdm9pZCBzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKKyAgICB2
b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3QgTWF0aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0
YSYpOworICAgIHZvaWQgZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVy
U3R5bGUmKTsKKyAgICB2b2lkIGZpbmRTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmLCBm
bG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSA9IDApOworICAg
IGJvb2wgZ2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
VmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0
YSYpOworCisgICAgTGF5b3V0UmVjdCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFp
bnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5
cGhQYWludFRyaW1taW5nKTsKKyAgICB2b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlw
aChjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9t
LCBjb25zdCBMYXlvdXRQb2ludCYgdG8pOworICAgIHZvaWQgZmlsbFdpdGhIb3Jpem9udGFsRXh0
ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lkIHBhaW50VmVydGlj
YWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoY29uc3Qg
UmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgVUNo
YXIgbV9iYXNlQ2hhcmFjdGVyOworICAgIGJvb2wgbV9pc1ZlcnRpY2FsOworICAgIFN0cmV0Y2hU
eXBlIG1fc3RyZXRjaFR5cGU7CisgICAgdW5pb24geworICAgICAgICBHbHlwaERhdGEgbV92YXJp
YW50OworICAgICAgICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5OworICAgIH07CisgICAg
TGF5b3V0VW5pdCBtX3dpZHRoOworICAgIExheW91dFVuaXQgbV9hc2NlbnQ7CisgICAgTGF5b3V0
VW5pdCBtX2Rlc2NlbnQ7CisgICAgTGF5b3V0VW5pdCBtX2l0YWxpY0NvcnJlY3Rpb247Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQorI2VuZGlmIC8vIE1hdGhPcGVyYXRvcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwCmluZGV4IDQ1ZjVhOGQuLmRiZDc2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
CkBAIC00NSwzMyArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB1c2luZyBuYW1l
c3BhY2UgTWF0aE1MTmFtZXM7CiAKLS8vIEZJWE1FOiBUaGUgT3BlblR5cGUgTUFUSCB0YWJsZSBj
b250YWlucyBpbmZvcm1hdGlvbiB0aGF0IHNob3VsZCBvdmVycmlkZSB0aGlzIHRhYmxlIChodHRw
Oi8vd2tidWcvMTIyMjk3KS4KLXN0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7Ci0gICAgVUNoYXIg
Y2hhcmFjdGVyOwotICAgIFVDaGFyIHRvcENoYXI7Ci0gICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsK
LSAgICBVQ2hhciBib3R0b21DaGFyOwotICAgIFVDaGFyIG1pZGRsZUNoYXI7Ci19OwotLy8gVGhl
IGZpcnN0IGxlZnRSaWdodFBhaXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0
IGZlbmNlcyB0aGF0IGNhbiBlYXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgotc3RhdGljIGNvbnN0
IHNob3J0IGxlZnRSaWdodFBhaXJzQ291bnQgPSA1Owotc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hh
cmFjdGVyIHN0cmV0Y2h5Q2hhcmFjdGVyc1sxNF0gPSB7Ci0gICAgeyAweDI4ICAsIDB4MjM5Yiwg
MHgyMzljLCAweDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCi0gICAgeyAweDI5
ICAsIDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNp
cwotICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVm
dCBzcXVhcmUgYnJhY2tldAotICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAw
eDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4N2IgICwgMHgyM2E3LCAw
eDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAotICAgIHsgMHg3
ZCAgLCAweDIzYWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJh
Y2tldAotICAgIHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8g
bGVmdCBjZWlsaW5nCi0gICAgeyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAg
ICB9LCAvLyByaWdodCBjZWlsaW5nCi0gICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIz
YTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29yCi0gICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1
LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBmbG9vcgotICAgIHsgMHg3YyAgLCAweDdjLCAg
IDB4N2MsICAgMHg3YywgICAweDAgICAgfSwgLy8gdmVydGljYWwgYmFyCi0gICAgeyAweDIwMTYs
IDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGlu
ZQotICAgIHsgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFy
YWxsZWwgdG8KLSAgICB7IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0g
Ly8gaW50ZWdyYWwgc2lnbgotfTsKLQogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhN
TE9wZXJhdG9yKE1hdGhNTEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAg
ICAgOiBSZW5kZXJNYXRoTUxUb2tlbihlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUoMCkKQEAgLTI5NCw4ICsyNjcsOSBAQCB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3Rl
eHRDb250ZW50LCBtX2lzVmVydGljYWwpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAg
ZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBo
KSA/IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCkgOiAwOworICAgIGZsb2F0IG1heGlt
dW1HbHlwaFdpZHRoID0gbV9tYXRoT3BlcmF0b3IuZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VH
bHlwaCkgPyBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1f
aXNWZXJ0aWNhbCkgewogICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6
ZSgpKQogICAgICAgICAgICAgbWF4aW11bUdseXBoV2lkdGggPSBzdHJldGNoU2l6ZSgpOwpAQCAt
MzA1LDEyICsyNzksMTIgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIH0KICAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNw
bGF5U3R5bGUoKSkgewogICAgICAgICAvLyBMYXJnZSBvcGVyYXRvcnMgaW4gU1RJWCBXb3JkIGhh
dmUgaW5jb3JyZWN0IGFkdmFuY2Ugd2lkdGgsIGNhdXNpbmcgbWlzcGxhY2VtZW50IG9mIHN1cGVy
c2NyaXB0LCBzbyB3ZSB1c2UgdGhlIGdseXBoIGJvdW5kIGluc3RlYWQgKGh0dHA6Ly9zb3VyY2Vm
b3JnZS5uZXQvcC9zdGl4Zm9udHMvdHJhY2tpbmcvNDkvKS4KLSAgICAgICAgZmluZERpc3BsYXlT
dHlsZUxhcmdlT3BlcmF0b3IoKTsKLSAgICAgICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZh
cmlhbnQpCi0gICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1f
dmFyaWFudCkud2lkdGgoKTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuZmluZERpc3BsYXlTdHls
ZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CisgICAgICAgIGlmIChtX21hdGhPcGVyYXRvci5tX3N0
cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpCisgICAgICAgICAgICBtYXhp
bXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCku
d2lkdGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogc29tZSBnbHlwaHMgKGUu
Zy4gdGhlIG9uZSBmb3IgIkZSQUNUSU9OIFNMQVNIIiBpbiB0aGUgU1RJWCBNYXRoIGZvbnQgb3Ig
bGFyZ2Ugb3BlcmF0b3JzKSBoYXZlIGEgd2lkdGggdGhhdCBkZXBlbmRzIG9uIHRoZSBoZWlnaHQs
IHJlc3VsdGluZyBpbiBsYXJnZSBnYXBzIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwMzI2KS4KLSAgICAgICAgZmluZFN0cmV0Y2h5RGF0YSgmbWF4aW11bUdseXBo
V2lkdGgpOworICAgICAgICBtX21hdGhPcGVyYXRvci5maW5kU3RyZXRjaHlEYXRhKHN0eWxlKCks
ICZtYXhpbXVtR2x5cGhXaWR0aCk7CiAgICAgfQogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX2xlYWRpbmdTcGFjZSArIG1heGlt
dW1HbHlwaFdpZHRoICsgbV90cmFpbGluZ1NwYWNlOwogfQpAQCAtMzc0LDI0NSArMzQ4LDE0IEBA
IHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsCiAgICAgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7
CiB9CiAKLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25zdAotewotICAgIGJhc2VH
bHlwaCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fdGV4dENv
bnRlbnQsICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpOwotICAgIHJldHVybiBiYXNl
R2x5cGguaXNWYWxpZCgpICYmIGJhc2VHbHlwaC5mb250ID09ICZzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVW
YXJpYW50KGNvbnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCi17Ci0gICAgQVNTRVJUKHNpemVW
YXJpYW50LmlzVmFsaWQoKSAmJiBzaXplVmFyaWFudC5mb250LT5tYXRoRGF0YSgpKTsKLSAgICBt
X3N0cmV0Y2hUeXBlID0gU2l6ZVZhcmlhbnQ7Ci0gICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7
Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkoY29uc3Qg
R2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKLXsKLSAgICBtX3N0cmV0Y2hUeXBlID0g
R2x5cGhBc3NlbWJseTsKLSAgICBtX2Fzc2VtYmx5ID0gYXNzZW1ibHlEYXRhOwotfQotCi1ib29s
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soVmVjdG9yPE9w
ZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0cywgR2x5cGhBc3NlbWJs
eURhdGEmIGFzc2VtYmx5RGF0YSkgY29uc3QKLXsKLSAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRo
ZSBPcGVuIFR5cGUgTWF0aCB0YWJsZSBpcyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25l
IGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBSZW5kZXJNYXRoTUxPcGVyYXRvciBjb2RlLCBzbyB3ZSB0
cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25hYmxlIHdheS4KLSAgICAvLyBGSVhNRTogUmVuZGVy
TWF0aE1MT3BlcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIG1vc3QgZ2VuZXJhbCBmb3JtYXQgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjcpLgotICAgIC8vIFdl
IHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNvcHlDb21wb25lbnRzIGZ1bmN0aW9uIGluIGdpdGh1
Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9ibG9iL21hc3Rlci9mb250cy9PcGVuVHlwZU1hdGgv
Zm9udFV0aWwucHkKLQotICAgIC8vIFdlIGNvdW50IHRoZSBudW1iZXIgb2Ygbm9uIGV4dGVuZGVy
IHBpZWNlcy4KLSAgICBpbnQgbm9uRXh0ZW5kZXJDb3VudCA9IDA7Ci0gICAgZm9yIChhdXRvJiBw
YXJ0IDogYXNzZW1ibHlQYXJ0cykgewotICAgICAgICBpZiAoIXBhcnQuaXNFeHRlbmRlcikKLSAg
ICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQrKzsKLSAgICB9Ci0gICAgaWYgKG5vbkV4dGVuZGVy
Q291bnQgPiAzKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRl
ZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNlcy4KLQotICAgIC8vIFdlIG5vdyBicm93c2UgdGhl
IGxpc3Qgb2YgcGllY2VzIGZyb20gbGVmdCB0byByaWdodCBmb3IgaG9yaXpvbnRhbCBvcGVyYXRv
cnMgYW5kIGZyb20gYm90dG9tIHRvIHRvcCBmb3IgdmVydGljYWwgb3BlcmF0b3JzLgotICAgIGVu
dW0gUGFydFR5cGUgewotICAgICAgICBTdGFydCwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuU3Rh
cnRBbmRNaWRkbGUsCi0gICAgICAgIE1pZGRsZSwKLSAgICAgICAgRXh0ZW5kZXJCZXR3ZWVuTWlk
ZGxlQW5kRW5kLAotICAgICAgICBFbmQsCi0gICAgICAgIE5vbmUKLSAgICB9OwotICAgIFBhcnRU
eXBlIGV4cGVjdGVkUGFydFR5cGUgPSBTdGFydDsKLSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9u
LmdseXBoID0gMDsKLSAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gMDsKLSAgICBmb3Ig
KGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7Ci0gICAgICAgIGlmIChub25FeHRlbmRlckNv
dW50IDwgMykgewotICAgICAgICAgICAgLy8gSWYgd2Ugb25seSBoYXZlIGF0IG1vc3QgdHdvIG5v
bi1leHRlbmRlcnMgdGhlbiB3ZSBza2lwIHRoZSBtaWRkbGUgZ2x5cGguCi0gICAgICAgICAgICBp
ZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSkKLSAg
ICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5k
RW5kOwotICAgICAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBNaWRkbGUpCi0g
ICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEVuZDsKLSAgICAgICAgfQotICAgICAg
ICBpZiAocGFydC5pc0V4dGVuZGVyKSB7Ci0gICAgICAgICAgICBpZiAoIWFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZ2x5cGgpCi0gICAgICAgICAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5n
bHlwaCA9IHBhcnQuZ2x5cGg7IC8vIFdlIGNvcHkgdGhlIGV4dGVuZGVyIHBhcnQuCi0gICAgICAg
ICAgICBlbHNlIGlmIChhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoICE9IHBhcnQuZ2x5cGgp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6
IHRoZSBhc3NlbWJseSBoYXMgZGlmZmVyZW50IGV4dGVuZGVycy4KLQotICAgICAgICAgICAgc3dp
dGNoIChleHBlY3RlZFBhcnRUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAg
ICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAg
ICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAg
ICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgICAg
IGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYXNlIEVuZDoKLSAgICAgICAgICAgIGNh
c2UgTm9uZToKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdv
dCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU6Ci0gICAgICAg
ICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKLSAgICAgICAgICAgICAgICAv
LyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZXh0ZW5kZXJzLgotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNo
IChleHBlY3RlZFBhcnRUeXBlKSB7Ci0gICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAv
LyBXZSBjb3B5IHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRh
LmJvdHRvbS5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBl
ID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKLSAgICAgICAgY2Fz
ZSBNaWRkbGU6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBtaWRkbGUgcGFydC4KLSAgICAg
ICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAg
ICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVu
ZDoKLSAgICAgICAgY2FzZSBFbmQ6Ci0gICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSByaWdodC90
b3AgcGFydC4KLSAgICAgICAgICAgIGFzc2VtYmx5RGF0YS50b3AuZ2x5cGggPSBwYXJ0LmdseXBo
OwotICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IE5vbmU7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgY2FzZSBOb25lOgotICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3Vw
cG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBub24tZXh0ZW5kZXIgcGFydC4KLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghYXNzZW1ibHlE
YXRhLmV4dGVuc2lvbi5nbHlwaCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5v
dCBzdXBwb3J0ZWQ6IHdlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFuIGV4dGVuc2lvbiBn
bHlwaC4KLQotICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdG9wL2JvdHRvbSBnbHlwaHMsIHdlIHVz
ZSB0aGUgZXh0ZW5zaW9uIGdseXBoLgotICAgIGlmICghYXNzZW1ibHlEYXRhLnRvcC5nbHlwaCkK
LSAgICAgICAgYXNzZW1ibHlEYXRhLnRvcC5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24u
Z2x5cGg7Ci0gICAgaWYgKCFhc3NlbWJseURhdGEuYm90dG9tLmdseXBoKQotICAgICAgICBhc3Nl
bWJseURhdGEuYm90dG9tLmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKLQot
ICAgIGFzc2VtYmx5RGF0YS50b3AuZm9udCA9ICZzdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKTsKLSAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmZvbnQgPSBhc3NlbWJseURhdGEu
dG9wLmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLmJvdHRvbS5mb250ID0gYXNzZW1ibHlEYXRhLnRv
cC5mb250OwotICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRk
bGUuZ2x5cGggPyBhc3NlbWJseURhdGEudG9wLmZvbnQgOiBudWxscHRyOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmREaXNwbGF5U3R5bGVM
YXJnZU9wZXJhdG9yKCkKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVy
YXRvckluRGlzcGxheVN0eWxlKCkpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBp
ZiAoIWdldEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+
bWF0aERhdGEoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEdseXBoPiBzaXplVmFy
aWFudHM7Ci0gICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1i
bHlQYXJ0czsKLQotICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQg
aXMgc29tZXRpbWVzIHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3Qg
XHNxcnR7Mn0gdGltZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlz
cGxheU9wZXJhdG9yTWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0Zv
ckdseXBoKGJhc2VHbHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUds
eXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9w
ZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOwotCi0gICAgYmFzZUds
eXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRy
dWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0KLSAgICAvLyBXZSBjaG9vc2UgdGhl
IGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNw
bGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2Vz
dCB2YXJpYW50LgotICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsK
LSAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQp
OwotICAgICAgICBzZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAgICBtX2l0YWxpY0Nv
cnJlY3Rpb24gPSBnbHlwaERhdGEuZm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlv
bigqZ2x5cGhEYXRhLmZvbnQsIGdseXBoRGF0YS5nbHlwaCk7Ci0gICAgICAgIGlmIChoZWlnaHRG
b3JHbHlwaChnbHlwaERhdGEpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmluZFN0
cmV0Y2h5RGF0YShmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6
ZSkKLXsKLSAgICBBU1NFUlQoIW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7Ci0K
LSAgICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlKCks
IGJhc2VHbHlwaCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoIW1heGltdW1HbHlw
aFdpZHRoKSB7Ci0gICAgICAgIC8vIFdlIGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBo
IGlzIGxhcmdlIGVub3VnaC4KLSAgICAgICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwg
PyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUds
eXBoKTsKLSAgICAgICAgaWYgKHRhcmdldFNpemUgPD0gYmFzZVNpemUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgR2x5cGhBc3NlbWJseURhdGEgYXNzZW1ibHlEYXRhOwotICAg
IGlmIChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkgewotICAgICAgICBWZWN0b3I8R2x5cGg+
IHNpemVWYXJpYW50czsKLSAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5
UGFydD4gYXNzZW1ibHlQYXJ0czsKLSAgICAgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkt
PmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlh
bnRzLCBhc3NlbWJseVBhcnRzKTsKLSAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlh
bnRzLgotICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7Ci0g
ICAgICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9u
dCk7Ci0gICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCi0gICAgICAgICAgICAgICAg
Km1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNl
V2lkdGhGb3JHbHlwaChnbHlwaERhdGEpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
c2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNl
V2lkdGhGb3JHbHlwaChnbHlwaERhdGEpOwotICAgICAgICAgICAgICAgIGlmIChzaXplID49IHRh
cmdldFNpemUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFdlIHZlcmlmeSBpZiB0aGVyZSBpcyBhIGNvbnN0cnVjdGlv
bi4KLSAgICAgICAgaWYgKCFnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soYXNzZW1ibHlQYXJ0cywg
YXNzZW1ibHlEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoIW1faXNWZXJ0aWNhbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJ
ZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8gdGhl
IFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgotICAgICAgICBjb25zdCBTdHJldGNoeUNoYXJh
Y3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9PSBt
X3RleHRDb250ZW50KSB7Ci0gICAgICAgICAgICAgICAgc3RyZXRjaHlDaGFyYWN0ZXIgPSAmc3Ry
ZXRjaHlDaGFyYWN0ZXJzW2luZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAqIDIp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQgZGly
ZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRpbmcgLTEgb3IgKzEgYWNj
b3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgIGluZGV4
ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBk
aWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVyLCB3
ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgotICAgICAgICBpZiAoIXN0cmV0Y2h5Q2hh
cmFjdGVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFdlIGNvbnZlcnQgdGhl
IGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEuCi0g
ICAgICAgIGFzc2VtYmx5RGF0YS50b3AgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxzZSk7Ci0gICAgICAg
IGFzc2VtYmx5RGF0YS5leHRlbnNpb24gPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxzZSk7Ci0g
ICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20gPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFyLCBmYWxzZSk7Ci0g
ICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hh
ciA/IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlD
aGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKSA6IEdseXBoRGF0YSgpOwotICAgIH0KLQotICAg
IC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1heGltdW0gd2lkdGgsIHZlcmlmeSBlYWNoIGNv
bXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAgKm1heGltdW1H
bHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JH
bHlwaChhc3NlbWJseURhdGEudG9wKSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0
ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlE
YXRhLmV4dGVuc2lvbikpOwotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgq
bWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRk
bGUpKTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlw
aFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBpcyBs
YXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3ZlcmxhcHMuCi0gICAgZmxvYXQgbWluU2l6ZSA9
IG1faXNWZXJ0aWNhbCA/Ci0gICAgICAgIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3Ap
ICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChh
c3NlbWJseURhdGEuYm90dG9tKQotICAgICAgICA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2Vt
Ymx5RGF0YS5sZWZ0KSArIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUp
ICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnJpZ2h0KTsKLSAgICBpZiAobWlu
U2l6ZSA+IHRhcmdldFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldEdseXBoQXNzZW1i
bHkoYXNzZW1ibHlEYXRhKTsKLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRl
U3R5bGUoKQogewogICAgIEFTU0VSVChmaXJzdENoaWxkKCkpOwogICAgIGlmICghZmlyc3RDaGls
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0cmV0Y2hUeXBlID0gVW5zdHJldGNoZWQ7
Ci0gICAgbV9pdGFsaWNDb3JyZWN0aW9uID0gMDsKKyAgICBtX21hdGhPcGVyYXRvci51bnN0cmV0
Y2goKTsKKyAgICBtX21hdGhPcGVyYXRvci5tX2l0YWxpY0NvcnJlY3Rpb24gPSAwOwogICAgIC8v
IFdlIGFkZCBzcGFjaW5nIGFyb3VuZCB0aGUgb3BlcmF0b3IuCiAgICAgLy8gRklYTUU6IFRoZSBz
cGFjaW5nIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hvbGUgZW1iZWxsaXNoZWQgb3BlcmF0b3Ig
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzEpLgogICAgIC8v
IEZJWE1FOiBUaGUgc3BhY2luZyBzaG91bGQgb25seSBiZSBhZGRlZCBpbnNpZGUgKHBlcmhhcHMg
aW5mZXJyZWQpIG1yb3cgKGh0dHA6Ly93d3cudzMub3JnL1RSL01hdGhNTC9jaGFwdGVyMy5odG1s
I3ByZXNtLm9wc3BhY2luZykuCkBAIC02MjYsMjUgKzM2OSwyNiBAQCB2b2lkIFJlbmRlck1hdGhN
TE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiAgICAgaWYgKCFzaG91bGRBbGxvd1N0cmV0Y2hpbmco
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9tYXRoT3BlcmF0b3Iuc2V0T3BlcmF0b3IobV90
ZXh0Q29udGVudCwgbV9pc1ZlcnRpY2FsKTsKICAgICBpZiAobV9pc1ZlcnRpY2FsICYmIGlzTGFy
Z2VPcGVyYXRvckluRGlzcGxheVN0eWxlKCkpCi0gICAgICAgIGZpbmREaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmZpbmREaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKHN0eWxlKCkpOwogICAgIGVsc2UgewotICAgICAgICBmaW5kU3RyZXRjaHlEYXRh
KG51bGxwdHIsIHN0cmV0Y2hTaXplKCkpOwotICAgICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBV
bnN0cmV0Y2hlZCkKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuZmluZFN0cmV0Y2h5RGF0YShzdHls
ZSgpLCBudWxscHRyLCBzdHJldGNoU2l6ZSgpKTsKKyAgICAgICAgaWYgKCFtX21hdGhPcGVyYXRv
ci5pc1N0cmV0Y2hlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X2lzVmVydGljYWwgJiYgbV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFudCkgeworICAgIGlmICht
X2lzVmVydGljYWwgJiYgbV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0
b3I6OlNpemVWYXJpYW50KSB7CiAgICAgICAgIC8vIFdlIHJlc2l6ZSB0aGUgb3BlcmF0b3IgdG8g
bWF0Y2ggdGhlIG9uZSBvZiB0aGUgc2l6ZSB2YXJpYW50LgogICAgICAgICBpZiAoaXNMYXJnZU9w
ZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIHN0cmV0Y2ggc2l6
ZSBpcyBhY3R1YWxseSBub3QgaW52b2x2ZWQgaW4gdGhlIHNlbGVjdGlvbiBvZiB0aGUgc2l6ZSB2
YXJpYW50IGluIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yLgogICAgICAgICAgICAgLy8g
V2Ugc2ltcGx5IHVzZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgc2VsZWN0ZWQgc2l6ZSB2
YXJpYW50IGdseXBoLgotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9
IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBt
X3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAg
ICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHJlc2NhbGUgdGhlIGhlaWdodCBhbmQg
ZGVwdGggcHJvcG9ydGlvbmF0ZWx5LgotICAgICAgICAgICAgZmxvYXQgdmFyaWFudFNpemUgPSBo
ZWlnaHRGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICAgICAgZmxvYXQgdmFyaWFudFNpemUg
PSBoZWlnaHRGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOwogICAgICAgICAgICAg
ZmxvYXQgc2l6ZSA9IHN0cmV0Y2hTaXplKCk7CiAgICAgICAgICAgICBmbG9hdCBhc3BlY3QgPSBz
aXplID4gMCA/IHZhcmlhbnRTaXplIC8gc2l6ZSA6IDEuMDsKICAgICAgICAgICAgIG1fc3RyZXRj
aEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwpAQCAtNjUzLDMwICszOTcsMzAgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIH0KIAogICAgIGlmICgh
bV9pc1ZlcnRpY2FsKSB7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFNpemVWYXJpYW50
KSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaCht
X3ZhcmlhbnQpOworICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBN
YXRoT3BlcmF0b3I6OlNpemVWYXJpYW50KSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhC
b3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOwogICAgICAg
ICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IC1nbHlwaEJvdW5kcy55KCk7CiAg
ICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBnbHlwaEJvdW5kcy5tYXhZ
KCk7Ci0gICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1f
dmFyaWFudCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2Vt
Ymx5KSB7CisgICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tYXRoT3Bl
cmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OkdseXBoQXNzZW1ibHkpIHsKICAg
ICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kczsKICAgICAgICAgICAgIG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUgPSAwOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jh
c2VsaW5lID0gMDsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaCht
X2Fzc2VtYmx5LmxlZnQpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmxlZnQpOwogICAgICAgICAgICAgbV9zdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhC
ZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBnbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkucmlnaHQpOworICAgICAgICAgICAgZ2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LnJpZ2h0
KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxM
YXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgp
KTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExh
eW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgp
KTsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5
LmV4dGVuc2lvbik7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKICAgICAgICAgICAgIG1fc3RyZXRj
aEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRj
aERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRo
QmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgaWYgKG1f
YXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIGdseXBoQm91bmRz
ID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAgICAgICAgICAgaWYgKG1f
bWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
ICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJs
eS5taWRkbGUpOwogICAgICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUg
PSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5
cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxp
bmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGds
eXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICB9CkBAIC02ODYsMjM3ICs0MzAsNTQgQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogCiBPcHRpb25hbDxpbnQ+
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQpCisgICAgaWYgKG1fbWF0aE9wZXJhdG9y
LmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIHJldHVybiBPcHRpb25hbDxpbnQ+KG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUpOwogICAgIHJldHVybiBSZW5kZXJNYXRoTUxUb2tlbjo6Zmlyc3RM
aW5lQmFzZWxpbmUoKTsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZUxv
Z2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AsIExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHVlcyYgY29tcHV0ZWRWYWx1ZXMpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQpCisgICAgaWYgKG1fbWF0aE9w
ZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBtX3N0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lICsgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lOwogICAgIFJl
bmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCwgbG9naWNhbFRvcCwg
Y29tcHV0ZWRWYWx1ZXMpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpw
YWludEdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgR2x5cGhEYXRhJiBkYXRhLCBjb25zdCBM
YXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcgdHJpbSkKLXsKLSAgICBGbG9h
dFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChkYXRhKTsKLQotICAgIExheW91dFJl
Y3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBMYXlvdXRTaXplKGdseXBoQm91bmRzLngoKSArIGds
eXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91bmRzLmhlaWdodCgpKSk7Ci0gICAgZ2x5cGhQYWlu
dFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5cGhCb3VuZHMueSgpKTsKLQotICAgIC8vIEluIG9y
ZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVnbHkgd2l0aCBvbmUgYW5vdGhlciB3ZSBzbmFwIHRo
ZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVsIGJvdW5kYXJpZXMKLSAgICAvLyBhbmQgdHJpbSBv
ZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJpbSBpcyB0byBhY2NvdW50IGZvciBmb250cyB0aGF0
IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZlIGxlc3MKLSAgICAvLyB0aGFuIGZ1bGwgY292ZXJh
Z2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBpbnRyb2R1Y2Ugc21hbGwgc2VhbXMgYmV0d2VlbiBj
b25uZWN0ZWQgZ2x5cGhzLgotICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0Owot
ICAgIHN3aXRjaCAodHJpbSkgewotICAgIGNhc2UgVHJpbVRvcDoKLSAgICAgICAgZ2x5cGhQYWlu
dFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAxKTsKLSAgICAg
ICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBUcmltQm90dG9tOgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlm
dE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKLSAgICAgICAg
Y2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltVG9wQW5kQm90dG9tOgotICAgICAgICBnbHlwaFBhaW50
UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOwotICAgICAg
ICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZs
b29yKCkgLSAxKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJl
Y3QueSgpKTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJl
Y3QubWF4WSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltTGVmdDoKLSAgICAgICAg
Z2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAx
KTsKLSAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmltUmlnaHQ6Ci0gICAgICAgIGdseXBoUGFpbnRS
ZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOwot
ICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0QW5kUmlnaHQ6Ci0gICAgICAgIGds
eXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkuY2VpbCgpICsgMSk7
Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5t
YXhYKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlw
aFBhaW50UmVjdC54KCkpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlw
aFBhaW50UmVjdC5tYXhYKCkpOwotICAgIH0KLQotICAgIC8vIENsaXBwaW5nIHRoZSBlbmNsb3Np
bmcgSW50UmVjdCBhdm9pZHMgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXQgam9pbmVkIGVkZ2VzLgot
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7
Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIEdseXBoQnVmZmVy
IGJ1ZmZlcjsKLSAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwgYWR2YW5jZVdp
ZHRoRm9yR2x5cGgoZGF0YSkpOwotICAgIGluZm8uY29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUo
KS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdpbik7Ci0KLSAg
ICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKG1f
aXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3NlbWJseSk7
Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJU
KGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3Ig
dGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICBp
ZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwotCi0gICAgRmxvYXRS
ZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5leHRlbnNpb24pOwot
Ci0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93cyB1cyB0byBk
cmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAgICAvLyByZWdpb25zIG9m
IHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJhdyAoaGFpcnkg
cGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAgICBMYXlvdXRSZWN0IGNs
aXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZnJvbS55
KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnkoKSk7Ci0gICAgaW5mby5j
b250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1taW5nIG1heSByZW1vdmUg
dXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3
ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zmc2V0VG9HbHlwaFRvcCA9
IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlv
dXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBoVG9wKTsKLSAgICBGbG9h
dFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hp
bGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkgewotICAgICAgICBsYXN0
UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24s
IGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0
WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5oZWlnaHQoKSk7Ci0KLSAg
ICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwg
ZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFu
Z2xlCi0gICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcg
bm90aGluZy4KLSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQotewotICAgIEFTU0VSVCgh
bV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5
KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKLSAgICBBU1NF
UlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKLQotICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZv
ciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAg
IGlmIChmcm9tLngoKSA9PSB0by54KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNvbnRleHQoKSk7Ci0KLSAgICAvLyBD
bGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJv
dHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQotICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRv
bSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFu
ZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgotICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9
IGluZm8ucmVjdDsKLSAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhmcm9tLngoKSk7Ci0gICAg
Y2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8odG8ueCgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5j
bGlwKGNsaXBCb3VuZHMpOwotCi0gICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28g
cGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIGV4dGVuZGVyIGdseXBoLCBzbyB3ZSBtb3ZlIGl0
IGxlZnQgYnkgdHdvIHBpeGVscy4KLSAgICBmbG9hdCBvZmZzZXRUb0dseXBoTGVmdCA9IC0yOwot
ICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCkgKyBvZmZz
ZXRUb0dseXBoTGVmdCwgc3RkOjptaW4oZnJvbS55KCksIHRvLnkoKSkgKyBtX3N0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lKTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJv
bSwgRmxvYXRTaXplKCkpOwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFgo
KSA8IHRvLngoKSkgewotICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgo
aW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0
KTsKLSAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54KCkgKyBsYXN0UGFpbnRl
ZEdseXBoUmVjdC53aWR0aCgpKTsKLQotICAgICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQg
aWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGggaGFzIGJlZW4g
cmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAgICAgLy8gd2l0aCB0cmltbWluZy4g
SW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgotICAgICAgICBpZiAobGFzdFBhaW50
ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCiB2
b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6cGFpbnQo
aW5mbywgcGFpbnRPZmZzZXQpOwogCi0gICAgaWYgKGluZm8uY29udGV4dCgpLnBhaW50aW5nRGlz
YWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHN0eWxlKCku
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgbV9zdHJldGNoVHlwZSA9PSBVbnN0cmV0Y2hlZCkK
KyAgICBpZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSB8fCAhbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsK
ICAgICBpbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3Ioc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwogCi0gICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6
ZVZhcmlhbnQpIHsKLSAgICAgICAgQVNTRVJUKG1fdmFyaWFudC5pc1ZhbGlkKCkpOworICAgIGlm
IChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlh
bnQpIHsKKyAgICAgICAgQVNTRVJUKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5pc1ZhbGlkKCkp
OwogICAgICAgICBHbHlwaEJ1ZmZlciBidWZmZXI7Ci0gICAgICAgIGJ1ZmZlci5hZGQobV92YXJp
YW50LmdseXBoLCBtX3ZhcmlhbnQuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50
KSk7CisgICAgICAgIGJ1ZmZlci5hZGQobV9tYXRoT3BlcmF0b3IubV92YXJpYW50LmdseXBoLCBt
X21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuZm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRo
T3BlcmF0b3IubV92YXJpYW50KSk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9wTGVm
dCA9IGNlaWxlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7Ci0gICAgICAgIEZs
b2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fdmFyaWFudCk7CisgICAgICAg
IEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1f
dmFyaWFudCk7CiAgICAgICAgIExheW91dFBvaW50IG9wZXJhdG9yT3JpZ2luKG9wZXJhdG9yVG9w
TGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSBnbHlwaEJvdW5kcy55KCkpOwotICAgICAg
ICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlKCkuZm9udENhc2NhZGUoKSwgKm1fdmFy
aWFudC5mb250LCBidWZmZXIsIDAsIDEsIG9wZXJhdG9yT3JpZ2luKTsKKyAgICAgICAgaW5mby5j
b250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICptX21hdGhPcGVyYXRv
ci5tX3ZhcmlhbnQuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsKQotICAgICAgICBwYWludFZl
cnRpY2FsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7Ci0gICAgZWxzZQotICAgICAg
ICBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGluZm8sIHBhaW50T2Zmc2V0KTsKLX0KLQot
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgQVNT
RVJUKG1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUgPT0gR2x5cGhBc3Nl
bWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJU
KG1fYXNzZW1ibHkuYm90dG9tLmlzVmFsaWQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgcG9zaXRpb25p
bmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMg
bGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgbV9t
YXRoT3BlcmF0b3IubV9hc2NlbnQgPSBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lOworICAg
IG1fbWF0aE9wZXJhdG9yLm1fZGVzY2VudCA9IG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZTsK
KyAgICBtX21hdGhPcGVyYXRvci5tX3dpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0
UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIG9w
ZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9s
ZWFkaW5nU3BhY2UgOiBtX3RyYWlsaW5nU3BhY2UsIDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9
IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7Ci0gICAgRmxvYXRSZWN0IHRvcEdseXBo
Qm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3ApOwotICAgIExheW91dFBvaW50
IHRvcEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkg
LSB0b3BHbHlwaEJvdW5kcy55KCkpOwotICAgIExheW91dFJlY3QgdG9wR2x5cGhQYWludFJlY3Qg
PSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkudG9wLCB0b3BHbHlwaE9yaWdpbiwgVHJpbUJv
dHRvbSk7Ci0KLSAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX2Fzc2VtYmx5LmJvdHRvbSk7Ci0gICAgTGF5b3V0UG9pbnQgYm90dG9tR2x5cGhPcmlnaW4o
b3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG9mZnNldEhlaWdodCgp
IC0gKGJvdHRvbUdseXBoQm91bmRzLmhlaWdodCgpICsgYm90dG9tR2x5cGhCb3VuZHMueSgpKSk7
Ci0gICAgTGF5b3V0UmVjdCBib3R0b21HbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywg
bV9hc3NlbWJseS5ib3R0b20sIGJvdHRvbUdseXBoT3JpZ2luLCBUcmltVG9wKTsKLQotICAgIGlm
IChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gQ2VudGVyIHRoZSBn
bHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRz
LiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50IGhlaWdodCB0b3dhcmQgdGhlIGJvdHRvbSBn
bHlwaC4KLSAgICAgICAgRmxvYXRSZWN0IG1pZGRsZUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9hc3NlbWJseS5taWRkbGUpOwotICAgICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9y
aWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BHbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBt
aWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgKGJvdHRvbUdseXBoUGFpbnRS
ZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1heFkoKSkgLyAyLjApKTsKLSAgICAgICAgbWlk
ZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KDAsIG1pZGRsZUdseXBoQm91bmRzLmhl
aWdodCgpIC8gMi4wKSk7Ci0KLSAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVj
dCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2lu
LCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkds
eXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIG1pZGRsZUdseXBo
UGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0
ZW5zaW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwg
Ym90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZvLCB0b3BHbHlwaFBhaW50UmVj
dC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigp
KTsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhB
c3NlbWJseShQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkK
LXsKLSAgICBBU1NFUlQoIW1faXNWZXJ0aWNhbCk7Ci0gICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUg
PT0gR2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkubGVmdC5pc1ZhbGlkKCkp
OwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LnJpZ2h0LmlzVmFsaWQoKSk7Ci0KLSAgICAvLyBXZSBh
cmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBn
bHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBi
b3guCi0gICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQgKyBsb2Nh
dGlvbigpOwotICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKG1fbGVhZGluZ1NwYWNlLCAwKTsKLSAg
ICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRvcExlZnQpOwotICAg
IExheW91dFBvaW50IGxlZnRHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRv
clRvcExlZnQueSgpICsgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAgTGF5b3V0
UmVjdCBsZWZ0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkubGVm
dCwgbGVmdEdseXBoT3JpZ2luLCBUcmltUmlnaHQpOwotCi0gICAgRmxvYXRSZWN0IHJpZ2h0R2x5
cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LnJpZ2h0KTsKLSAgICBMYXlvdXRQ
b2ludCByaWdodEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCkgKyBvZmZzZXRXaWR0aCgp
IC0gcmlnaHRHbHlwaEJvdW5kcy53aWR0aCgpLCBvcGVyYXRvclRvcExlZnQueSgpICsgbV9zdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAgTGF5b3V0UmVjdCByaWdodEdseXBoUGFpbnRS
ZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LnJpZ2h0LCByaWdodEdseXBoT3JpZ2lu
LCBUcmltTGVmdCk7Ci0KLSAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBl
bmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KLSAgICAgICAgTGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhP
cmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVmdEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAg
IG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgocmlnaHRHbHlwaFBhaW50UmVj
dC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4WCgpKSAvIDIuMCwgMCkpOwotICAgICAgICBM
YXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2Vt
Ymx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOwotICAgICAg
ICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBsZWZ0R2x5cGhQYWludFJl
Y3QubWF4WE1pbllDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIo
KSk7Ci0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKGluZm8sIG1pZGRs
ZUdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWlu
WE1pbllDb3JuZXIoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCBy
aWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgIGlmIChtX2lzVmVydGlj
YWwpCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KHN0
eWxlKCksIGluZm8sIG9wZXJhdG9yVG9wTGVmdCk7CisgICAgZWxzZQorICAgICAgICBtX21hdGhP
cGVyYXRvci5wYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KHN0eWxlKCksIGluZm8sIG9wZXJh
dG9yVG9wTGVmdCk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hpbGRy
ZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
UGFpbnRJbmZvJiBwYWludEluZm9Gb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCiB7CiAgICAg
Ly8gV2Ugc2tpcCBwYWludGluZyBmb3IgaW52aXNpYmxlIG9wZXJhdG9ycyB0b28gdG8gYXZvaWQg
c29tZSAibWlzc2luZyBjaGFyYWN0ZXIiIGdseXBoIHRvIGFwcGVhciBpZiBhcHByb3ByaWF0ZSBt
YXRoIGZvbnRzIGFyZSBub3QgYXZhaWxhYmxlLgotICAgIGlmIChtX3N0cmV0Y2hUeXBlICE9IFVu
c3RyZXRjaGVkIHx8IGlzSW52aXNpYmxlT3BlcmF0b3IoKSkKKyAgICBpZiAobV9tYXRoT3BlcmF0
b3IuaXNTdHJldGNoZWQoKSB8fCBpc0ludmlzaWJsZU9wZXJhdG9yKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBSZW5kZXJNYXRoTUxUb2tlbjo6cGFpbnRDaGlsZHJlbihwYWludEluZm8sIHBhaW50
T2Zmc2V0LCBwYWludEluZm9Gb3JDaGlsZCwgdXNlUHJpbnRSZWN0KTsKIH0KQEAgLTkzMSwxOSAr
NDkyLDE5IEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VF
cnJvcigpCiAgICAgLy8gSGVuY2Ugd2UgZGV0ZXJtaW5lIHRoZSBlcnJvciBpbiB0aGUgbG9naWNh
bCB3aWR0aCB3aXRoIHJlc3BlY3QgdG8gdGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgZ2x5cGgocykg
dXNlZCB0byBwYWludCB0aGUgb3BlcmF0b3IuCiAgICAgTGF5b3V0VW5pdCB3aWR0aCA9IGxvZ2lj
YWxXaWR0aCgpOwogCi0gICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gVW5zdHJldGNoZWQpIHsKKyAg
ICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpIHsKICAgICAgICAgR2x5cGhEYXRh
IGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHRleHRD
b250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7CiAgICAgICAgIHJl
dHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpOwogICAgIH0KIAotICAgIGlm
IChtX3N0cmV0Y2hUeXBlID09IFNpemVWYXJpYW50KQotICAgICAgICByZXR1cm4gd2lkdGggLSBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgIGlmIChtX21hdGhPcGVyYXRvci5t
X3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpCisgICAgICAgIHJldHVy
biB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7
CiAKLSAgICBmbG9hdCBhc3NlbWJseVdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9hc3Nl
bWJseS50b3ApOwotICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbSkpOwotICAgIGFzc2VtYmx5V2lk
dGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2Vt
Ymx5LmV4dGVuc2lvbikpOwotICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCi0g
ICAgICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSkpOworICAgIGZsb2F0IGFzc2VtYmx5V2lkdGgg
PSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LnRvcCk7Cisg
ICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZv
ckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuYm90dG9tKSk7CisgICAgYXNzZW1ibHlX
aWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0
aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5zaW9uKSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9y
Lm1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkKKyAgICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0
ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJhdG9y
Lm1fYXNzZW1ibHkubWlkZGxlKSk7CiAgICAgcmV0dXJuIHdpZHRoIC0gYXNzZW1ibHlXaWR0aDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5oCmluZGV4IGI0MDg1MmIuLjYzMjE0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKICNpbmNsdWRlICJNYXRoTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmgiCisjaW5jbHVk
ZSAiTWF0aE9wZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgogI2luY2x1
ZGUgIlJlbmRlck1hdGhNTFRva2VuLmgiCiAKQEAgLTUxLDcgKzUyLDcgQEAgcHVibGljOgogICAg
IC8vIEZJWE1FOiBUaGUgZGlzcGxheXN0eWxlIHByb3BlcnR5IGlzIG5vdCBpbXBsZW1lbnRlZCAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODczNykuCiAgICAgYm9v
bCBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpIGNvbnN0IHsgcmV0dXJuICFoYXNPcGVy
YXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSkgJiYgaGFzT3BlcmF0
b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6TGFyZ2VPcCk7IH0KICAgICBib29sIGlz
VmVydGljYWwoKSBjb25zdCB7IHJldHVybiBtX2lzVmVydGljYWw7IH0KLSAgICBMYXlvdXRVbml0
IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2l0YWxpY0NvcnJlY3Rpb247IH0K
KyAgICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX21hdGhP
cGVyYXRvci5pdGFsaWNDb3JyZWN0aW9uKCk7IH0KIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwogICAg
IHZvaWQgdXBkYXRlU3R5bGUoKSBmaW5hbDsKQEAgLTczLDMyICs3NCw2IEBAIHByb3RlY3RlZDoK
ICAgICBVQ2hhciB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0K
IAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgR2x5cGhBc3NlbWJseURhdGEgewotICAgICAgICB1bmlv
biB7Ci0gICAgICAgICAgICBHbHlwaERhdGEgdG9wOwotICAgICAgICAgICAgR2x5cGhEYXRhIHJp
Z2h0OwotICAgICAgICB9OwotICAgICAgICBHbHlwaERhdGEgZXh0ZW5zaW9uOwotICAgICAgICB1
bmlvbiB7Ci0gICAgICAgICAgICBHbHlwaERhdGEgYm90dG9tOwotICAgICAgICAgICAgR2x5cGhE
YXRhIGxlZnQ7Ci0gICAgICAgIH07Ci0gICAgICAgIEdseXBoRGF0YSBtaWRkbGU7Ci0gICAgR2x5
cGhBc3NlbWJseURhdGEoKQotICAgIDogdG9wKCksIGV4dGVuc2lvbigpLCBib3R0b20oKSwgbWlk
ZGxlKCkgeyB9Ci0gICAgfTsKLSAgICBlbnVtIFN0cmV0Y2hUeXBlIHsKLSAgICAgICAgVW5zdHJl
dGNoZWQsCi0gICAgICAgIFNpemVWYXJpYW50LAotICAgICAgICBHbHlwaEFzc2VtYmx5Ci0gICAg
fTsKLSAgICBTdHJldGNoVHlwZSBtX3N0cmV0Y2hUeXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAg
R2x5cGhEYXRhIG1fdmFyaWFudDsKLSAgICAgICAgR2x5cGhBc3NlbWJseURhdGEgbV9hc3NlbWJs
eTsKLSAgICB9OwotICAgIExheW91dFVuaXQgbV9pdGFsaWNDb3JyZWN0aW9uOwotCiAgICAgY29u
c3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlzQW5vbnltb3Vz
KCkgPyAiUmVuZGVyTWF0aE1MT3BlcmF0b3IgKGFub255bW91cykiIDogIlJlbmRlck1hdGhNTE9w
ZXJhdG9yIjsgfQogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYsIGNv
bnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3Qp
IGZpbmFsOwogICAgIGJvb2wgaXNSZW5kZXJNYXRoTUxPcGVyYXRvcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KQEAgLTExMiwyNyArODcsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBz
aG91bGRBbGxvd1N0cmV0Y2hpbmcoKSBjb25zdDsKIAotICAgIGJvb2wgZ2V0QmFzZUdseXBoKGNv
bnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplVmFy
aWFudChjb25zdCBHbHlwaERhdGEmKTsKLSAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29uc3Qg
R2x5cGhBc3NlbWJseURhdGEmKTsKLSAgICBib29sIGdldEdseXBoQXNzZW1ibHlGYWxsQmFjayhW
ZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiwgR2x5cGhBc3NlbWJseURhdGEm
KSBjb25zdDsKLSAgICB2b2lkIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7Ci0gICAg
dm9pZCBmaW5kU3RyZXRjaHlEYXRhKGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5p
dCB0YXJnZXRTaXplID0gMCk7Ci0KLSAgICBlbnVtIEdseXBoUGFpbnRUcmltbWluZyB7Ci0gICAg
ICAgIFRyaW1Ub3AsCi0gICAgICAgIFRyaW1Cb3R0b20sCi0gICAgICAgIFRyaW1Ub3BBbmRCb3R0
b20sCi0gICAgICAgIFRyaW1MZWZ0LAotICAgICAgICBUcmltUmlnaHQsCi0gICAgICAgIFRyaW1M
ZWZ0QW5kUmlnaHQKLSAgICB9OwotCi0gICAgTGF5b3V0UmVjdCBwYWludEdseXBoKFBhaW50SW5m
byYsIGNvbnN0IEdseXBoRGF0YSYsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFp
bnRUcmltbWluZyk7Ci0gICAgdm9pZCBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoUGFp
bnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7
Ci0gICAgdm9pZCBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lk
IHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7Ci0gICAgdm9pZCBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRl
KE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
ICAgIHZvaWQgc2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9y
RGljdGlvbmFyeTo6RmxhZywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CiAg
ICAgdm9pZCBzZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1M
T3BlcmF0b3JEaWN0aW9uYXJ5OjpFbnRyeSopOwpAQCAtMTQ5LDYgKzEwMyw3IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCBtX3RyYWlsaW5nU3BhY2U7CiAgICAgTGF5b3V0VW5pdCBtX21pblNp
emU7CiAgICAgTGF5b3V0VW5pdCBtX21heFNpemU7CisgICAgTWF0aE9wZXJhdG9yIG1fbWF0aE9w
ZXJhdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMi44LjAucmMzCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277473</attachid>
            <date>2016-04-27 06:24:01 -0700</date>
            <delta_ts>2016-05-09 00:50:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0003-move-to-mathoperator.patch</filename>
            <type>text/plain</type>
            <size>76633</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSAxMDI4MzZhZDM3OThjY2NkOTliMjhhYTFkMTA5NTUwYzIwZGI1ZjY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAwOToyMToxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDMvMTld
IG1vdmUgdG8gbWF0aG9wZXJhdG9yCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYwICsrKwogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAgIDggKwogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwICAgfCA1MTUgKysrKysrKysrKysrKysrKysr
KysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggICAgIHwg
MTEwICsrKysrCiAuLi4vcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAg
ICAgICB8IDUzNSArKy0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmggICAgICAgIHwgIDUxICstCiA3IGZpbGVzIGNoYW5nZWQsIDc0
NSBpbnNlcnRpb25zKCspLCA1MzUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOGMxY2JmMi4uYWQzMDkzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTI1MTEsNiArMjUxMSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJpbmcvbWF0aG1sL01h
dGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAgIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDkyODA0Ni4uNTE0
NGFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY1IEBACiAyMDE2LTA0LTIyICBGcmVkZXJpYyBX
YW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAorICAgICAgICBNb3ZlIHNlbGVjdGlvbiBhbmQgZHJh
d2luZyBvZiBzdHJldGNoeSBvcGVyYXRvcnMgaW50byBhIHNlcGFyYXRlIE1hdGhPcGVyYXRvciBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OiBBZGQgdGhlIE1hdGhPcGVyYXRvciBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpib3VuZHNGb3JH
bHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3Jl
OjpoZWlnaHRGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAg
ICAgIChXZWJDb3JlOjphZHZhbmNlV2lkdGhGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0
aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6Ok1hdGhPcGVyYXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogTW92ZWQgZnJvbSBSZW5k
ZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0U2l6
ZVZhcmlhbnQpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogTW92ZWQgZnJvbSBSZW5kZXJN
YXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmluZERpc3Bs
YXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yIHdp
dGggYWRkaXRpb25hbCBzdHlsZSBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OmdldEdseXBoQXNzZW1ibHlGYWxsQmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lv
bkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50VmVy
dGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0
b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4KKyAgICAgICAgKiByZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OmlzU3RyZXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6dW5z
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURh
dGE6OkdseXBoQXNzZW1ibHlEYXRhKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c3RyZXRjaFNpemUpOgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIEZvciBub3cg
d2UgY2FsbCBzZXRPcGVyYXRvciB0byB0cmFuc21pdCBpbmZvcm1hdGlvbiB0byBtX21hdGhPcGVy
YXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHls
ZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICBGb3Igbm93
IHdlIHNldCBzb21lIG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJhbnNtaXQgaXQgc29tZSBp
bmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJz
dExpbmVCYXNlbGluZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQp
OiBEaXR0by4KKyAgICAgICAgRm9yIG5vdyB3ZSBzZXQgc29tZSBtX21hdGhPcGVyYXRvciBtZW1i
ZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbik6IFVwZGF0ZWQgdG8gdXNlIE1hdGhP
cGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6
OnRyYWlsaW5nU3BhY2VFcnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEdseXBoQXNzZW1i
bHlGYWxsQmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbmRTdHJldGNoeURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRo
VmVydGljYWxFeHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGlj
YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6IFVwZGF0ZWQg
dG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IERlbGV0
ZWQuCisKKzIwMTYtMDQtMjIgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCiAg
ICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yOiByZWZhY3RvciBtYW5hZ2VtZW50IG9mIHN0cmV0
Y2h5IGRhdGEgYW5kIGl0YWxpYyBjb3JyZWN0aW9uCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5MTMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk2YmVkMTUuLjgyMzI0MTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE2NTksNiArMTY1OSw4IEBACiAJCTQzOTA0NkU4MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxTY3JpcHRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MzkwNDZENDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5o
ICovOyB9OwogCQk0MzkwNDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQz
OTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovOyB9
OwogCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENjEy
REEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggKi87IH07CisJCTQzOTA0
NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDUxMkRBMjVFODEyQUY4MEFDIC8q
IE1hdGhPcGVyYXRvci5jcHAgKi87IH07CisJCTQzOTA0NkVBMTJEQTI1RTgxMkFGODBBQyAvKiBN
YXRoT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAqLzsgfTsKIAkJ
NDM5MDQ2RUIxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ3MTJEQTI1RTgw
MEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgKi87IH07CiAJCTQzOTA0NkVDMTJEQTI1
RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRl
ck1hdGhNTFRva2VuLmggKi87IH07CiAJCTQzOUQzMzQzMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdB
bmltYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLzsgfTsK
QEAgLTkxODksNiArOTE5MSw4IEBACiAJCTQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxTY3JpcHRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ck1hdGhNTFNjcmlwdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDUx
MkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1hdGhNTFVuZGVyT3Zlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0Mzkw
NDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhPcGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQzOTA0NkQ2MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE9wZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ3MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJN
YXRoTUxUb2tlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJNYXRoTUxUb2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ4
MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzlEMzM0MDEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0ZWRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5MTIsNiArMTY5MTYsOCBAQAogCQkJCTQzOTA0
NkQ4MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovLAogCQkJCTQzOTA0
NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovLAogCQkJ
CTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLywK
KwkJCQk0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLywKKwkJ
CQk0MzkwNDZENjEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IG1hdGhtbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNzYxMiw2
ICsyNzYxOCw3IEBACiAJCQkJNDM5MDQ2RTYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFNxdWFyZVJvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBB
OSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250
cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZD
NSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjc1LDYgKzMx
MjgyLDcgQEAKIAkJCQk0MzkwNDZFNTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkg
LyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2RTkxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MzkwNDZFOTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlERTQ5QjMwOTE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVyTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGQTMwM0UxMzE2QzI5
QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29udHJvbHMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyZjg0MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcApAQCAtMCww
ICsxLDUxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKE1BVEhNTCkKKyNpbmNsdWRlICJNYXRoT3BlcmF0b3IuaCIKKworI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBGbG9hdFJlY3QgYm91bmRzRm9yR2x5
cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBkYXRhLmlzVmFsaWQoKSA/
IGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgoZGF0YS5nbHlwaCkgOiBGbG9hdFJlY3QoKTsKK30K
Kworc3RhdGljIGlubGluZSBmbG9hdCBoZWlnaHRGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRh
dGEpCit7CisgICAgcmV0dXJuIGJvdW5kc0ZvckdseXBoKGRhdGEpLmhlaWdodCgpOworfQorCitz
dGF0aWMgaW5saW5lIGZsb2F0IGFkdmFuY2VXaWR0aEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYg
ZGF0YSkKK3sKKyAgICByZXR1cm4gZGF0YS5pc1ZhbGlkKCkgPyBkYXRhLmZvbnQtPndpZHRoRm9y
R2x5cGgoZGF0YS5nbHlwaCkgOiAwOworfQorCisvLyBGSVhNRTogVGhpcyBoYXJkY29kZWQgZGF0
YSBjYW4gYmUgcmVtb3ZlZCB3aGVuIE9wZW5UeXBlIE1BVEggZm9udCBhcmUgd2lkZWx5IGF2YWls
YWJsZSAoaHR0cDovL3drYnVnLzE1NjgzNykuCitzdHJ1Y3QgU3RyZXRjaHlDaGFyYWN0ZXIgewor
ICAgIFVDaGFyIGNoYXJhY3RlcjsKKyAgICBVQ2hhciB0b3BDaGFyOworICAgIFVDaGFyIGV4dGVu
c2lvbkNoYXI7CisgICAgVUNoYXIgYm90dG9tQ2hhcjsKKyAgICBVQ2hhciBtaWRkbGVDaGFyOwor
fTsKKy8vIFRoZSBmaXJzdCBsZWZ0UmlnaHRQYWlyc0NvdW50IHBhaXJzIGNvcnJlc3BvbmQgdG8g
bGVmdC9yaWdodCBmZW5jZXMgdGhhdCBjYW4gZWFzaWx5IGJlIG1pcnJvcmVkIGluIFJUTC4KK3N0
YXRpYyBjb25zdCBzaG9ydCBsZWZ0UmlnaHRQYWlyc0NvdW50ID0gNTsKK3N0YXRpYyBjb25zdCBT
dHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNoYXJhY3RlcnNbMTRdID0geworICAgIHsgMHgyOCAg
LCAweDIzOWIsIDB4MjM5YywgMHgyMzlkLCAweDAgICAgfSwgLy8gbGVmdCBwYXJlbnRoZXNpcwor
ICAgIHsgMHgyOSAgLCAweDIzOWUsIDB4MjM5ZiwgMHgyM2EwLCAweDAgICAgfSwgLy8gcmlnaHQg
cGFyZW50aGVzaXMKKyAgICB7IDB4NWIgICwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMywgMHgwICAg
IH0sIC8vIGxlZnQgc3F1YXJlIGJyYWNrZXQKKyAgICB7IDB4NWQgICwgMHgyM2E0LCAweDIzYTUs
IDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IHNxdWFyZSBicmFja2V0CisgICAgeyAweDdiICAs
IDB4MjNhNywgMHgyM2FhLCAweDIzYTksIDB4MjNhOCB9LCAvLyBsZWZ0IGN1cmx5IGJyYWNrZXQK
KyAgICB7IDB4N2QgICwgMHgyM2FiLCAweDIzYWEsIDB4MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0
IGN1cmx5IGJyYWNrZXQKKyAgICB7IDB4MjMwOCwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMiwgMHgw
ICAgIH0sIC8vIGxlZnQgY2VpbGluZworICAgIHsgMHgyMzA5LCAweDIzYTQsIDB4MjNhNSwgMHgy
M2E1LCAweDAgICAgfSwgLy8gcmlnaHQgY2VpbGluZworICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4
MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBmbG9vcgorICAgIHsgMHgyMzBiLCAweDIz
YTUsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgZmxvb3IKKyAgICB7IDB4N2Mg
ICwgMHg3YywgICAweDdjLCAgIDB4N2MsICAgMHgwICAgIH0sIC8vIHZlcnRpY2FsIGJhcgorICAg
IHsgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDAgICAgfSwgLy8gZG91YmxlIHZl
cnRpY2FsIGxpbmUKKyAgICB7IDB4MjIyNSwgMHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgwICAg
IH0sIC8vIHBhcmFsbGVsIHRvCisgICAgeyAweDIyMmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEs
IDB4MCAgICB9IC8vIGludGVncmFsIHNpZ24KK307CisKK01hdGhPcGVyYXRvcjo6TWF0aE9wZXJh
dG9yKCkKKyAgICA6IG1fYmFzZUNoYXJhY3RlcigwKQorICAgICwgbV9pc1ZlcnRpY2FsKGZhbHNl
KQorICAgICwgbV9zdHJldGNoVHlwZShVbnN0cmV0Y2hlZCkKKyAgICAsIG1fd2lkdGgoMCkKKyAg
ICAsIG1fYXNjZW50KDApCisgICAgLCBtX2Rlc2NlbnQoMCkKKyAgICAsIG1faXRhbGljQ29ycmVj
dGlvbigwKQoreworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFz
ZUNoYXJhY3RlciwgYm9vbCBpc1ZlcnRpY2FsKQoreworICAgIG1fYmFzZUNoYXJhY3RlciA9IGJh
c2VDaGFyYWN0ZXI7CisgICAgbV9pc1ZlcnRpY2FsID0gaXNWZXJ0aWNhbDsKK30KKworYm9vbCBN
YXRoT3BlcmF0b3I6OmdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBo
RGF0YSYgYmFzZUdseXBoKSBjb25zdAoreworICAgIGJhc2VHbHlwaCA9IHN0eWxlLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1fYmFzZUNoYXJhY3RlciwgIXN0eWxlLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSk7CisgICAgcmV0dXJuIGJhc2VHbHlwaC5pc1ZhbGlkKCkgJiYg
YmFzZUdseXBoLmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKK30K
Kwordm9pZCBNYXRoT3BlcmF0b3I6OnNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYgc2l6
ZVZhcmlhbnQpCit7CisgICAgQVNTRVJUKHNpemVWYXJpYW50LmlzVmFsaWQoKSAmJiBzaXplVmFy
aWFudC5mb250LT5tYXRoRGF0YSgpKTsKKyAgICBtX3N0cmV0Y2hUeXBlID0gU2l6ZVZhcmlhbnQ7
CisgICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpz
ZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpCit7
CisgICAgbV9zdHJldGNoVHlwZSA9IEdseXBoQXNzZW1ibHk7CisgICAgbV9hc3NlbWJseSA9IGFz
c2VtYmx5RGF0YTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbmREaXNwbGF5U3R5bGVMYXJn
ZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBBU1NFUlQobV9pc1Zl
cnRpY2FsKTsKKworICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5
cGgoc3R5bGUsIGJhc2VHbHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKKyAgICBWZWN0
b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOworCisgICAg
Ly8gVGhlIHZhbHVlIG9mIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9v
IHNtYWxsLCBzbyB3ZSBlbnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0
aGUgc2l6ZSBvZiB0aGUgYmFzZSBnbHlwaC4KKyAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5I
ZWlnaHQgPSBzdGQ6Om1heChoZWlnaHRGb3JHbHlwaChiYXNlR2x5cGgpICogc3FydE9mVHdvRmxv
YXQsIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoQ29uc3RhbnQoKmJhc2VHbHlw
aC5mb250LCBPcGVuVHlwZU1hdGhEYXRhOjpEaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQpKTsKKwor
ICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRoVmFyaWFudHMoYmFzZUdseXBo
LmdseXBoLCB0cnVlLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOworCisgICAgLy8gV2Ug
Y2hvb3NlIHRoZSBmaXJzdCBzaXplIHZhcmlhbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZXhw
ZWN0ZWQgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGFuZCBvdGhlcndpc2UgZmFsbGJhY2sgdG8g
dGhlIGxhcmdlc3QgdmFyaWFudC4KKyAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZh
cmlhbnRzKSB7CisgICAgICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VH
bHlwaC5mb250KTsKKyAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAg
bV9pdGFsaWNDb3JyZWN0aW9uID0gZ2x5cGhEYXRhLmZvbnQtPm1hdGhEYXRhKCktPmdldEl0YWxp
Y0NvcnJlY3Rpb24oKmdseXBoRGF0YS5mb250LCBnbHlwaERhdGEuZ2x5cGgpOworICAgICAgICBp
ZiAoaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA+PSBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgTWF0aE9wZXJhdG9yOjpnZXRH
bHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBWZWN0
b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiYgYXNzZW1ibHlQYXJ0cywgR2x5cGhB
c3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKK3sKKyAgICAvLyBUaGUgc3RydWN0dXJlIG9mIHRo
ZSBPcGVuIFR5cGUgTWF0aCB0YWJsZSBpcyBhIGJpdCBtb3JlIGdlbmVyYWwgdGhhbiB0aGUgb25l
IGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBNYXRoT3BlcmF0b3IgY29kZSwgc28gd2UgdHJ5IHRvIGZh
bGxiYWNrIGluIGEgcmVhc29uYWJsZSB3YXkuCisgICAgLy8gRklYTUU6IE1hdGhPcGVyYXRvciBz
aG91bGQgc3VwcG9ydCB0aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDMyNykuCisgICAgLy8gV2UgdXNlIHRoZSBhcHByb2Fj
aCBvZiB0aGUgY29weUNvbXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9tYXRoamF4L01h
dGhKYXgtZGV2L2Jsb2IvbWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRpbC5weQorCisg
ICAgLy8gV2UgY291bnQgdGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2VzLgorICAgIGlu
dCBub25FeHRlbmRlckNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBh
cnRzKSB7CisgICAgICAgIGlmICghcGFydC5pc0V4dGVuZGVyKQorICAgICAgICAgICAgbm9uRXh0
ZW5kZXJDb3VudCsrOworICAgIH0KKyAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+IDMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVyZSBhcmUgdG9v
IG1hbnkgcGllY2VzLgorCisgICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBvZiBwaWVjZXMg
ZnJvbSBsZWZ0IHRvIHJpZ2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQgZnJvbSBib3R0
b20gdG8gdG9wIGZvciB2ZXJ0aWNhbCBvcGVyYXRvcnMuCisgICAgZW51bSBQYXJ0VHlwZSB7Cisg
ICAgICAgIFN0YXJ0LAorICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSwKKyAg
ICAgICAgTWlkZGxlLAorICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQsCisgICAg
ICAgIEVuZCwKKyAgICAgICAgTm9uZQorICAgIH07CisgICAgUGFydFR5cGUgZXhwZWN0ZWRQYXJ0
VHlwZSA9IFN0YXJ0OworICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOworICAg
IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPSAwOworICAgIGZvciAoYXV0byYgcGFydCA6IGFz
c2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7CisgICAg
ICAgICAgICAvLyBJZiB3ZSBvbmx5IGhhdmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVu
IHdlIHNraXAgdGhlIG1pZGRsZSBnbHlwaC4KKyAgICAgICAgICAgIGlmIChleHBlY3RlZFBhcnRU
eXBlID09IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4
cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChleHBlY3RlZFBhcnRUeXBlID09IE1pZGRsZSkKKyAgICAgICAgICAgICAgICBl
eHBlY3RlZFBhcnRUeXBlID0gRW5kOworICAgICAgICB9CisgICAgICAgIGlmIChwYXJ0LmlzRXh0
ZW5kZXIpIHsKKyAgICAgICAgICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkK
KyAgICAgICAgICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlw
aDsgLy8gV2UgY29weSB0aGUgZXh0ZW5kZXIgcGFydC4KKyAgICAgICAgICAgIGVsc2UgaWYgKGFz
c2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggIT0gcGFydC5nbHlwaCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhh
cyBkaWZmZXJlbnQgZXh0ZW5kZXJzLgorCisgICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFy
dFR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RhcnQ6CisgICAgICAgICAgICAgICAgLy8gV2Ug
aWdub3JlIHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFy
dFR5cGUgPSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgICAgIC8vIFdl
IGlnbm9yZSB0aGUgbWlkZGxlIHBhcnQuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlw
ZSA9IEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgY2FzZSBOb25lOgorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQg
ZXh0ZW5kZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZToKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5k
ZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBtdWx0
aXBsZSBjb25zZWN1dGl2ZSBleHRlbmRlcnMuCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5
cGUpIHsKKyAgICAgICAgY2FzZSBTdGFydDoKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxl
ZnQvYm90dG9tIHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0g
cGFydC5nbHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdl
ZW5TdGFydEFuZE1pZGRsZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEV4
dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgorICAgICAgICBjYXNlIE1pZGRsZToKKyAgICAg
ICAgICAgIC8vIFdlIGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgorICAgICAgICAgICAgYXNzZW1ibHlE
YXRhLm1pZGRsZS5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3RlZFBhcnRU
eXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgorICAgICAgICBjYXNl
IEVuZDoKKyAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgorICAgICAg
ICAgICAgYXNzZW1ibHlEYXRhLnRvcC5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBl
eHBlY3RlZFBhcnRUeXBlID0gTm9uZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
YXNlIE5vbmU6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBh
biB1bmV4cGVjdGVkIG5vbi1leHRlbmRlciBwYXJ0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmds
eXBoKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2Ug
YWx3YXlzIGFzc3VtZSB0aGF0IHdlIGhhdmUgYW4gZXh0ZW5zaW9uIGdseXBoLgorCisgICAgLy8g
SWYgd2UgZG9uJ3QgaGF2ZSB0b3AvYm90dG9tIGdseXBocywgd2UgdXNlIHRoZSBleHRlbnNpb24g
Z2x5cGguCisgICAgaWYgKCFhc3NlbWJseURhdGEudG9wLmdseXBoKQorICAgICAgICBhc3NlbWJs
eURhdGEudG9wLmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKKyAgICBpZiAo
IWFzc2VtYmx5RGF0YS5ib3R0b20uZ2x5cGgpCisgICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20u
Z2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOworCisgICAgYXNzZW1ibHlEYXRh
LnRvcC5mb250ID0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICBhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZvbnQ7CisgICAgYXNz
ZW1ibHlEYXRhLmJvdHRvbS5mb250ID0gYXNzZW1ibHlEYXRhLnRvcC5mb250OworICAgIGFzc2Vt
Ymx5RGF0YS5taWRkbGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPyBhc3NlbWJs
eURhdGEudG9wLmZvbnQgOiBudWxscHRyOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
TWF0aE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
ZmxvYXQqIG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUpCit7CisgICAg
QVNTRVJUKCFtYXhpbXVtR2x5cGhXaWR0aCB8fCBtX2lzVmVydGljYWwpOworCisgICAgR2x5cGhE
YXRhIGJhc2VHbHlwaDsKKyAgICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFzZUdseXBoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtYXhpbXVtR2x5cGhXaWR0aCkgeworICAgICAg
ICAvLyBXZSBkbyBub3Qgc3RyZXRjaCBpZiB0aGUgYmFzZSBnbHlwaCBpcyBsYXJnZSBlbm91Z2gu
CisgICAgICAgIGZsb2F0IGJhc2VTaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgo
YmFzZUdseXBoKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGJhc2VHbHlwaCk7CisgICAgICAgIGlm
ICh0YXJnZXRTaXplIDw9IGJhc2VTaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE1hdGhPcGVyYXRvcjo6R2x5cGhBc3NlbWJseURhdGEgYXNzZW1ibHlEYXRhOworICAgIGlm
IChiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkgeworICAgICAgICBWZWN0b3I8R2x5cGg+IHNp
emVWYXJpYW50czsKKyAgICAgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFy
dD4gYXNzZW1ibHlQYXJ0czsKKyAgICAgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdl
dE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIG1faXNWZXJ0aWNhbCwgc2l6ZVZhcmlhbnRz
LCBhc3NlbWJseVBhcnRzKTsKKyAgICAgICAgLy8gV2UgdmVyaWZ5IHRoZSBzaXplIHZhcmlhbnRz
LgorICAgICAgICBmb3IgKGF1dG8mIHNpemVWYXJpYW50IDogc2l6ZVZhcmlhbnRzKSB7CisgICAg
ICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhKHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7
CisgICAgICAgICAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpCisgICAgICAgICAgICAgICAgKm1h
eGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChnbHlwaERhdGEpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHNldFNpemVWYXJpYW50KGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgZmxvYXQgc2l6
ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgOiBhZHZhbmNlV2lk
dGhGb3JHbHlwaChnbHlwaERhdGEpOworICAgICAgICAgICAgICAgIGlmIChzaXplID49IHRhcmdl
dFNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFdlIHZlcmlmeSBpZiB0aGVyZSBpcyBhIGNvbnN0cnVjdGlvbi4K
KyAgICAgICAgaWYgKCFnZXRHbHlwaEFzc2VtYmx5RmFsbEJhY2soc3R5bGUsIGFzc2VtYmx5UGFy
dHMsIGFzc2VtYmx5RGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCFtX2lzVmVydGljYWwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Ly8gSWYgdGhlIGZvbnQgZG9lcyBub3QgaGF2ZSBhIE1BVEggdGFibGUsIHdlIGZhbGxiYWNrIHRv
IHRoZSBVbmljb2RlLW9ubHkgY29uc3RydWN0aW9ucy4KKyAgICAgICAgY29uc3QgU3RyZXRjaHlD
aGFyYWN0ZXIqIHN0cmV0Y2h5Q2hhcmFjdGVyID0gbnVsbHB0cjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgbWF4SW5kZXggPSBXVEZfQVJSQVlfTEVOR1RIKHN0cmV0Y2h5Q2hhcmFjdGVycyk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1heEluZGV4OyArK2luZGV4
KSB7CisgICAgICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5jaGFyYWN0ZXIg
PT0gbV9iYXNlQ2hhcmFjdGVyKSB7CisgICAgICAgICAgICAgICAgc3RyZXRjaHlDaGFyYWN0ZXIg
PSAmc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0eWxl
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBpbmRleCA8IGxlZnRSaWdodFBhaXJzQ291bnQg
KiAyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiByaWdodC10by1sZWZ0
IGRpcmVjdGlvbiB3ZSBzZWxlY3QgdGhlIG1pcnJvcmVkIGZvcm0gYnkgYWRkaW5nIC0xIG9yICsx
IGFjY29yZGluZyB0byB0aGUgcGFyaXR5IG9mIGluZGV4LgorICAgICAgICAgICAgICAgICAgICBp
bmRleCArPSBpbmRleCAlIDIgPyAtMSA6IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgYSBzdHJldGNoeSBjaGFyYWN0ZXIgc2V0IGZvciB0aGlzIGNoYXJhY3Rl
ciwgd2UgZG9uJ3Qga25vdyBob3cgdG8gc3RyZXRjaCBpdC4KKyAgICAgICAgaWYgKCFzdHJldGNo
eUNoYXJhY3RlcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBXZSBjb252ZXJ0
IHRoZSBsaXN0IG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbnRvIGEgbGlzdCBvZiBnbHlwaCBkYXRh
LgorICAgICAgICBhc3NlbWJseURhdGEudG9wID0gc3R5bGUuZm9udENhc2NhZGUoKS5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsKKyAgICAg
ICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxzZSk7Cisg
ICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20gPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0
YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwgZmFsc2UpOworICAg
ICAgICBhc3NlbWJseURhdGEubWlkZGxlID0gc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIg
PyBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJh
Y3Rlci0+bWlkZGxlQ2hhciwgZmFsc2UpIDogR2x5cGhEYXRhKCk7CisgICAgfQorCisgICAgLy8g
SWYgd2UgYXJlIG1lYXN1cmluZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9u
ZW50LgorICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkgeworICAgICAgICAqbWF4aW11bUdseXBo
V2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KGFzc2VtYmx5RGF0YS50b3ApKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjpt
YXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEu
ZXh0ZW5zaW9uKSk7CisgICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhp
bXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkp
OworICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lk
dGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b20pKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdl
IGVub3VnaCB0byBhdm9pZCBnbHlwaCBvdmVybGFwcy4KKyAgICBmbG9hdCBtaW5TaXplID0gbV9p
c1ZlcnRpY2FsID8KKyAgICAgICAgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkgKyBo
ZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFzc2Vt
Ymx5RGF0YS5ib3R0b20pCisgICAgICAgIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlE
YXRhLmxlZnQpICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEucmlnaHQpOworICAgIGlmIChtaW5TaXpl
ID4gdGFyZ2V0U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0R2x5cGhBc3NlbWJseShh
c3NlbWJseURhdGEpOworfQorCitMYXlvdXRSZWN0IE1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgR2x5cGhEYXRh
JiBkYXRhLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcgdHJp
bSkKK3sKKyAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChkYXRhKTsK
KworICAgIExheW91dFJlY3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBMYXlvdXRTaXplKGdseXBo
Qm91bmRzLngoKSArIGdseXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91bmRzLmhlaWdodCgpKSk7
CisgICAgZ2x5cGhQYWludFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5cGhCb3VuZHMueSgpKTsK
KworICAgIC8vIEluIG9yZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVnbHkgd2l0aCBvbmUgYW5v
dGhlciB3ZSBzbmFwIHRoZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVsIGJvdW5kYXJpZXMKKyAg
ICAvLyBhbmQgdHJpbSBvZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJpbSBpcyB0byBhY2NvdW50
IGZvciBmb250cyB0aGF0IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZlIGxlc3MKKyAgICAvLyB0
aGFuIGZ1bGwgY292ZXJhZ2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBpbnRyb2R1Y2Ugc21hbGwg
c2VhbXMgYmV0d2VlbiBjb25uZWN0ZWQgZ2x5cGhzLgorICAgIEZsb2F0UmVjdCBjbGlwQm91bmRz
ID0gaW5mby5yZWN0OworICAgIHN3aXRjaCAodHJpbSkgeworICAgIGNhc2UgVHJpbVRvcDoKKyAg
ICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWls
KCkgKyAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
eSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltQm90dG9tOgorICAgICAgICBnbHlw
aFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkg
LSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
bWF4WSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltVG9wQW5kQm90dG9tOgorICAg
ICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwo
KSArIDEpOworICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWlu
dFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QueSgpKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdl
VG8oZ2x5cGhQYWludFJlY3QubWF4WSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmlt
TGVmdDoKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0
LngoKS5jZWlsKCkgKyAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQ
YWludFJlY3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltUmlnaHQ6CisgICAg
ICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCku
Zmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBh
aW50UmVjdC5tYXhYKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1MZWZ0QW5kUmln
aHQ6CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54
KCkuY2VpbCgpICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNo
aWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0
TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOworICAgIH0KKworICAgIC8vIENsaXBw
aW5nIHRoZSBlbmNsb3NpbmcgSW50UmVjdCBhdm9pZHMgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXQg
am9pbmVkIGVkZ2VzLgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihp
bmZvLmNvbnRleHQoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKwor
ICAgIEdseXBoQnVmZmVyIGJ1ZmZlcjsKKyAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEu
Zm9udCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSkpOworICAgIGluZm8uY29udGV4dCgpLmRy
YXdHbHlwaHMoc3R5bGUuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udCwgYnVmZmVyLCAwLCAxLCBv
cmlnaW4pOworCisgICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0OworfQorCit2b2lkIE1hdGhPcGVy
YXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5
b3V0UG9pbnQmIHRvKQoreworICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworICAgIEFTU0VSVCht
X3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4
dGVuc2lvbi5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChmcm9tLnkoKSA8PSB0by55KCkpOworCisg
ICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRv
bid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgaWYgKGZyb20ueSgpID09IHRvLnkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGluZm8uY29udGV4dCgpKTsKKworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zv
ckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKKworICAgIC8vIENsaXBwaW5nIHRoZSBleHRl
bmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90dG9tIGV4dGVuZGVyIGds
eXBoIGludG8gdGhlCisgICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9tIGdseXBoIHdpdGhvdXQg
d29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5kIHNpbXBsaWZpZXMgbGF0
ZXIgY2xpcHBpbmcuCisgICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0OworICAg
IGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGZyb20ueSgpKTsKKyAgICBjbGlwQm91bmRzLnNoaWZ0
TWF4WUVkZ2VUbyh0by55KCkpOworICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7
CisKKyAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBwaXhlbHMgZnJvbSB0aGUg
dG9wIG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCB1cCBieSB0d28gcGl4ZWxz
LgorICAgIGZsb2F0IG9mZnNldFRvR2x5cGhUb3AgPSBnbHlwaEJvdW5kcy55KCkgKyAyOworICAg
IExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCksIGZyb20ueSgp
IC0gb2Zmc2V0VG9HbHlwaFRvcCk7CisgICAgRmxvYXRSZWN0IGxhc3RQYWludGVkR2x5cGhSZWN0
KGZyb20sIEZsb2F0U2l6ZSgpKTsKKworICAgIHdoaWxlIChsYXN0UGFpbnRlZEdseXBoUmVjdC5t
YXhZKCkgPCB0by55KCkpIHsKKyAgICAgICAgbGFzdFBhaW50ZWRHbHlwaFJlY3QgPSBwYWludEds
eXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmlnaW4sIFRyaW1U
b3BBbmRCb3R0b20pOworICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGdseXBoT3JpZ2luLnkoKSAr
IGxhc3RQYWludGVkR2x5cGhSZWN0LmhlaWdodCgpKTsKKworICAgICAgICAvLyBUaGVyZSdzIGEg
Y2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5
cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKKyAgICAgICAgLy8gd2l0
aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgorICAgICAgICBp
ZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9u
R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCit7CisgICAgQVNTRVJUKCFt
X2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkp
OworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOworICAgIEFTU0VS
VChmcm9tLngoKSA8PSB0by54KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9y
IHRoZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAg
aWYgKGZyb20ueCgpID09IHRvLngoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKKworICAgIC8vIENs
aXBwaW5nIHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90
dG9tIGV4dGVuZGVyIGdseXBoIGludG8gdGhlCisgICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9t
IGdseXBoIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5k
IHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBpbmcuCisgICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0g
aW5mby5yZWN0OworICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGZyb20ueCgpKTsKKyAgICBj
bGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyh0by54KCkpOworICAgIGluZm8uY29udGV4dCgpLmNs
aXAoY2xpcEJvdW5kcyk7CisKKyAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBw
aXhlbHMgZnJvbSB0aGUgbGVmdCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQg
bGVmdCBieSB0d28gcGl4ZWxzLgorICAgIGZsb2F0IG9mZnNldFRvR2x5cGhMZWZ0ID0gLTI7Cisg
ICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSArIG9mZnNl
dFRvR2x5cGhMZWZ0LCBzdGQ6Om1pbihmcm9tLnkoKSwgdG8ueSgpKSk7CisgICAgRmxvYXRSZWN0
IGxhc3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKKworICAgIHdoaWxlIChs
YXN0UGFpbnRlZEdseXBoUmVjdC5tYXhYKCkgPCB0by54KCkpIHsKKyAgICAgICAgbGFzdFBhaW50
ZWRHbHlwaFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lv
biwgZ2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOworICAgICAgICBnbHlwaE9yaWdpbi5z
ZXRYKGdseXBoT3JpZ2luLngoKSArIGxhc3RQYWludGVkR2x5cGhSZWN0LndpZHRoKCkpOworCisg
ICAgICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxs
IGVub3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3Rh
bmdsZQorICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3
IG5vdGhpbmcuCisgICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpwYWludFZl
cnRpY2FsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYg
aW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIEFTU0VSVChtX2lz
VmVydGljYWwpOworICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwor
ICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRvcC5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2Fzc2Vt
Ymx5LmJvdHRvbS5pc1ZhbGlkKCkpOworCisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBn
bHlwaHMgc28gdGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAg
ZXhhY3RseSB3aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBvaW50
IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNl
aWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7CisgICAgRmxvYXRSZWN0IHRvcEdseXBoQm91
bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3ApOworICAgIExheW91dFBvaW50IHRv
cEdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgLSB0
b3BHbHlwaEJvdW5kcy55KCkpOworICAgIExheW91dFJlY3QgdG9wR2x5cGhQYWludFJlY3QgPSBw
YWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LnRvcCwgdG9wR2x5cGhPcmlnaW4sIFRy
aW1Cb3R0b20pOworCisgICAgRmxvYXRSZWN0IGJvdHRvbUdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9hc3NlbWJseS5ib3R0b20pOworICAgIExheW91dFBvaW50IGJvdHRvbUdseXBoT3Jp
Z2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBzdHJldGNoU2l6
ZSgpIC0gKGJvdHRvbUdseXBoQm91bmRzLmhlaWdodCgpICsgYm90dG9tR2x5cGhCb3VuZHMueSgp
KSk7CisgICAgTGF5b3V0UmVjdCBib3R0b21HbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5
bGUsIGluZm8sIG1fYXNzZW1ibHkuYm90dG9tLCBib3R0b21HbHlwaE9yaWdpbiwgVHJpbVRvcCk7
CisKKyAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7CisgICAgICAgIC8vIENl
bnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFp
bnQgZXh0ZW50cy4gVGhlbiBzaGlmdCBpdCBoYWxmIHRoZSBwYWludCBoZWlnaHQgdG93YXJkIHRo
ZSBib3R0b20gZ2x5cGguCisgICAgICAgIEZsb2F0UmVjdCBtaWRkbGVHbHlwaEJvdW5kcyA9IGJv
dW5kc0ZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxlKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgbWlk
ZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgdG9wR2x5cGhPcmlnaW4ueSgpKTsK
KyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KDAsIChib3R0b21H
bHlwaFBhaW50UmVjdC55KCkgLSB0b3BHbHlwaFBhaW50UmVjdC5tYXhZKCkpIC8gMi4wKSk7Cisg
ICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgwLCBtaWRkbGVHbHlw
aEJvdW5kcy5oZWlnaHQoKSAvIDIuMCkpOworCisgICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5
cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwg
bWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0b20pOworICAgICAgICBmaWxsV2l0aFZl
cnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhN
YXhZQ29ybmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAg
ICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIG1pZGRsZUds
eXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhN
aW5ZQ29ybmVyKCkpOworICAgIH0gZWxzZQorICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5z
aW9uR2x5cGgoc3R5bGUsIGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCks
IGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworfQorCit2b2lkIE1hdGhP
cGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQor
eworICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9
PSBHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5sZWZ0LmlzVmFsaWQoKSk7
CisgICAgQVNTRVJUKG1fYXNzZW1ibHkucmlnaHQuaXNWYWxpZCgpKTsKKworICAgIC8vIFdlIGFy
ZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGds
eXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJv
eC4KKyAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWludE9mZnNldDsKKyAgICBv
cGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChvcGVyYXRvclRvcExlZnQpOworICAgIExh
eW91dFBvaW50IGxlZnRHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRv
cExlZnQueSgpICsgbV9hc2NlbnQpOworICAgIExheW91dFJlY3QgbGVmdEdseXBoUGFpbnRSZWN0
ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5sZWZ0LCBsZWZ0R2x5cGhPcmln
aW4sIFRyaW1SaWdodCk7CisKKyAgICBGbG9hdFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5k
c0ZvckdseXBoKG1fYXNzZW1ibHkucmlnaHQpOworICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhP
cmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSArIG1fd2lkdGggLSByaWdodEdseXBoQm91bmRzLndp
ZHRoKCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCBy
aWdodEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5y
aWdodCwgcmlnaHRHbHlwaE9yaWdpbiwgVHJpbUxlZnQpOworCisgICAgTGF5b3V0UG9pbnQgYmFz
ZWxpbmVTaGlmdCgwLCBtX2FzY2VudCk7CisgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFs
aWQoKSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBz
dGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuCisgICAgICAgIExheW91dFBvaW50IG1p
ZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIGxlZnRHbHlwaE9yaWdpbi55KCkp
OworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoKHJpZ2h0R2x5
cGhQYWludFJlY3QueCgpIC0gbGVmdEdseXBoUGFpbnRSZWN0Lm1heFgoKSkgLyAyLjAsIDApKTsK
KyAgICAgICAgTGF5b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5
bGUsIGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbUxlZnRB
bmRSaWdodCk7CisgICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxl
LCBpbmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hp
ZnQsIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0
KTsKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8s
IG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0LCBy
aWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0KTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5bGUs
IGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlm
dCwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL01hdGhPcGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9N
YXRoT3BlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI4NTFi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBNYXRoT3BlcmF0b3JfaAorI2RlZmluZSBNYXRoT3BlcmF0b3JfaAorCisjaWYgRU5BQkxF
KE1BVEhNTCkKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0Lmgi
CisjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgor
I2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVuZGVyU3R5bGU7CisKK2NsYXNzIE1hdGhPcGVyYXRvciB7CitwdWJsaWM6CisgICAgTWF0
aE9wZXJhdG9yKCk7CisgICAgdm9pZCBzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFjdGVyLCBi
b29sIGlzVmVydGljYWwpOworCisgICAgTGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pdGFsaWNDb3JyZWN0aW9uOyB9CisKKyAgICBib29sIGlzU3RyZXRjaGVk
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJldGNoVHlwZSAhPSBVbnN0cmV0Y2hlZDsgfQorICAgIHZv
aWQgdW5zdHJldGNoKCkgeyBtX3N0cmV0Y2hUeXBlID0gVW5zdHJldGNoZWQ7IH0KKworICAgIC8v
IEZJWE1FOiBBbGwgdGhlIGNvZGUgYmVsb3cgc2hvdWxkIGJlIHByaXZhdGUgd2hlbiBpdCBpcyBu
byBsb25nZXIgbmVlZGVkIGJ5IFJlbmRlck1hdGhNTE9wZXJhdG9yIChodHRwOi8vd2Via2l0Lm9y
Zy9iLzE1MjI0NCkuCisKKyAgICBzdHJ1Y3QgR2x5cGhBc3NlbWJseURhdGEgeworICAgICAgICB1
bmlvbiB7CisgICAgICAgICAgICBHbHlwaERhdGEgdG9wOworICAgICAgICAgICAgR2x5cGhEYXRh
IHJpZ2h0OworICAgICAgICB9OworICAgICAgICBHbHlwaERhdGEgZXh0ZW5zaW9uOworICAgICAg
ICB1bmlvbiB7CisgICAgICAgICAgICBHbHlwaERhdGEgYm90dG9tOworICAgICAgICAgICAgR2x5
cGhEYXRhIGxlZnQ7CisgICAgICAgIH07CisgICAgICAgIEdseXBoRGF0YSBtaWRkbGU7CisgICAg
R2x5cGhBc3NlbWJseURhdGEoKQorICAgIDogdG9wKCksIGV4dGVuc2lvbigpLCBib3R0b20oKSwg
bWlkZGxlKCkgeyB9CisgICAgfTsKKyAgICBlbnVtIFN0cmV0Y2hUeXBlIHsKKyAgICAgICAgVW5z
dHJldGNoZWQsCisgICAgICAgIFNpemVWYXJpYW50LAorICAgICAgICBHbHlwaEFzc2VtYmx5Cisg
ICAgfTsKKyAgICBlbnVtIEdseXBoUGFpbnRUcmltbWluZyB7CisgICAgICAgIFRyaW1Ub3AsCisg
ICAgICAgIFRyaW1Cb3R0b20sCisgICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCisgICAgICAgIFRy
aW1MZWZ0LAorICAgICAgICBUcmltUmlnaHQsCisgICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKKyAg
ICB9OworCisgICAgTGF5b3V0VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNW
ZXJ0aWNhbCA/IG1fYXNjZW50ICsgbV9kZXNjZW50IDogbV93aWR0aDsgfTsKKyAgICBib29sIGdl
dEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0OworICAgIHZv
aWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJik7CisgICAgdm9pZCBzZXRHbHlwaEFz
c2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJik7CisgICAgdm9pZCBmaW5kRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHZvaWQgZmluZFN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5
b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7CisgICAgYm9vbCBnZXRHbHlwaEFzc2VtYmx5RmFsbEJh
Y2soY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNz
ZW1ibHlQYXJ0PiYsIEdseXBoQXNzZW1ibHlEYXRhJik7CisKKyAgICBMYXlvdXRSZWN0IHBhaW50
R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBHbHlwaERhdGEmLCBj
b25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcpOworICAgIHZvaWQg
ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7Cisg
ICAgdm9pZCBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHls
ZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2lu
dCYgdG8pOworICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVy
U3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRI
b3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CisKKyAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0ZXI7CisgICAgYm9v
bCBtX2lzVmVydGljYWw7CisgICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlwZTsKKyAgICB1bmlv
biB7CisgICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7CisgICAgICAgIEdseXBoQXNzZW1ibHlE
YXRhIG1fYXNzZW1ibHk7CisgICAgfTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGg7CisgICAgTGF5
b3V0VW5pdCBtX2FzY2VudDsKKyAgICBMYXlvdXRVbml0IG1fZGVzY2VudDsKKyAgICBMYXlvdXRV
bml0IG1faXRhbGljQ29ycmVjdGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRI
TUwpCisjZW5kaWYgLy8gTWF0aE9wZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKaW5kZXggNDVmNWE4
ZC4uZGJkNzZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKQEAgLTQ1LDMzICs0NSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKIHVzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKIAotLy8gRklY
TUU6IFRoZSBPcGVuVHlwZSBNQVRIIHRhYmxlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHRoYXQgc2hv
dWxkIG92ZXJyaWRlIHRoaXMgdGFibGUgKGh0dHA6Ly93a2J1Zy8xMjIyOTcpLgotc3RydWN0IFN0
cmV0Y2h5Q2hhcmFjdGVyIHsKLSAgICBVQ2hhciBjaGFyYWN0ZXI7Ci0gICAgVUNoYXIgdG9wQ2hh
cjsKLSAgICBVQ2hhciBleHRlbnNpb25DaGFyOwotICAgIFVDaGFyIGJvdHRvbUNoYXI7Ci0gICAg
VUNoYXIgbWlkZGxlQ2hhcjsKLX07Ci0vLyBUaGUgZmlyc3QgbGVmdFJpZ2h0UGFpcnNDb3VudCBw
YWlycyBjb3JyZXNwb25kIHRvIGxlZnQvcmlnaHQgZmVuY2VzIHRoYXQgY2FuIGVhc2lseSBiZSBt
aXJyb3JlZCBpbiBSVEwuCi1zdGF0aWMgY29uc3Qgc2hvcnQgbGVmdFJpZ2h0UGFpcnNDb3VudCA9
IDU7Ci1zdGF0aWMgY29uc3QgU3RyZXRjaHlDaGFyYWN0ZXIgc3RyZXRjaHlDaGFyYWN0ZXJzWzE0
XSA9IHsKLSAgICB7IDB4MjggICwgMHgyMzliLCAweDIzOWMsIDB4MjM5ZCwgMHgwICAgIH0sIC8v
IGxlZnQgcGFyZW50aGVzaXMKLSAgICB7IDB4MjkgICwgMHgyMzllLCAweDIzOWYsIDB4MjNhMCwg
MHgwICAgIH0sIC8vIHJpZ2h0IHBhcmVudGhlc2lzCi0gICAgeyAweDViICAsIDB4MjNhMSwgMHgy
M2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IHNxdWFyZSBicmFja2V0Ci0gICAgeyAweDVk
ICAsIDB4MjNhNCwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBzcXVhcmUgYnJh
Y2tldAotICAgIHsgMHg3YiAgLCAweDIzYTcsIDB4MjNhYSwgMHgyM2E5LCAweDIzYTggfSwgLy8g
bGVmdCBjdXJseSBicmFja2V0Ci0gICAgeyAweDdkICAsIDB4MjNhYiwgMHgyM2FhLCAweDIzYWQs
IDB4MjNhYyB9LCAvLyByaWdodCBjdXJseSBicmFja2V0Ci0gICAgeyAweDIzMDgsIDB4MjNhMSwg
MHgyM2EyLCAweDIzYTIsIDB4MCAgICB9LCAvLyBsZWZ0IGNlaWxpbmcKLSAgICB7IDB4MjMwOSwg
MHgyM2E0LCAweDIzYTUsIDB4MjNhNSwgMHgwICAgIH0sIC8vIHJpZ2h0IGNlaWxpbmcKLSAgICB7
IDB4MjMwYSwgMHgyM2EyLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgZmxvb3IK
LSAgICB7IDB4MjMwYiwgMHgyM2E1LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0
IGZsb29yCi0gICAgeyAweDdjICAsIDB4N2MsICAgMHg3YywgICAweDdjLCAgIDB4MCAgICB9LCAv
LyB2ZXJ0aWNhbCBiYXIKLSAgICB7IDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgw
ICAgIH0sIC8vIGRvdWJsZSB2ZXJ0aWNhbCBsaW5lCi0gICAgeyAweDIyMjUsIDB4MjIyNSwgMHgy
MjI1LCAweDIyMjUsIDB4MCAgICB9LCAvLyBwYXJhbGxlbCB0bwotICAgIHsgMHgyMjJiLCAweDIz
MjAsIDB4MjNhZSwgMHgyMzIxLCAweDAgICAgfSAvLyBpbnRlZ3JhbCBzaWduCi19OwotCiBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTWF0aE1MRWxlbWVudCYgZWxl
bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6IFJlbmRlck1hdGhNTFRva2VuKGVsZW1l
bnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSgw
KQpAQCAtMjk0LDggKzI2Nyw5IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1f
bWF0aE9wZXJhdG9yLnNldE9wZXJhdG9yKG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CiAg
ICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBmbG9hdCBtYXhpbXVtR2x5cGhXaWR0aCA9IGdl
dEJhc2VHbHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpID8gYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFz
ZUdseXBoKSA6IDA7CisgICAgZmxvYXQgbWF4aW11bUdseXBoV2lkdGggPSBtX21hdGhPcGVyYXRv
ci5nZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZvckdseXBo
KGJhc2VHbHlwaCkgOiAwOwogICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7CiAgICAgICAgIGlmICht
YXhpbXVtR2x5cGhXaWR0aCA8IHN0cmV0Y2hTaXplKCkpCiAgICAgICAgICAgICBtYXhpbXVtR2x5
cGhXaWR0aCA9IHN0cmV0Y2hTaXplKCk7CkBAIC0zMDUsMTIgKzI3OSwxMiBAQCB2b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgfQog
ICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKSB7CiAgICAgICAgIC8vIExh
cmdlIG9wZXJhdG9ycyBpbiBTVElYIFdvcmQgaGF2ZSBpbmNvcnJlY3QgYWR2YW5jZSB3aWR0aCwg
Y2F1c2luZyBtaXNwbGFjZW1lbnQgb2Ygc3VwZXJzY3JpcHQsIHNvIHdlIHVzZSB0aGUgZ2x5cGgg
Ym91bmQgaW5zdGVhZCAoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0aXhmb250cy90cmFja2lu
Zy80OS8pLgotICAgICAgICBmaW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcigpOwotICAgICAg
ICBpZiAobV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFudCkKLSAgICAgICAgICAgIG1heGltdW1H
bHlwaFdpZHRoID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KS53aWR0aCgpOworICAgICAgICBt
X21hdGhPcGVyYXRvci5maW5kRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKKyAg
ICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpT
aXplVmFyaWFudCkKKyAgICAgICAgICAgIG1heGltdW1HbHlwaFdpZHRoID0gYm91bmRzRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KS53aWR0aCgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBzb21lIGdseXBocyAoZS5nLiB0aGUgb25lIGZvciAiRlJBQ1RJT04gU0xB
U0giIGluIHRoZSBTVElYIE1hdGggZm9udCBvciBsYXJnZSBvcGVyYXRvcnMpIGhhdmUgYSB3aWR0
aCB0aGF0IGRlcGVuZHMgb24gdGhlIGhlaWdodCwgcmVzdWx0aW5nIGluIGxhcmdlIGdhcHMgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYpLgotICAgICAgICBm
aW5kU3RyZXRjaHlEYXRhKCZtYXhpbXVtR2x5cGhXaWR0aCk7CisgICAgICAgIG1fbWF0aE9wZXJh
dG9yLmZpbmRTdHJldGNoeURhdGEoc3R5bGUoKSwgJm1heGltdW1HbHlwaFdpZHRoKTsKICAgICB9
CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtX21pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCA9IG1fbGVhZGluZ1NwYWNlICsgbWF4aW11bUdseXBoV2lkdGggKyBtX3RyYWlsaW5nU3Bh
Y2U7CiB9CkBAIC0zNzQsMjQ1ICszNDgsMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWwKICAg
ICB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKIH0KIAotYm9vbCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6Z2V0QmFzZUdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgR2x5cGhEYXRhJiBi
YXNlR2x5cGgpIGNvbnN0Ci17Ci0gICAgYmFzZUdseXBoID0gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIobV90ZXh0Q29udGVudCwgIXN0eWxlLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSk7Ci0gICAgcmV0dXJuIGJhc2VHbHlwaC5pc1ZhbGlkKCkgJiYgYmFzZUdseXBo
LmZvbnQgPT0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKLX0KLQotdm9pZCBS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJiBzaXpl
VmFyaWFudCkKLXsKLSAgICBBU1NFUlQoc2l6ZVZhcmlhbnQuaXNWYWxpZCgpICYmIHNpemVWYXJp
YW50LmZvbnQtPm1hdGhEYXRhKCkpOwotICAgIG1fc3RyZXRjaFR5cGUgPSBTaXplVmFyaWFudDsK
LSAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVy
YXRvcjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlE
YXRhKQotewotICAgIG1fc3RyZXRjaFR5cGUgPSBHbHlwaEFzc2VtYmx5OwotICAgIG1fYXNzZW1i
bHkgPSBhc3NlbWJseURhdGE7Ci19Ci0KLWJvb2wgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEds
eXBoQXNzZW1ibHlGYWxsQmFjayhWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0
PiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKSBjb25zdAot
ewotICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRoIHRhYmxlIGlzIGEg
Yml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkgdGhlIFJlbmRl
ck1hdGhNTE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBmYWxsYmFjayBpbiBhIHJlYXNvbmFi
bGUgd2F5LgotICAgIC8vIEZJWE1FOiBSZW5kZXJNYXRoTUxPcGVyYXRvciBzaG91bGQgc3VwcG9y
dCB0aGUgbW9zdCBnZW5lcmFsIGZvcm1hdCAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMDMyNykuCi0gICAgLy8gV2UgdXNlIHRoZSBhcHByb2FjaCBvZiB0aGUgY29w
eUNvbXBvbmVudHMgZnVuY3Rpb24gaW4gZ2l0aHViLmNvbS9tYXRoamF4L01hdGhKYXgtZGV2L2Js
b2IvbWFzdGVyL2ZvbnRzL09wZW5UeXBlTWF0aC9mb250VXRpbC5weQotCi0gICAgLy8gV2UgY291
bnQgdGhlIG51bWJlciBvZiBub24gZXh0ZW5kZXIgcGllY2VzLgotICAgIGludCBub25FeHRlbmRl
ckNvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7Ci0gICAg
ICAgIGlmICghcGFydC5pc0V4dGVuZGVyKQotICAgICAgICAgICAgbm9uRXh0ZW5kZXJDb3VudCsr
OwotICAgIH0KLSAgICBpZiAobm9uRXh0ZW5kZXJDb3VudCA+IDMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB0aGVyZSBhcmUgdG9vIG1hbnkgcGllY2Vz
LgotCi0gICAgLy8gV2Ugbm93IGJyb3dzZSB0aGUgbGlzdCBvZiBwaWVjZXMgZnJvbSBsZWZ0IHRv
IHJpZ2h0IGZvciBob3Jpem9udGFsIG9wZXJhdG9ycyBhbmQgZnJvbSBib3R0b20gdG8gdG9wIGZv
ciB2ZXJ0aWNhbCBvcGVyYXRvcnMuCi0gICAgZW51bSBQYXJ0VHlwZSB7Ci0gICAgICAgIFN0YXJ0
LAotICAgICAgICBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1pZGRsZSwKLSAgICAgICAgTWlkZGxl
LAotICAgICAgICBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQsCi0gICAgICAgIEVuZCwKLSAg
ICAgICAgTm9uZQotICAgIH07Ci0gICAgUGFydFR5cGUgZXhwZWN0ZWRQYXJ0VHlwZSA9IFN0YXJ0
OwotICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGggPSAwOwotICAgIGFzc2VtYmx5RGF0
YS5taWRkbGUuZ2x5cGggPSAwOwotICAgIGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMp
IHsKLSAgICAgICAgaWYgKG5vbkV4dGVuZGVyQ291bnQgPCAzKSB7Ci0gICAgICAgICAgICAvLyBJ
ZiB3ZSBvbmx5IGhhdmUgYXQgbW9zdCB0d28gbm9uLWV4dGVuZGVycyB0aGVuIHdlIHNraXAgdGhl
IG1pZGRsZSBnbHlwaC4KLSAgICAgICAgICAgIGlmIChleHBlY3RlZFBhcnRUeXBlID09IEV4dGVu
ZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5
cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChl
eHBlY3RlZFBhcnRUeXBlID09IE1pZGRsZSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRU
eXBlID0gRW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwYXJ0LmlzRXh0ZW5kZXIpIHsKLSAg
ICAgICAgICAgIGlmICghYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCkKLSAgICAgICAgICAg
ICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoID0gcGFydC5nbHlwaDsgLy8gV2UgY29w
eSB0aGUgZXh0ZW5kZXIgcGFydC4KLSAgICAgICAgICAgIGVsc2UgaWYgKGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZ2x5cGggIT0gcGFydC5nbHlwaCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogdGhlIGFzc2VtYmx5IGhhcyBkaWZmZXJlbnQg
ZXh0ZW5kZXJzLgotCi0gICAgICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBs
ZWZ0L2JvdHRvbSBwYXJ0LgotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRl
bmRlckJldHdlZW5TdGFydEFuZE1pZGRsZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGNhc2UgTWlkZGxlOgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUg
bWlkZGxlIHBhcnQuCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVy
QmV0d2Vlbk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGNhc2UgRW5kOgotICAgICAgICAgICAgY2FzZSBOb25lOgotICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQgZXh0ZW5kZXIuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJl
dHdlZW5TdGFydEFuZE1pZGRsZToKLSAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuTWlk
ZGxlQW5kRW5kOgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSBtdWx0aXBsZSBjb25zZWN1
dGl2ZSBleHRlbmRlcnMuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkUGFydFR5cGUpIHsKLSAgICAg
ICAgY2FzZSBTdGFydDoKLSAgICAgICAgICAgIC8vIFdlIGNvcHkgdGhlIGxlZnQvYm90dG9tIHBh
cnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEuYm90dG9tLmdseXBoID0gcGFydC5nbHlwaDsK
LSAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5TdGFydEFuZE1p
ZGRsZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vl
blN0YXJ0QW5kTWlkZGxlOgotICAgICAgICBjYXNlIE1pZGRsZToKLSAgICAgICAgICAgIC8vIFdl
IGNvcHkgdGhlIG1pZGRsZSBwYXJ0LgotICAgICAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5n
bHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5k
ZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNh
c2UgRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOgotICAgICAgICBjYXNlIEVuZDoKLSAgICAg
ICAgICAgIC8vIFdlIGNvcHkgdGhlIHJpZ2h0L3RvcCBwYXJ0LgotICAgICAgICAgICAgYXNzZW1i
bHlEYXRhLnRvcC5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRU
eXBlID0gTm9uZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIE5vbmU6Ci0g
ICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVk
IG5vbi1leHRlbmRlciBwYXJ0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgYWx3YXlzIGFzc3Vt
ZSB0aGF0IHdlIGhhdmUgYW4gZXh0ZW5zaW9uIGdseXBoLgotCi0gICAgLy8gSWYgd2UgZG9uJ3Qg
aGF2ZSB0b3AvYm90dG9tIGdseXBocywgd2UgdXNlIHRoZSBleHRlbnNpb24gZ2x5cGguCi0gICAg
aWYgKCFhc3NlbWJseURhdGEudG9wLmdseXBoKQotICAgICAgICBhc3NlbWJseURhdGEudG9wLmds
eXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKLSAgICBpZiAoIWFzc2VtYmx5RGF0
YS5ib3R0b20uZ2x5cGgpCi0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b20uZ2x5cGggPSBhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOwotCi0gICAgYXNzZW1ibHlEYXRhLnRvcC5mb250ID0g
JnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotICAgIGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0YS50b3AuZm9udDsKLSAgICBhc3NlbWJseURhdGEu
Ym90dG9tLmZvbnQgPSBhc3NlbWJseURhdGEudG9wLmZvbnQ7Ci0gICAgYXNzZW1ibHlEYXRhLm1p
ZGRsZS5mb250ID0gYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA/IGFzc2VtYmx5RGF0YS50b3Au
Zm9udCA6IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6ZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKQotewotICAgIEFTU0VS
VChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSk7Ci0KLSAg
ICBHbHlwaERhdGEgYmFzZUdseXBoOwotICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJh
c2VHbHlwaCkgfHwgIWJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBWZWN0b3I8R2x5cGg+IHNpemVWYXJpYW50czsKLSAgICBWZWN0b3I8T3BlblR5cGVN
YXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotCi0gICAgLy8gVGhlIHZhbHVl
IG9mIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBpcyBzb21ldGltZXMgdG9vIHNtYWxsLCBzbyB3
ZSBlbnN1cmUgdGhhdCBpdCBpcyBhdCBsZWFzdCBcc3FydHsyfSB0aW1lcyB0aGUgc2l6ZSBvZiB0
aGUgYmFzZSBnbHlwaC4KLSAgICBmbG9hdCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgPSBzdGQ6
Om1heChiYXNlR2x5cGguZm9udC0+Ym91bmRzRm9yR2x5cGgoYmFzZUdseXBoLmdseXBoKS5oZWln
aHQoKSAqIHNxcnRPZlR3b0Zsb2F0LCBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0
aENvbnN0YW50KCpiYXNlR2x5cGguZm9udCwgT3BlblR5cGVNYXRoRGF0YTo6RGlzcGxheU9wZXJh
dG9yTWluSGVpZ2h0KSk7Ci0KLSAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0
aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBh
cnRzKTsKLQotICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRoYXQgaXMg
bGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBhbmQgb3Ro
ZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCi0gICAgZm9yIChhdXRvJiBz
aXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgewotICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
KHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7Ci0gICAgICAgIHNldFNpemVWYXJpYW50KGds
eXBoRGF0YSk7Ci0gICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5t
YXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRh
LmdseXBoKTsKLSAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxh
eU9wZXJhdG9yTWluSGVpZ2h0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaW5kU3RyZXRjaHlEYXRhKGZsb2F0KiBtYXhpbXVtR2x5
cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQotewotICAgIEFTU0VSVCghbWF4aW11bUds
eXBoV2lkdGggfHwgbV9pc1ZlcnRpY2FsKTsKLQotICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0g
ICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAgLy8gV2UgZG8g
bm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgotICAgICAgICBm
bG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkg
OiBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOwotICAgICAgICBpZiAodGFyZ2V0U2l6
ZSA8PSBiYXNlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHbHlwaEFz
c2VtYmx5RGF0YSBhc3NlbWJseURhdGE7Ci0gICAgaWYgKGJhc2VHbHlwaC5mb250LT5tYXRoRGF0
YSgpKSB7Ci0gICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlhbnRzOwotICAgICAgICBWZWN0
b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3NlbWJseVBhcnRzOwotICAgICAg
ICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZhcmlhbnRzKGJhc2VHbHlwaC5n
bHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2VtYmx5UGFydHMpOwotICAgICAg
ICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCi0gICAgICAgIGZvciAoYXV0byYgc2l6
ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgICAgIEdseXBoRGF0YSBnbHlwaERh
dGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKLSAgICAgICAgICAgIGlmIChtYXhpbXVt
R2x5cGhXaWR0aCkKLSAgICAgICAgICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1h
eCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSkpOwot
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0U2l6ZVZhcmlhbnQoZ2x5cGhE
YXRhKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9pc1ZlcnRpY2FsID8gaGVpZ2h0
Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGdseXBoRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgdmVy
aWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgotICAgICAgICBpZiAoIWdldEdseXBoQXNz
ZW1ibHlGYWxsQmFjayhhc3NlbWJseVBhcnRzLCBhc3NlbWJseURhdGEpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9pc1ZlcnRpY2FsKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZSBmb250IGRvZXMgbm90IGhhdmUgYSBN
QVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0cnVjdGlvbnMu
Ci0gICAgICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyKiBzdHJldGNoeUNoYXJhY3RlciA9IG51
bGxwdHI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heEluZGV4ID0gV1RGX0FSUkFZX0xFTkdU
SChzdHJldGNoeUNoYXJhY3RlcnMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBtYXhJbmRleDsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKHN0cmV0Y2h5Q2hh
cmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IG1fdGV4dENvbnRlbnQpIHsKLSAgICAgICAgICAg
ICAgICBzdHJldGNoeUNoYXJhY3RlciA9ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOwotICAg
ICAgICAgICAgICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgaW5k
ZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50ICogMikgewotICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVmdCBkaXJlY3Rpb24gd2Ugc2VsZWN0IHRoZSBtaXJyb3Jl
ZCBmb3JtIGJ5IGFkZGluZyAtMSBvciArMSBhY2NvcmRpbmcgdG8gdGhlIHBhcml0eSBvZiBpbmRl
eC4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gaW5kZXggJSAyID8gLTEgOiAxOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgc3RyZXRjaHkgY2hhcmFj
dGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0ZXIsIHdlIGRvbid0IGtub3cgaG93IHRvIHN0cmV0Y2gg
aXQuCi0gICAgICAgIGlmICghc3RyZXRjaHlDaGFyYWN0ZXIpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgLy8gV2UgY29udmVydCB0aGUgbGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlcnMg
aW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4KLSAgICAgICAgYXNzZW1ibHlEYXRhLnRvcCA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPnRvcENoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0
ZXItPmV4dGVuc2lvbkNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbSA9
IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFy
YWN0ZXItPmJvdHRvbUNoYXIsIGZhbHNlKTsKLSAgICAgICAgYXNzZW1ibHlEYXRhLm1pZGRsZSA9
IHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyID8gc3R5bGUoKS5mb250Q2FzY2FkZSgpLmds
eXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFsc2Up
IDogR2x5cGhEYXRhKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIG1lYXN1cmluZyB0aGUg
bWF4aW11bSB3aWR0aCwgdmVyaWZ5IGVhY2ggY29tcG9uZW50LgotICAgIGlmIChtYXhpbXVtR2x5
cGhXaWR0aCkgewotICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11
bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3ApKTsKLSAg
ICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuZXh0ZW5zaW9uKSk7Ci0gICAgICAgICpt
YXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdp
ZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkpOwotICAgICAgICAqbWF4aW11bUdseXBo
V2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBo
KGFzc2VtYmx5RGF0YS5ib3R0b20pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFdlIGVuc3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBhdm9pZCBnbHlwaCBv
dmVybGFwcy4KLSAgICBmbG9hdCBtaW5TaXplID0gbV9pc1ZlcnRpY2FsID8KLSAgICAgICAgaGVp
Z2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcCkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURh
dGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b20pCi0gICAgICAg
IDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmxlZnQpICsgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3Nl
bWJseURhdGEucmlnaHQpOwotICAgIGlmIChtaW5TaXplID4gdGFyZ2V0U2l6ZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2V0R2x5cGhBc3NlbWJseShhc3NlbWJseURhdGEpOwotfQotCiB2b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRhdGVTdHlsZSgpCiB7CiAgICAgQVNTRVJUKGZpcnN0
Q2hpbGQoKSk7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fc3RyZXRjaFR5cGUgPSBVbnN0cmV0Y2hlZDsKLSAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSAw
OworICAgIG1fbWF0aE9wZXJhdG9yLnVuc3RyZXRjaCgpOworICAgIG1fbWF0aE9wZXJhdG9yLm1f
aXRhbGljQ29ycmVjdGlvbiA9IDA7CiAgICAgLy8gV2UgYWRkIHNwYWNpbmcgYXJvdW5kIHRoZSBv
cGVyYXRvci4KICAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIHRo
ZSB3aG9sZSBlbWJlbGxpc2hlZCBvcGVyYXRvciAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNDgzMSkuCiAgICAgLy8gRklYTUU6IFRoZSBzcGFjaW5nIHNob3VsZCBv
bmx5IGJlIGFkZGVkIGluc2lkZSAocGVyaGFwcyBpbmZlcnJlZCkgbXJvdyAoaHR0cDovL3d3dy53
My5vcmcvVFIvTWF0aE1ML2NoYXB0ZXIzLmh0bWwjcHJlc20ub3BzcGFjaW5nKS4KQEAgLTYyNiwy
NSArMzY5LDI2IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZVN0eWxlKCkKICAg
ICBpZiAoIXNob3VsZEFsbG93U3RyZXRjaGluZygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBt
X21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGljYWwpOwog
ICAgIGlmIChtX2lzVmVydGljYWwgJiYgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkK
LSAgICAgICAgZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoKTsKKyAgICAgICAgbV9tYXRo
T3BlcmF0b3IuZmluZERpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGZpbmRTdHJldGNoeURhdGEobnVsbHB0ciwgc3RyZXRjaFNpemUoKSk7Ci0g
ICAgICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFVuc3RyZXRjaGVkKQorICAgICAgICBtX21hdGhP
cGVyYXRvci5maW5kU3RyZXRjaHlEYXRhKHN0eWxlKCksIG51bGxwdHIsIHN0cmV0Y2hTaXplKCkp
OworICAgICAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX3N0cmV0Y2hUeXBl
ID09IFNpemVWYXJpYW50KSB7CisgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBtX21hdGhPcGVyYXRv
ci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsKICAgICAgICAg
Ly8gV2UgcmVzaXplIHRoZSBvcGVyYXRvciB0byBtYXRjaCB0aGUgb25lIG9mIHRoZSBzaXplIHZh
cmlhbnQuCiAgICAgICAgIGlmIChpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgc3RyZXRjaCBzaXplIGlzIGFjdHVhbGx5IG5vdCBpbnZvbHZlZCBp
biB0aGUgc2VsZWN0aW9uIG9mIHRoZSBzaXplIHZhcmlhbnQgaW4gZmluZERpc3BsYXlTdHlsZUxh
cmdlT3BlcmF0b3IuCiAgICAgICAgICAgICAvLyBXZSBzaW1wbHkgdXNlIHRoZSBoZWlnaHQgYW5k
IGRlcHRoIG9mIHRoZSBzZWxlY3RlZCBzaXplIHZhcmlhbnQgZ2x5cGguCi0gICAgICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAg
ICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0
b3IubV92YXJpYW50KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUg
PSAtZ2x5cGhCb3VuZHMueSgpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2Vs
aW5lID0gZ2x5cGhCb3VuZHMubWF4WSgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gV2UgcmVzY2FsZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBwcm9wb3J0aW9uYXRlbHkuCi0gICAg
ICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckdseXBoKG1fdmFyaWFudCk7Cisg
ICAgICAgICAgICBmbG9hdCB2YXJpYW50U2l6ZSA9IGhlaWdodEZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBmbG9hdCBzaXplID0gc3RyZXRjaFNpemUoKTsK
ICAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9IHNpemUgPiAwID8gdmFyaWFudFNpemUgLyBzaXpl
IDogMS4wOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSAqPSBhc3Bl
Y3Q7CkBAIC02NTMsMzAgKzM5NywzMCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1cGRh
dGVTdHlsZSgpCiAgICAgfQogCiAgICAgaWYgKCFtX2lzVmVydGljYWwpIHsKLSAgICAgICAgaWYg
KG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZhcmlhbnQpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBn
bHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fdmFyaWFudCk7CisgICAgICAgIGlmIChtX21h
dGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U2l6ZVZhcmlhbnQpIHsK
KyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0
aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJh
c2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVs
b3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKLSAgICAgICAgICAgIG1fc3RyZXRjaFdp
ZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsKLSAgICAgICAgfSBlbHNlIGlm
IChtX3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpIHsKKyAgICAgICAgICAgIG1fc3RyZXRj
aFdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsK
KyAgICAgICAgfSBlbHNlIGlmIChtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhP
cGVyYXRvcjo6R2x5cGhBc3NlbWJseSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91
bmRzOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDA7CiAgICAg
ICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSAwOwogCi0gICAgICAgICAgICBn
bHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkubGVmdCk7CisgICAgICAgICAg
ICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHku
bGVmdCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRz
LnkoKSk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1h
eDxMYXlvdXRVbml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1h
eFkoKSk7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3Nl
bWJseS5yaWdodCk7CisgICAgICAgICAgICBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkucmlnaHQpOwogICAgICAgICAgICAgbV9zdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFi
b3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVw
dGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxv
d0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogCi0gICAgICAgICAgICBnbHlwaEJvdW5k
cyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGds
eXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5leHRl
bnNpb24pOwogICAgICAgICAgICAgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5k
cy55KCkpOwogICAgICAgICAgICAgbV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4obV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBnbHlwaEJvdW5kcy5t
YXhZKCkpOwogCi0gICAgICAgICAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5
Lm1pZGRsZSk7CisgICAgICAgICAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRk
bGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZSk7CiAgICAgICAgICAgICAgICAg
bV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3Ry
ZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIC1nbHlwaEJvdW5kcy55KCkpOwogICAgICAgICAgICAg
ICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1f
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAgICAgICAg
ICAgIH0KQEAgLTY4NiwyMzcgKzQzMCw1NCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjp1
cGRhdGVTdHlsZSgpCiAKIE9wdGlvbmFsPGludD4gUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpcnN0
TGluZUJhc2VsaW5lKCkgY29uc3QKIHsKLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBVbnN0cmV0
Y2hlZCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPGludD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7CiAgICAgcmV0
dXJuIFJlbmRlck1hdGhNTFRva2VuOjpmaXJzdExpbmVCYXNlbGluZSgpOwogfQogCiB2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBV
bnN0cmV0Y2hlZCkKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAg
ICAgbG9naWNhbEhlaWdodCA9IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKyBtX3N0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdo
dChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21wdXRlZFZhbHVlcyk7CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50R2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFp
bnRUcmltbWluZyB0cmltKQotewotICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0Zv
ckdseXBoKGRhdGEpOwotCi0gICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExh
eW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3Vu
ZHMuaGVpZ2h0KCkpKTsKLSAgICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlw
aEJvdW5kcy55KCkpOwotCi0gICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWds
eSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwg
Ym91bmRhcmllcwotICAgIC8vIGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmlt
IGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUg
bGVzcwotICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGlu
dHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCi0gICAgRmxvYXRS
ZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgc3dpdGNoICh0cmltKSB7Ci0gICAgY2Fz
ZSBUcmltVG9wOgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWlu
dFJlY3QueSgpLmNlaWwoKSArIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1Cb3R0b206
Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5t
YXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1Ub3BB
bmRCb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50
UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91
bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBjbGlwQm91bmRz
LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFRyaW1MZWZ0OgotICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8o
Z2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0
WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRy
aW1SaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFp
bnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhY
RWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VHJpbUxlZnRBbmRSaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGds
eXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKLSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hp
ZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAg
IGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7Ci0gICAgICAgIGNs
aXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgfQot
Ci0gICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50
aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNs
aXBCb3VuZHMpOwotCi0gICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgIGJ1ZmZlci5hZGQoZGF0
YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5m
by5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnQs
IGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKLQotICAgIHJldHVybiBnbHlwaFBhaW50UmVjdDsKLX0K
LQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkds
eXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91
dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9z
dHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5leHRl
bnNpb24uaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgpKTsKLQotICAg
IC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24n
dCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgIGlmIChmcm9tLnkoKSA9PSB0by55KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihp
bmZvLmNvbnRleHQoKSk7Ci0KLSAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7Ci0KLSAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5k
ZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlw
aCBpbnRvIHRoZQotICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdv
cnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVy
IGNsaXBwaW5nLgotICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKLSAgICBj
bGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhmcm9tLnkoKSk7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdE1h
eFlFZGdlVG8odG8ueSgpKTsKLSAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwot
Ci0gICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIHRv
cCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgdXAgYnkgdHdvIHBpeGVscy4K
LSAgICBmbG9hdCBvZmZzZXRUb0dseXBoVG9wID0gZ2x5cGhCb3VuZHMueSgpICsgMjsKLSAgICBM
YXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpLCBmcm9tLnkoKSAt
IG9mZnNldFRvR2x5cGhUb3ApOwotICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChm
cm9tLCBGbG9hdFNpemUoKSk7Ci0KLSAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4
WSgpIDwgdG8ueSgpKSB7Ci0gICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlw
aChpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0
b20pOwotICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGdseXBoT3JpZ2luLnkoKSArIGxhc3RQYWlu
dGVkR2x5cGhSZWN0LmhlaWdodCgpKTsKLQotICAgICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRo
YXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGggaGFzIGJl
ZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKLSAgICAgICAgLy8gd2l0aCB0cmltbWlu
Zy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgotICAgICAgICBpZiAobGFzdFBh
aW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQot
Ci12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25H
bHlwaChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlv
dXRQb2ludCYgdG8pCi17Ci0gICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOwotICAgIEFTU0VSVCht
X3N0cmV0Y2hUeXBlID09IEdseXBoQXNzZW1ibHkpOwotICAgIEFTU0VSVChtX2Fzc2VtYmx5LmV4
dGVuc2lvbi5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChmcm9tLngoKSA8PSB0by54KCkpOwotCi0g
ICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBleHRlbnNpb24gZ2x5cGgsIHdlIGRv
bid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgaWYgKGZyb20ueCgpID09IHRvLngoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGluZm8uY29udGV4dCgpKTsKLQotICAgIC8vIENsaXBwaW5nIHRoZSBleHRlbmRlciByZWdpb24g
aGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90dG9tIGV4dGVuZGVyIGdseXBoIGludG8gdGhl
Ci0gICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9tIGdseXBoIHdpdGhvdXQgd29ycnlpbmcgYWJv
dXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5kIHNpbXBsaWZpZXMgbGF0ZXIgY2xpcHBpbmcu
Ci0gICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0gaW5mby5yZWN0OwotICAgIGNsaXBCb3VuZHMu
c2hpZnRYRWRnZVRvKGZyb20ueCgpKTsKLSAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyh0
by54KCkpOwotICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xpcEJvdW5kcyk7Ci0KLSAgICAvLyBU
cmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBwaXhlbHMgZnJvbSB0aGUgbGVmdCBvZiB0aGUg
ZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgbGVmdCBieSB0d28gcGl4ZWxzLgotICAgIGZs
b2F0IG9mZnNldFRvR2x5cGhMZWZ0ID0gLTI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmlnaW4g
PSBMYXlvdXRQb2ludChmcm9tLngoKSArIG9mZnNldFRvR2x5cGhMZWZ0LCBzdGQ6Om1pbihmcm9t
LnkoKSwgdG8ueSgpKSArIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUpOwotICAgIEZsb2F0
UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7Ci0KLSAgICB3aGls
ZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4WCgpIDwgdG8ueCgpKSB7Ci0gICAgICAgIGxhc3RQ
YWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwg
Z2x5cGhPcmlnaW4sIFRyaW1MZWZ0QW5kUmlnaHQpOwotICAgICAgICBnbHlwaE9yaWdpbi5zZXRY
KGdseXBoT3JpZ2luLngoKSArIGxhc3RQYWludGVkR2x5cGhSZWN0LndpZHRoKCkpOwotCi0gICAg
ICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB0aGUgZm9udCBzaXplIGlzIHNtYWxsIGVu
b3VnaCB0aGUgZ2x1ZSBnbHlwaCBoYXMgYmVlbiByZWR1Y2VkIHRvIGFuIGVtcHR5IHJlY3Rhbmds
ZQotICAgICAgICAvLyB3aXRoIHRyaW1taW5nLiBJbiB0aGF0IGNhc2Ugd2UganVzdCBkcmF3IG5v
dGhpbmcuCi0gICAgICAgIGlmIChsYXN0UGFpbnRlZEdseXBoUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBh
aW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewog
ICAgIFJlbmRlck1hdGhNTFRva2VuOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAKLSAgICBp
ZiAoaW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFp
bnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBt
X3N0cmV0Y2hUeXBlID09IFVuc3RyZXRjaGVkKQorICAgIGlmIChpbmZvLmNvbnRleHQoKS5wYWlu
dGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBz
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8ICFtX21hdGhPcGVyYXRvci5pc1N0cmV0
Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwogICAgIGluZm8uY29udGV4dCgpLnNldEZpbGxD
b2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSk7CiAK
LSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTaXplVmFyaWFudCkgewotICAgICAgICBBU1NFUlQo
bV92YXJpYW50LmlzVmFsaWQoKSk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5
cGUgPT0gTWF0aE9wZXJhdG9yOjpTaXplVmFyaWFudCkgeworICAgICAgICBBU1NFUlQobV9tYXRo
T3BlcmF0b3IubV92YXJpYW50LmlzVmFsaWQoKSk7CiAgICAgICAgIEdseXBoQnVmZmVyIGJ1ZmZl
cjsKLSAgICAgICAgYnVmZmVyLmFkZChtX3ZhcmlhbnQuZ2x5cGgsIG1fdmFyaWFudC5mb250LCBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChtX3ZhcmlhbnQpKTsKKyAgICAgICAgYnVmZmVyLmFkZChtX21h
dGhPcGVyYXRvci5tX3ZhcmlhbnQuZ2x5cGgsIG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5mb250
LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpKTsKICAgICAg
ICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQocGFpbnRPZmZz
ZXQgKyBsb2NhdGlvbigpKTsKLSAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91
bmRzRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKICAgICAgICAgTGF5b3V0UG9p
bnQgb3BlcmF0b3JPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0Lnko
KSAtIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIGluZm8uY29udGV4dCgpLmRyYXdHbHlwaHMo
c3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV92YXJpYW50LmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3Bl
cmF0b3JPcmlnaW4pOworICAgICAgICBpbmZvLmNvbnRleHQoKS5kcmF3R2x5cGhzKHN0eWxlKCku
Zm9udENhc2NhZGUoKSwgKm1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5mb250LCBidWZmZXIsIDAs
IDEsIG9wZXJhdG9yT3JpZ2luKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X2lzVmVydGljYWwpCi0gICAgICAgIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGluZm8sIHBh
aW50T2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1i
bHkoaW5mbywgcGFpbnRPZmZzZXQpOwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpw
YWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NF
UlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJs
eS50b3AuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b20uaXNWYWxpZCgp
KTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRoYXQgdGhlIGVk
Z2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0aCB0aGUgZWRn
ZXMgb2Ygb3VyIHBhaW50IGJveC4KKyAgICBtX21hdGhPcGVyYXRvci5tX2FzY2VudCA9IG1fc3Ry
ZXRjaEhlaWdodEFib3ZlQmFzZWxpbmU7CisgICAgbV9tYXRoT3BlcmF0b3IubV9kZXNjZW50ID0g
bV9zdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fd2lkdGgg
PSBsb2dpY2FsV2lkdGgoKTsKICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRvcExlZnQgPSBwYWlu
dE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgb3BlcmF0b3JUb3BMZWZ0Lm1vdmUoc3R5bGUoKS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlYWRpbmdTcGFjZSA6IG1fdHJhaWxpbmdTcGFj
ZSwgMCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BM
ZWZ0KTsKLSAgICBGbG9hdFJlY3QgdG9wR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fz
c2VtYmx5LnRvcCk7Ci0gICAgTGF5b3V0UG9pbnQgdG9wR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BM
ZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEdseXBoQm91bmRzLnkoKSk7Ci0gICAg
TGF5b3V0UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJs
eS50b3AsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQotICAgIEZsb2F0UmVjdCBib3R0
b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuYm90dG9tKTsKLSAgICBM
YXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRv
clRvcExlZnQueSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0
KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKLSAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBo
UGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbSwgYm90dG9tR2x5
cGhPcmlnaW4sIFRyaW1Ub3ApOwotCi0gICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQo
KSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFy
dCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMuIFRoZW4gc2hpZnQgaXQgaGFsZiB0aGUgcGFp
bnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGdseXBoLgotICAgICAgICBGbG9hdFJlY3QgbWlk
ZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSk7Ci0gICAg
ICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIHRv
cEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlv
dXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJlY3QueSgpIC0gdG9wR2x5cGhQYWludFJlY3Qu
bWF4WSgpKSAvIDIuMCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0
UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVpZ2h0KCkgLyAyLjApKTsKLQotICAgICAgICBM
YXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2Vt
Ymx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0b20pOwotICAgICAg
ICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoaW5mbywgdG9wR2x5cGhQYWludFJlY3Qu
bWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7
Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlw
aFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWlu
WUNvcm5lcigpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lv
bkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUds
eXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYgaW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2Fs
KTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NF
UlQobV9hc3NlbWJseS5sZWZ0LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkucmln
aHQuaXNWYWxpZCgpKTsKLQotICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNv
IHRoYXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkg
d2l0aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KLSAgICBMYXlvdXRQb2ludCBvcGVyYXRv
clRvcExlZnQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0
Lm1vdmUobV9sZWFkaW5nU3BhY2UsIDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZElu
dFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7Ci0gICAgTGF5b3V0UG9pbnQgbGVmdEdseXBoT3JpZ2lu
KG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lKTsKLSAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBh
aW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5sZWZ0LCBsZWZ0R2x5cGhPcmlnaW4sIFRyaW1SaWdo
dCk7Ci0KLSAgICBGbG9hdFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
YXNzZW1ibHkucmlnaHQpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmlnaW4ob3BlcmF0
b3JUb3BMZWZ0LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91bmRzLndpZHRoKCks
IG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lKTsKLSAg
ICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNz
ZW1ibHkucmlnaHQsIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKLQotICAgIGlmIChtX2Fz
c2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBv
cmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLgotICAg
ICAgICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBs
ZWZ0R2x5cGhPcmlnaW4ueSgpKTsKLSAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExh
eW91dFBvaW50KChyaWdodEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRHbHlwaFBhaW50UmVjdC5t
YXhYKCkpIC8gMi4wLCAwKSk7Ci0gICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJl
Y3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdp
biwgVHJpbUxlZnRBbmRSaWdodCk7Ci0gICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lv
bkdseXBoKGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpLCBtaWRkbGVH
bHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICAgICAgZmlsbFdpdGhIb3Jpem9u
dGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3Ju
ZXIoKSwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBo
UGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCksIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllD
b3JuZXIoKSk7CisgICAgaWYgKG1faXNWZXJ0aWNhbCkKKyAgICAgICAgbV9tYXRoT3BlcmF0b3Iu
cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoc3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0
KTsKKyAgICBlbHNlCisgICAgICAgIG1fbWF0aE9wZXJhdG9yLnBhaW50SG9yaXpvbnRhbEdseXBo
QXNzZW1ibHkoc3R5bGUoKSwgaW5mbywgb3BlcmF0b3JUb3BMZWZ0KTsKIH0KIAogdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBQYWludEluZm8mIHBhaW50SW5mb0ZvckNoaWxk
LCBib29sIHVzZVByaW50UmVjdCkKIHsKICAgICAvLyBXZSBza2lwIHBhaW50aW5nIGZvciBpbnZp
c2libGUgb3BlcmF0b3JzIHRvbyB0byBhdm9pZCBzb21lICJtaXNzaW5nIGNoYXJhY3RlciIgZ2x5
cGggdG8gYXBwZWFyIGlmIGFwcHJvcHJpYXRlIG1hdGggZm9udHMgYXJlIG5vdCBhdmFpbGFibGUu
Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gVW5zdHJldGNoZWQgfHwgaXNJbnZpc2libGVPcGVy
YXRvcigpKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpIHx8IGlzSW52aXNp
YmxlT3BlcmF0b3IoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlbmRlck1hdGhNTFRva2VuOjpw
YWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1
c2VQcmludFJlY3QpOwogfQpAQCAtOTMxLDE5ICs0OTIsMTkgQEAgTGF5b3V0VW5pdCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVycm9yKCkKICAgICAvLyBIZW5jZSB3ZSBkZXRl
cm1pbmUgdGhlIGVycm9yIGluIHRoZSBsb2dpY2FsIHdpZHRoIHdpdGggcmVzcGVjdCB0byB0aGUg
YWN0dWFsIHdpZHRoIG9mIHRoZSBnbHlwaChzKSB1c2VkIHRvIHBhaW50IHRoZSBvcGVyYXRvci4K
ICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNhbFdpZHRoKCk7CiAKLSAgICBpZiAobV9zdHJl
dGNoVHlwZSA9PSBVbnN0cmV0Y2hlZCkgeworICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJl
dGNoZWQoKSkgewogICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHN0eWxlKCkuZm9udENhc2NhZGUo
KS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIodGV4dENvbnRlbnQoKSwgIXN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9y
R2x5cGgoZGF0YSk7CiAgICAgfQogCi0gICAgaWYgKG1fc3RyZXRjaFR5cGUgPT0gU2l6ZVZhcmlh
bnQpCi0gICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fdmFyaWFu
dCk7CisgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9y
OjpTaXplVmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFzc2VtYmx5V2lkdGgg
PSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcCk7Ci0gICAgYXNzZW1ibHlXaWR0
aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1i
bHkuYm90dG9tKSk7Ci0gICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6bWF4KGFzc2VtYmx5V2lkdGgs
IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKSk7Ci0gICAgaWYgKG1f
YXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkKLSAgICAgICAgYXNzZW1ibHlXaWR0aCA9IHN0ZDo6
bWF4KGFzc2VtYmx5V2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxl
KSk7CisgICAgZmxvYXQgYXNzZW1ibHlXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0
aE9wZXJhdG9yLm1fYXNzZW1ibHkudG9wKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgo
YXNzZW1ibHlXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3Nl
bWJseS5ib3R0b20pKTsKKyAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0
aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5leHRlbnNp
b24pKTsKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgp
KQorICAgICAgICBhc3NlbWJseVdpZHRoID0gc3RkOjptYXgoYXNzZW1ibHlXaWR0aCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpKTsKICAgICBy
ZXR1cm4gd2lkdGggLSBhc3NlbWJseVdpZHRoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKaW5kZXggYjQwODUy
Yi4uNjMyMTQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkds
eXBoUGFnZS5oIgogI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJNYXRoTUxP
cGVyYXRvckRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJNYXRoT3BlcmF0b3IuaCIKICNpbmNsdWRl
ICJPcGVuVHlwZU1hdGhEYXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MVG9rZW4uaCIKIApA
QCAtNTEsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFRoZSBkaXNwbGF5c3R5bGUg
cHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTE4NzM3KS4KICAgICBib29sIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0
eWxlKCkgY29uc3QgeyByZXR1cm4gIWhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OlN0cmV0Y2h5KSAmJiBoYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpMYXJnZU9wKTsgfQogICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNWZXJ0aWNhbDsgfQotICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsgfQorICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0aE9wZXJhdG9yLml0YWxpY0NvcnJlY3Rpb24oKTsg
fQogCiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVTdHlsZSgpIGZpbmFsOwpA
QCAtNzMsMzIgKzc0LDYgQEAgcHJvdGVjdGVkOgogICAgIFVDaGFyIHRleHRDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0Q29udGVudDsgfQogCiBwcml2YXRlOgotICAgIHN0cnVjdCBHbHlw
aEFzc2VtYmx5RGF0YSB7Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIEdseXBoRGF0YSB0
b3A7Ci0gICAgICAgICAgICBHbHlwaERhdGEgcmlnaHQ7Ci0gICAgICAgIH07Ci0gICAgICAgIEds
eXBoRGF0YSBleHRlbnNpb247Ci0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgIEdseXBoRGF0
YSBib3R0b207Ci0gICAgICAgICAgICBHbHlwaERhdGEgbGVmdDsKLSAgICAgICAgfTsKLSAgICAg
ICAgR2x5cGhEYXRhIG1pZGRsZTsKLSAgICBHbHlwaEFzc2VtYmx5RGF0YSgpCi0gICAgOiB0b3Ao
KSwgZXh0ZW5zaW9uKCksIGJvdHRvbSgpLCBtaWRkbGUoKSB7IH0KLSAgICB9OwotICAgIGVudW0g
U3RyZXRjaFR5cGUgewotICAgICAgICBVbnN0cmV0Y2hlZCwKLSAgICAgICAgU2l6ZVZhcmlhbnQs
Ci0gICAgICAgIEdseXBoQXNzZW1ibHkKLSAgICB9OwotICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRj
aFR5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OwotICAgICAg
ICBHbHlwaEFzc2VtYmx5RGF0YSBtX2Fzc2VtYmx5OwotICAgIH07Ci0gICAgTGF5b3V0VW5pdCBt
X2l0YWxpY0NvcnJlY3Rpb247Ci0KICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxPcGVyYXRvciAo
YW5vbnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MT3BlcmF0b3IiOyB9CiAgICAgdm9pZCBwYWludENo
aWxkcmVuKFBhaW50SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8m
IGZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkgZmluYWw7CiAgICAgYm9vbCBpc1JlbmRlck1h
dGhNTE9wZXJhdG9yKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTEyLDI3ICs4
Nyw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEFsbG93U3RyZXRjaGluZygpIGNvbnN0
OwogCi0gICAgYm9vbCBnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBHbHlwaERhdGEm
KSBjb25zdDsKLSAgICB2b2lkIHNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYpOwotICAg
IHZvaWQgc2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYpOwotICAgIGJv
b2wgZ2V0R2x5cGhBc3NlbWJseUZhbGxCYWNrKFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3Nl
bWJseVBhcnQ+LCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwotICAgIHZvaWQgZmluZERpc3Bs
YXlTdHlsZUxhcmdlT3BlcmF0b3IoKTsKLSAgICB2b2lkIGZpbmRTdHJldGNoeURhdGEoZmxvYXQq
IG1heGltdW1HbHlwaFdpZHRoLCBMYXlvdXRVbml0IHRhcmdldFNpemUgPSAwKTsKLQotICAgIGVu
dW0gR2x5cGhQYWludFRyaW1taW5nIHsKLSAgICAgICAgVHJpbVRvcCwKLSAgICAgICAgVHJpbUJv
dHRvbSwKLSAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKLSAgICAgICAgVHJpbUxlZnQsCi0gICAg
ICAgIFRyaW1SaWdodCwKLSAgICAgICAgVHJpbUxlZnRBbmRSaWdodAotICAgIH07Ci0KLSAgICBM
YXlvdXRSZWN0IHBhaW50R2x5cGgoUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhEYXRhJiwgY29uc3Qg
TGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKLSAgICB2b2lkIGZpbGxX
aXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYg
ZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIGZpbGxXaXRoSG9yaXpvbnRh
bEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25z
dCBMYXlvdXRQb2ludCYgdG8pOwotICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHko
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50SG9yaXpvbnRh
bEdseXBoQXNzZW1ibHkoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKICAgICB2b2lk
IHNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpG
bGFnLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9t
QXR0cmlidXRlVmFsdWUoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGbGFnLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKTsKICAgICB2b2lkIHNldE9wZXJhdG9yUHJvcGVydGll
c0Zyb21PcERpY3RFbnRyeShjb25zdCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkVudHJ5Kik7
CkBAIC0xNDksNiArMTAzLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1fdHJhaWxpbmdT
cGFjZTsKICAgICBMYXlvdXRVbml0IG1fbWluU2l6ZTsKICAgICBMYXlvdXRVbml0IG1fbWF4U2l6
ZTsKKyAgICBNYXRoT3BlcmF0b3IgbV9tYXRoT3BlcmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0tIAoyLjguMC5yYzMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278390</attachid>
            <date>2016-05-09 00:50:56 -0700</date>
            <delta_ts>2016-06-08 00:05:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-move-to-mathoperator.patch</filename>
            <type>text/plain</type>
            <size>77215</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSAxNDljZmE1MjVhZWYwN2JkN2UxOWM5MzMxNWRjZmUyZGIwNzhmMGNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAwOToyMToxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDEvMThd
IG1vdmUgdG8gbWF0aG9wZXJhdG9yCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYwICsrKwogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgfCAgIDggKwogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3BwICAgfCA1MTUgKysrKysrKysrKysrKysrKysr
KysKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmggICAgIHwg
IDk4ICsrKysKIC4uLi9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCAg
ICAgIHwgNTM1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaCAgICAgICAgfCAgMzkgKy0KIDcgZmlsZXMgY2hhbmdlZCwgNzMz
IGluc2VydGlvbnMoKyksIDUyMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBmMDViNzBlLi4yMjg2ZGYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMjUxNCw2ICsyNTE0LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRl
cmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5jcHAKIAogICAgIHJlbmRlcmluZy9tYXRobWwvTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5LmNwcAorICAgIHJlbmRlcmluZy9tYXRobWwvTWF0aE9wZXJh
dG9yLmNwcAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCiAgICAg
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCiAgICAgcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMThiZGIyLi41ODg3
MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTYtMDQtMjIgIEZyZWRlcmljIFdh
bmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgorCisgICAgICAgIE1vdmUgc2VsZWN0aW9uIGFuZCBkcmF3
aW5nIG9mIHN0cmV0Y2h5IG9wZXJhdG9ycyBpbnRvIGEgc2VwYXJhdGUgTWF0aE9wZXJhdG9yIGNs
YXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY5
MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2VkLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6IEFkZCB0aGUgTWF0aE9wZXJhdG9yIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL21hdGht
bC9NYXRoT3BlcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kc0Zvckds
eXBoKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6
OmhlaWdodEZvckdseXBoKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAg
ICAgKFdlYkNvcmU6OmFkdmFuY2VXaWR0aEZvckdseXBoKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRo
TUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgpOiBNb3ZlZCBmcm9tIFJlbmRl
ck1hdGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRTaXpl
VmFyaWFudCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6OnNldEdseXBoQXNzZW1ibHkpOiBNb3ZlZCBmcm9tIFJlbmRlck1h
dGhNTE9wZXJhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpjYWxjdWxhdGVE
aXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKTogTW92ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRv
ciB3aXRoIGFkZGl0aW9uYWwgc3R5bGUgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6TWF0
aE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2spOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50R2x5cGgpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkds
eXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9y
aXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3Bl
cmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNYXRoT3BlcmF0b3I6OnBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6aXRhbGljQ29ycmVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmlzU3RyZXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
dGhPcGVyYXRvcjo6dW5zdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6
R2x5cGhBc3NlbWJseURhdGE6OkdseXBoQXNzZW1ibHlEYXRhKTogTW92ZWQgZnJvbSBSZW5kZXJN
YXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6c3RyZXRjaFNp
emUpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKTogVXBkYXRlZCB0byB1c2UgTWF0aE9wZXJhdG9yIG1lbWJlcnMuCisg
ICAgICAgIEZvciBub3cgd2UgY2FsbCBzZXRPcGVyYXRvciB0byB0cmFuc21pdCBpbmZvcm1hdGlv
biB0byBtX21hdGhPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjp1cGRhdGVTdHlsZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgor
ICAgICAgICBGb3Igbm93IHdlIHNldCBzb21lIG1fbWF0aE9wZXJhdG9yIG1lbWJlcnMgdG8gdHJh
bnNtaXQgaXQgc29tZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhN
TE9wZXJhdG9yOjpmaXJzdExpbmVCYXNlbGluZSk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRv
ciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgRm9yIG5vdyB3ZSBzZXQgc29tZSBtX21h
dGhPcGVyYXRvciBtZW1iZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUgaW5mb3JtYXRpb24uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRDaGlsZHJlbik6IFVwZGF0
ZWQgdG8gdXNlIE1hdGhPcGVyYXRvciBtZW1iZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MT3BlcmF0b3I6OnRyYWlsaW5nU3BhY2VFcnJvcik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmdldEJhc2VHbHlwaCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldEdseXBoQXNz
ZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6
OmNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
Y2FsY3VsYXRlU3RyZXRjaHlEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpwYWludEdseXBoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmZpbGxXaXRo
SG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFs
R2x5cGhBc3NlbWJseSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxPcGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0
b3I6Oml0YWxpY0NvcnJlY3Rpb24pOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5
RGF0YTo6R2x5cGhBc3NlbWJseURhdGEpOiBEZWxldGVkLgorCiAyMDE2LTA1LTA4ICBGcmVkZXJp
YyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRv
cjogcmVmYWN0b3IgbWFuYWdlbWVudCBvZiBzdHJldGNoeSBkYXRhIGFuZCBpdGFsaWMgY29ycmVj
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGNhYzcyNDcuLjVlNjQ2ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2NTksNiArMTY1OSw4IEBACiAJCTQz
OTA0NkU4MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTY3JpcHRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENDEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5oICovOyB9OwogCQk0MzkwNDZFOTEyREEyNUU4
MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovOyB9OwogCQk0MzkwNDZFQTEyREEyNUU4MDBBRjgw
QTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmggKi87IH07CisJCTQzOTA0NkU5MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRo
T3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2RDUxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5jcHAgKi87IH07CisJ
CTQzOTA0NkVBMTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ2MTJEQTI1RTgxMkFGODBB
QyAvKiBNYXRoT3BlcmF0b3IuaCAqLzsgfTsKIAkJNDM5MDQ2RUIxMkRBMjVFODAwQUY4MEE5IC8q
IFJlbmRlck1hdGhNTFRva2VuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQzOTA0NkQ3MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tl
bi5jcHAgKi87IH07CiAJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxU
b2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5
MDQ2RDgxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmggKi87IH07CiAJCTQz
OUQzMzQzMTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRlZFR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOUQzMzQwMTNBNjkxMUMwMEMyMEY0
RiAvKiBTVkdBbmltYXRlZFR5cGUuaCAqLzsgfTsKQEAgLTkxOTgsNiArOTIwMCw4IEBACiAJCTQz
OTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTY3JpcHRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFNjcmlwdHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzkwNDZENTEyREEyNUU4MTJBRjgwQUMgLyogTWF0
aE9wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhP
cGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkQ2MTJEQTI1
RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWF0aE9wZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0
NkQ3MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxUb2tlbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQzOTA0NkQ4MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJN
YXRoTUxUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRo
TUxUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzlEMzM0MDEzQTY5MTFD
MDBDMjBGNEYgLyogU1ZHQW5pbWF0ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTY5MjYsNiArMTY5MzAsOCBAQAogCQkJCTQzOTA0NkQ4MTJEQTI1RTgwMEFGODBBOSAvKiBSZW5k
ZXJNYXRoTUxUb2tlbi5oICovLAogCQkJCTQzOTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxVbmRlck92ZXIuY3BwICovLAogCQkJCTQzOTA0NkQ2MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLywKKwkJCQk0MzkwNDZENTEyREEyNUU4MTJBRjgw
QUMgLyogTWF0aE9wZXJhdG9yLmNwcCAqLywKKwkJCQk0MzkwNDZENjEyREEyNUU4MTJBRjgwQUMg
LyogTWF0aE9wZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hdGhtbDsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNzYzNSw2ICsyNzY0MSw3IEBACiAJCQkJNDM5MDQ2RTYx
MkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOTA0NkVDMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM5MDQ2RUExMkRBMjVFODEyQUY4MEFD
IC8qIE1hdGhPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMjc5NTkwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLywKIAkJCQlERUJDQ0REMjE2NjQ2
RTgyMDBBNDUyRTEgLyogUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxRkEzMDNGMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMxMzA1LDYgKzMxMzEyLDcgQEAKIAkJCQk0MzkwNDZFNTEyREEy
NUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MzkwNDZFQjEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2RTkxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MzkwNDZFOTEyREEyNUU4MTJBRjgw
QUMgLyogTWF0aE9wZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0QzI3OTU4MENGOTc0
MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlERTQ5QjMw
OTE2NUYyRkUxMDAxMDMzOEQgLyogUmVuZGVyTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDFGQTMwM0UxMzE2QzI5QzAwQzBCRkM1IC8qIFJlbmRlck1lZGlhQ29u
dHJvbHMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL01hdGhPcGVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTY4NWVlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvTWF0aE9wZXJhdG9yLmNwcApAQCAtMCwwICsxLDUxNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKyNpbmNs
dWRlICJNYXRoT3BlcmF0b3IuaCIKKworI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVk
ZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGlubGluZSBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoY29uc3QgR2x5cGhEYXRhJiBkYXRhKQor
eworICAgIHJldHVybiBkYXRhLmlzVmFsaWQoKSA/IGRhdGEuZm9udC0+Ym91bmRzRm9yR2x5cGgo
ZGF0YS5nbHlwaCkgOiBGbG9hdFJlY3QoKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBoZWln
aHRGb3JHbHlwaChjb25zdCBHbHlwaERhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIGJvdW5kc0Zv
ckdseXBoKGRhdGEpLmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFkdmFuY2VX
aWR0aEZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4gZGF0YS5p
c1ZhbGlkKCkgPyBkYXRhLmZvbnQtPndpZHRoRm9yR2x5cGgoZGF0YS5nbHlwaCkgOiAwOworfQor
CisvLyBGSVhNRTogVGhpcyBoYXJkY29kZWQgZGF0YSBjYW4gYmUgcmVtb3ZlZCB3aGVuIE9wZW5U
eXBlIE1BVEggZm9udCBhcmUgd2lkZWx5IGF2YWlsYWJsZSAoaHR0cDovL3drYnVnLzE1NjgzNyku
CitzdHJ1Y3QgU3RyZXRjaHlDaGFyYWN0ZXIgeworICAgIFVDaGFyIGNoYXJhY3RlcjsKKyAgICBV
Q2hhciB0b3BDaGFyOworICAgIFVDaGFyIGV4dGVuc2lvbkNoYXI7CisgICAgVUNoYXIgYm90dG9t
Q2hhcjsKKyAgICBVQ2hhciBtaWRkbGVDaGFyOworfTsKKy8vIFRoZSBmaXJzdCBsZWZ0UmlnaHRQ
YWlyc0NvdW50IHBhaXJzIGNvcnJlc3BvbmQgdG8gbGVmdC9yaWdodCBmZW5jZXMgdGhhdCBjYW4g
ZWFzaWx5IGJlIG1pcnJvcmVkIGluIFJUTC4KK3N0YXRpYyBjb25zdCBzaG9ydCBsZWZ0UmlnaHRQ
YWlyc0NvdW50ID0gNTsKK3N0YXRpYyBjb25zdCBTdHJldGNoeUNoYXJhY3RlciBzdHJldGNoeUNo
YXJhY3RlcnNbMTRdID0geworICAgIHsgMHgyOCAgLCAweDIzOWIsIDB4MjM5YywgMHgyMzlkLCAw
eDAgICAgfSwgLy8gbGVmdCBwYXJlbnRoZXNpcworICAgIHsgMHgyOSAgLCAweDIzOWUsIDB4MjM5
ZiwgMHgyM2EwLCAweDAgICAgfSwgLy8gcmlnaHQgcGFyZW50aGVzaXMKKyAgICB7IDB4NWIgICwg
MHgyM2ExLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgc3F1YXJlIGJyYWNrZXQK
KyAgICB7IDB4NWQgICwgMHgyM2E0LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0
IHNxdWFyZSBicmFja2V0CisgICAgeyAweDdiICAsIDB4MjNhNywgMHgyM2FhLCAweDIzYTksIDB4
MjNhOCB9LCAvLyBsZWZ0IGN1cmx5IGJyYWNrZXQKKyAgICB7IDB4N2QgICwgMHgyM2FiLCAweDIz
YWEsIDB4MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0IGN1cmx5IGJyYWNrZXQKKyAgICB7IDB4MjMw
OCwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMiwgMHgwICAgIH0sIC8vIGxlZnQgY2VpbGluZworICAg
IHsgMHgyMzA5LCAweDIzYTQsIDB4MjNhNSwgMHgyM2E1LCAweDAgICAgfSwgLy8gcmlnaHQgY2Vp
bGluZworICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8g
bGVmdCBmbG9vcgorICAgIHsgMHgyMzBiLCAweDIzYTUsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAg
fSwgLy8gcmlnaHQgZmxvb3IKKyAgICB7IDB4N2MgICwgMHg3YywgICAweDdjLCAgIDB4N2MsICAg
MHgwICAgIH0sIC8vIHZlcnRpY2FsIGJhcgorICAgIHsgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwg
MHgyMDE2LCAweDAgICAgfSwgLy8gZG91YmxlIHZlcnRpY2FsIGxpbmUKKyAgICB7IDB4MjIyNSwg
MHgyMjI1LCAweDIyMjUsIDB4MjIyNSwgMHgwICAgIH0sIC8vIHBhcmFsbGVsIHRvCisgICAgeyAw
eDIyMmIsIDB4MjMyMCwgMHgyM2FlLCAweDIzMjEsIDB4MCAgICB9IC8vIGludGVncmFsIHNpZ24K
K307CisKK01hdGhPcGVyYXRvcjo6TWF0aE9wZXJhdG9yKCkKKyAgICA6IG1fYmFzZUNoYXJhY3Rl
cigwKQorICAgICwgbV9pc1ZlcnRpY2FsKGZhbHNlKQorICAgICwgbV9zdHJldGNoVHlwZShTdHJl
dGNoVHlwZTo6VW5zdHJldGNoZWQpCisgICAgLCBtX3dpZHRoKDApCisgICAgLCBtX2FzY2VudCgw
KQorICAgICwgbV9kZXNjZW50KDApCisgICAgLCBtX2l0YWxpY0NvcnJlY3Rpb24oMCkKK3sKK30K
Kwordm9pZCBNYXRoT3BlcmF0b3I6OnNldE9wZXJhdG9yKFVDaGFyIGJhc2VDaGFyYWN0ZXIsIGJv
b2wgaXNWZXJ0aWNhbCkKK3sKKyAgICBtX2Jhc2VDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyOwor
ICAgIG1faXNWZXJ0aWNhbCA9IGlzVmVydGljYWw7Cit9CisKK2Jvb2wgTWF0aE9wZXJhdG9yOjpn
ZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHbHlwaERhdGEmIGJhc2VHbHlw
aCkgY29uc3QKK3sKKyAgICBiYXNlR2x5cGggPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0
YUZvckNoYXJhY3RlcihtX2Jhc2VDaGFyYWN0ZXIsICFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkpOworICAgIHJldHVybiBiYXNlR2x5cGguaXNWYWxpZCgpICYmIGJhc2VHbHlwaC5mb250
ID09ICZzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7Cit9CisKK3ZvaWQgTWF0aE9w
ZXJhdG9yOjpzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmIHNpemVWYXJpYW50KQorewor
ICAgIEFTU0VSVChzaXplVmFyaWFudC5pc1ZhbGlkKCkgJiYgc2l6ZVZhcmlhbnQuZm9udC0+bWF0
aERhdGEoKSk7CisgICAgbV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudDsK
KyAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OnNl
dEdseXBoQXNzZW1ibHkoY29uc3QgR2x5cGhBc3NlbWJseURhdGEmIGFzc2VtYmx5RGF0YSkKK3sK
KyAgICBtX3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHk7CisgICAgbV9h
c3NlbWJseSA9IGFzc2VtYmx5RGF0YTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmNhbGN1bGF0
ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorewor
ICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworCisgICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKKyAg
ICBpZiAoIWdldEJhc2VHbHlwaChzdHlsZSwgYmFzZUdseXBoKSB8fCAhYmFzZUdseXBoLmZvbnQt
Pm1hdGhEYXRhKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZh
cmlhbnRzOworICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFzc2Vt
Ymx5UGFydHM7CisKKyAgICAvLyBUaGUgdmFsdWUgb2YgZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0
IGlzIHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVuc3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0
IFxzcXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBiYXNlIGdseXBoLgorICAgIGZsb2F0IGRp
c3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4KGhlaWdodEZvckdseXBoKGJhc2VHbHlw
aCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhD
b25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OkRpc3BsYXlPcGVyYXRv
ck1pbkhlaWdodCkpOworCisgICAgYmFzZUdseXBoLmZvbnQtPm1hdGhEYXRhKCktPmdldE1hdGhW
YXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50cywgYXNzZW1ibHlQYXJ0
cyk7CisKKyAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFyaWFudCB0aGF0IGlzIGxh
cmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgYW5kIG90aGVy
d2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgorICAgIGZvciAoYXV0byYgc2l6
ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAgR2x5cGhEYXRhIGdseXBoRGF0YShz
aXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAgICAgICBzZXRTaXplVmFyaWFudChnbHlw
aERhdGEpOworICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSBnbHlwaERhdGEuZm9udC0+bWF0
aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhEYXRhLmZvbnQsIGdseXBoRGF0YS5n
bHlwaCk7CisgICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpID49IGRpc3BsYXlP
cGVyYXRvck1pbkhlaWdodCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBN
YXRoT3BlcmF0b3I6OmNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+
JiBhc3NlbWJseVBhcnRzLCBHbHlwaEFzc2VtYmx5RGF0YSYgYXNzZW1ibHlEYXRhKSBjb25zdAor
eworICAgIC8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9wZW4gVHlwZSBNYXRoIHRhYmxlIGlzIGEg
Yml0IG1vcmUgZ2VuZXJhbCB0aGFuIHRoZSBvbmUgY3VycmVudGx5IHVzZWQgYnkgdGhlIE1hdGhP
cGVyYXRvciBjb2RlLCBzbyB3ZSB0cnkgdG8gZmFsbGJhY2sgaW4gYSByZWFzb25hYmxlIHdheS4K
KyAgICAvLyBGSVhNRTogTWF0aE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRoZSBtb3N0IGdlbmVy
YWwgZm9ybWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI3
KS4KKyAgICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29tcG9uZW50cyBmdW5j
dGlvbiBpbiBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9tYXN0ZXIvZm9udHMv
T3BlblR5cGVNYXRoL2ZvbnRVdGlsLnB5CisKKyAgICAvLyBXZSBjb3VudCB0aGUgbnVtYmVyIG9m
IG5vbiBleHRlbmRlciBwaWVjZXMuCisgICAgaW50IG5vbkV4dGVuZGVyQ291bnQgPSAwOworICAg
IGZvciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKKyAgICAgICAgaWYgKCFwYXJ0Lmlz
RXh0ZW5kZXIpCisgICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7CisgICAgfQorICAgIGlm
IChub25FeHRlbmRlckNvdW50ID4gMykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlz
IG5vdCBzdXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCisKKyAgICAvLyBXZSBu
b3cgYnJvd3NlIHRoZSBsaXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGhvcml6
b250YWwgb3BlcmF0b3JzIGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZlcnRpY2FsIG9wZXJh
dG9ycy4KKyAgICBlbnVtIFBhcnRUeXBlIHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIEV4dGVu
ZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlLAorICAgICAgICBNaWRkbGUsCisgICAgICAgIEV4dGVu
ZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZCwKKyAgICAgICAgRW5kLAorICAgICAgICBOb25lCisgICAg
fTsKKyAgICBQYXJ0VHlwZSBleHBlY3RlZFBhcnRUeXBlID0gU3RhcnQ7CisgICAgYXNzZW1ibHlE
YXRhLmV4dGVuc2lvbi5nbHlwaCA9IDA7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9
IDA7CisgICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAo
bm9uRXh0ZW5kZXJDb3VudCA8IDMpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBh
dCBtb3N0IHR3byBub24tZXh0ZW5kZXJzIHRoZW4gd2Ugc2tpcCB0aGUgbWlkZGxlIGdseXBoLgor
ICAgICAgICAgICAgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRB
bmRNaWRkbGUpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0
d2Vlbk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkUGFydFR5cGUg
PT0gTWlkZGxlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFbmQ7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHBhcnQuaXNFeHRlbmRlcikgeworICAgICAgICAgICAgaWYgKCFh
c3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQorICAgICAgICAgICAgICAgIGFzc2VtYmx5RGF0
YS5leHRlbnNpb24uZ2x5cGggPSBwYXJ0LmdseXBoOyAvLyBXZSBjb3B5IHRoZSBleHRlbmRlciBw
YXJ0LgorICAgICAgICAgICAgZWxzZSBpZiAoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCAh
PSBwYXJ0LmdseXBoKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBu
b3Qgc3VwcG9ydGVkOiB0aGUgYXNzZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCisKKyAg
ICAgICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgeworICAgICAgICAgICAgY2FzZSBT
dGFydDoKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGxlZnQvYm90dG9tIHBhcnQu
CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0
QW5kTWlkZGxlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBN
aWRkbGU6CisgICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBtaWRkbGUgcGFydC4KKyAg
ICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5k
RW5kOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY2FzZSBFbmQ6Cisg
ICAgICAgICAgICBjYXNlIE5vbmU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3Vw
cG9ydGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBleHRlbmRlci4KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlk
ZGxlOgorICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6CisgICAg
ICAgICAgICAgICAgLy8gV2UgaWdub3JlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGV4dGVuZGVycy4K
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgeworICAgICAgICBjYXNlIFN0YXJ0Ogor
ICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KKyAgICAgICAgICAg
IGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBwYXJ0LmdseXBoOworICAgICAgICAg
ICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRN
aWRkbGU6CisgICAgICAgIGNhc2UgTWlkZGxlOgorICAgICAgICAgICAgLy8gV2UgY29weSB0aGUg
bWlkZGxlIHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gcGFy
dC5nbHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5N
aWRkbGVBbmRFbmQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBFeHRlbmRl
ckJldHdlZW5NaWRkbGVBbmRFbmQ6CisgICAgICAgIGNhc2UgRW5kOgorICAgICAgICAgICAgLy8g
V2UgY29weSB0aGUgcmlnaHQvdG9wIHBhcnQuCisgICAgICAgICAgICBhc3NlbWJseURhdGEudG9w
T3JSaWdodC5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBl
ID0gTm9uZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIE5vbmU6CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIG5v
bi1leHRlbmRlciBwYXJ0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgYWx3YXlzIGFzc3VtZSB0
aGF0IHdlIGhhdmUgYW4gZXh0ZW5zaW9uIGdseXBoLgorCisgICAgLy8gSWYgd2UgZG9uJ3QgaGF2
ZSB0b3AvYm90dG9tIGdseXBocywgd2UgdXNlIHRoZSBleHRlbnNpb24gZ2x5cGguCisgICAgaWYg
KCFhc3NlbWJseURhdGEudG9wT3JSaWdodC5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLnRv
cE9yUmlnaHQuZ2x5cGggPSBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoOworICAgIGlmICgh
YXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5nbHlwaCkKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJv
dHRvbU9yTGVmdC5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisKKyAgICBh
c3NlbWJseURhdGEudG9wT3JSaWdodC5mb250ID0gJnN0eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFy
eUZvbnQoKTsKKyAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmZvbnQgPSBhc3NlbWJseURhdGEu
dG9wT3JSaWdodC5mb250OworICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZm9udCA9IGFz
c2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQ7CisgICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5mb250
ID0gYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA/IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZv
bnQgOiBudWxscHRyOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9y
OjpjYWxjdWxhdGVTdHJldGNoeURhdGEoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCog
bWF4aW11bUdseXBoV2lkdGgsIExheW91dFVuaXQgdGFyZ2V0U2l6ZSkKK3sKKyAgICBBU1NFUlQo
IW1heGltdW1HbHlwaFdpZHRoIHx8IG1faXNWZXJ0aWNhbCk7CisKKyAgICBHbHlwaERhdGEgYmFz
ZUdseXBoOworICAgIGlmICghZ2V0QmFzZUdseXBoKHN0eWxlLCBiYXNlR2x5cGgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAgIC8vIFdl
IGRvIG5vdCBzdHJldGNoIGlmIHRoZSBiYXNlIGdseXBoIGlzIGxhcmdlIGVub3VnaC4KKyAgICAg
ICAgZmxvYXQgYmFzZVNpemUgPSBtX2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChiYXNlR2x5
cGgpIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYmFzZUdseXBoKTsKKyAgICAgICAgaWYgKHRhcmdl
dFNpemUgPD0gYmFzZVNpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWF0
aE9wZXJhdG9yOjpHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7CisgICAgaWYgKGJhc2VH
bHlwaC5mb250LT5tYXRoRGF0YSgpKSB7CisgICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlh
bnRzOworICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3Nl
bWJseVBhcnRzOworICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZh
cmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2Vt
Ymx5UGFydHMpOworICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCisgICAg
ICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKKyAgICAgICAgICAg
IEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKKyAgICAg
ICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKKyAgICAgICAgICAgICAgICAqbWF4aW11bUds
eXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckds
eXBoKGdseXBoRGF0YSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc2V0
U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9p
c1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckds
eXBoKGdseXBoRGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgorICAgICAg
ICBpZiAoIWNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhzdHlsZSwgYXNzZW1ibHlQYXJ0
cywgYXNzZW1ibHlEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoIW1faXNWZXJ0aWNhbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAv
LyBJZiB0aGUgZm9udCBkb2VzIG5vdCBoYXZlIGEgTUFUSCB0YWJsZSwgd2UgZmFsbGJhY2sgdG8g
dGhlIFVuaWNvZGUtb25seSBjb25zdHJ1Y3Rpb25zLgorICAgICAgICBjb25zdCBTdHJldGNoeUNo
YXJhY3Rlciogc3RyZXRjaHlDaGFyYWN0ZXIgPSBudWxscHRyOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBtYXhJbmRleCA9IFdURl9BUlJBWV9MRU5HVEgoc3RyZXRjaHlDaGFyYWN0ZXJzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWF4SW5kZXg7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9
PSBtX2Jhc2VDaGFyYWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBzdHJldGNoeUNoYXJhY3RlciA9
ICZzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghc3R5bGUu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIGluZGV4IDwgbGVmdFJpZ2h0UGFpcnNDb3VudCAq
IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHJpZ2h0LXRvLWxlZnQg
ZGlyZWN0aW9uIHdlIHNlbGVjdCB0aGUgbWlycm9yZWQgZm9ybSBieSBhZGRpbmcgLTEgb3IgKzEg
YWNjb3JkaW5nIHRvIHRoZSBwYXJpdHkgb2YgaW5kZXguCisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ICs9IGluZGV4ICUgMiA/IC0xIDogMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3
ZSBkaWRuJ3QgZmluZCBhIHN0cmV0Y2h5IGNoYXJhY3RlciBzZXQgZm9yIHRoaXMgY2hhcmFjdGVy
LCB3ZSBkb24ndCBrbm93IGhvdyB0byBzdHJldGNoIGl0LgorICAgICAgICBpZiAoIXN0cmV0Y2h5
Q2hhcmFjdGVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdlIGNvbnZlcnQg
dGhlIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGludG8gYSBsaXN0IG9mIGdseXBoIGRhdGEu
CisgICAgICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0ID0gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPnRvcENoYXIsIGZhbHNlKTsK
KyAgICAgICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbiA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxz
ZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQgPSBzdHlsZS5mb250Q2FzY2Fk
ZSgpLmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+Ym90dG9tQ2hhciwg
ZmFsc2UpOworICAgICAgICBhc3NlbWJseURhdGEubWlkZGxlID0gc3RyZXRjaHlDaGFyYWN0ZXIt
Pm1pZGRsZUNoYXIgPyBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBoRGF0YUZvckNoYXJhY3Rlcihz
dHJldGNoeUNoYXJhY3Rlci0+bWlkZGxlQ2hhciwgZmFsc2UpIDogR2x5cGhEYXRhKCk7CisgICAg
fQorCisgICAgLy8gSWYgd2UgYXJlIG1lYXN1cmluZyB0aGUgbWF4aW11bSB3aWR0aCwgdmVyaWZ5
IGVhY2ggY29tcG9uZW50LgorICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkgeworICAgICAgICAq
bWF4aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSk7CisgICAgICAgICptYXhpbXVt
R2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9y
R2x5cGgoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbikpOworICAgICAgICAqbWF4aW11bUdseXBoV2lk
dGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFz
c2VtYmx5RGF0YS5taWRkbGUpKTsKKyAgICAgICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjpt
YXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEu
Ym90dG9tT3JMZWZ0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBlbnN1
cmUgdGhhdCB0aGUgc2l6ZSBpcyBsYXJnZSBlbm91Z2ggdG8gYXZvaWQgZ2x5cGggb3ZlcmxhcHMu
CisgICAgZmxvYXQgbWluU2l6ZSA9IG1faXNWZXJ0aWNhbCA/CisgICAgICAgIGhlaWdodEZvckds
eXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0
YS5taWRkbGUpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkKKyAg
ICAgICAgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KSAr
IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5taWRkbGUpICsgYWR2YW5jZVdpZHRo
Rm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpOworICAgIGlmIChtaW5TaXplID4gdGFy
Z2V0U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0R2x5cGhBc3NlbWJseShhc3NlbWJs
eURhdGEpOworfQorCitMYXlvdXRSZWN0IE1hdGhPcGVyYXRvcjo6cGFpbnRHbHlwaChjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgR2x5cGhEYXRhJiBkYXRh
LCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcgdHJpbSkKK3sK
KyAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChkYXRhKTsKKworICAg
IExheW91dFJlY3QgZ2x5cGhQYWludFJlY3Qob3JpZ2luLCBMYXlvdXRTaXplKGdseXBoQm91bmRz
LngoKSArIGdseXBoQm91bmRzLndpZHRoKCksIGdseXBoQm91bmRzLmhlaWdodCgpKSk7CisgICAg
Z2x5cGhQYWludFJlY3Quc2V0WShvcmlnaW4ueSgpICsgZ2x5cGhCb3VuZHMueSgpKTsKKworICAg
IC8vIEluIG9yZGVyIHRvIGhhdmUgZ2x5cGhzIGZpdCBzbnVnbHkgd2l0aCBvbmUgYW5vdGhlciB3
ZSBzbmFwIHRoZSBjb25uZWN0aW5nIGVkZ2VzIHRvIHBpeGVsIGJvdW5kYXJpZXMKKyAgICAvLyBh
bmQgdHJpbSBvZmYgb25lIHBpeGVsLiBUaGUgcGl4ZWwgdHJpbSBpcyB0byBhY2NvdW50IGZvciBm
b250cyB0aGF0IGhhdmUgZWRnZSBwaXhlbHMgdGhhdCBoYXZlIGxlc3MKKyAgICAvLyB0aGFuIGZ1
bGwgY292ZXJhZ2UuIFRoZXNlIGVkZ2UgcGl4ZWxzIGNhbiBpbnRyb2R1Y2Ugc21hbGwgc2VhbXMg
YmV0d2VlbiBjb25uZWN0ZWQgZ2x5cGhzLgorICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gaW5m
by5yZWN0OworICAgIHN3aXRjaCAodHJpbSkgeworICAgIGNhc2UgVHJpbVRvcDoKKyAgICAgICAg
Z2x5cGhQYWludFJlY3Quc2hpZnRZRWRnZVRvKGdseXBoUGFpbnRSZWN0LnkoKS5jZWlsKCkgKyAx
KTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltQm90dG9tOgorICAgICAgICBnbHlwaFBhaW50
UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgpLmZsb29yKCkgLSAxKTsK
KyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3QubWF4WSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltVG9wQW5kQm90dG9tOgorICAgICAgICBn
bHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEp
OworICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdE1heFlFZGdlVG8oZ2x5cGhQYWludFJlY3Qu
bWF4WSgpLmZsb29yKCkgLSAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdlVG8oZ2x5
cGhQYWludFJlY3QueSgpKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdE1heFlFZGdlVG8oZ2x5
cGhQYWludFJlY3QubWF4WSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltTGVmdDoK
KyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5j
ZWlsKCkgKyAxKTsKKyAgICAgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJl
Y3QueCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmltUmlnaHQ6CisgICAgICAgIGds
eXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkuZmxvb3Io
KSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBhaW50UmVj
dC5tYXhYKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1MZWZ0QW5kUmlnaHQ6Cisg
ICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkuY2Vp
bCgpICsgMSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhnbHlwaFBh
aW50UmVjdC5tYXhYKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVk
Z2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WEVk
Z2VUbyhnbHlwaFBhaW50UmVjdC5tYXhYKCkpOworICAgIH0KKworICAgIC8vIENsaXBwaW5nIHRo
ZSBlbmNsb3NpbmcgSW50UmVjdCBhdm9pZHMgYW55IHBvdGVudGlhbCBpc3N1ZXMgYXQgam9pbmVk
IGVkZ2VzLgorICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNv
bnRleHQoKSk7CisgICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIEds
eXBoQnVmZmVyIGJ1ZmZlcjsKKyAgICBidWZmZXIuYWRkKGRhdGEuZ2x5cGgsIGRhdGEuZm9udCwg
YWR2YW5jZVdpZHRoRm9yR2x5cGgoZGF0YSkpOworICAgIGluZm8uY29udGV4dCgpLmRyYXdHbHlw
aHMoc3R5bGUuZm9udENhc2NhZGUoKSwgKmRhdGEuZm9udCwgYnVmZmVyLCAwLCAxLCBvcmlnaW4p
OworCisgICAgcmV0dXJuIGdseXBoUGFpbnRSZWN0OworfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6
ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9p
bnQmIHRvKQoreworICAgIEFTU0VSVChtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX3N0cmV0
Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3Nl
bWJseS5leHRlbnNpb24uaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoZnJvbS55KCkgPD0gdG8ueSgp
KTsKKworICAgIC8vIElmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBo
LCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChmcm9tLnkoKSA9PSB0by55
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihpbmZvLmNvbnRleHQoKSk7CisKKyAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBi
b3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisKKyAgICAvLyBDbGlwcGluZyB0
aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxsb3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRl
bmRlciBnbHlwaCBpbnRvIHRoZQorICAgIC8vIHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3
aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJkcmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlm
aWVzIGxhdGVyIGNsaXBwaW5nLgorICAgIExheW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVj
dDsKKyAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhmcm9tLnkoKSk7CisgICAgY2xpcEJvdW5k
cy5zaGlmdE1heFlFZGdlVG8odG8ueSgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBC
b3VuZHMpOworCisgICAgLy8gVHJpbW1pbmcgbWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZy
b20gdGhlIHRvcCBvZiB0aGUgZXh0ZW5kZXIgZ2x5cGgsIHNvIHdlIG1vdmUgaXQgdXAgYnkgdHdv
IHBpeGVscy4KKyAgICBmbG9hdCBvZmZzZXRUb0dseXBoVG9wID0gZ2x5cGhCb3VuZHMueSgpICsg
MjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBvaW50KGZyb20ueCgpLCBm
cm9tLnkoKSAtIG9mZnNldFRvR2x5cGhUb3ApOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEds
eXBoUmVjdChmcm9tLCBGbG9hdFNpemUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlw
aFJlY3QubWF4WSgpIDwgdG8ueSgpKSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0g
cGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2lu
LCBUcmltVG9wQW5kQm90dG9tKTsKKyAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdp
bi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gVGhl
cmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBn
bHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAg
IC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAg
ICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCBNYXRoT3BlcmF0b3I6OmZpbGxXaXRoSG9yaXpvbnRhbEV4
dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQoreworICAgIEFT
U0VSVCghbV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNo
VHlwZTo6R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlz
VmFsaWQoKSk7CisgICAgQVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7CisKKyAgICAvLyBJZiB0
aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbnl0aGluZy4KKyAgICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250
ZXh0KCkpOworCisgICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93
cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKKyAgICAvLyBy
ZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJh
dyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KKyAgICBMYXlv
dXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7CisgICAgY2xpcEJvdW5kcy5zaGlmdFhFZGdl
VG8oZnJvbS54KCkpOworICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngoKSk7Cisg
ICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKKworICAgIC8vIFRyaW1taW5nIG1h
eSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRlbmRlciBn
bHlwaCwgc28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhlbHMuCisgICAgZmxvYXQgb2Zmc2V0
VG9HbHlwaExlZnQgPSAtMjsKKyAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91dFBv
aW50KGZyb20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgpLCB0by55
KCkpKTsKKyAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXpl
KCkpOworCisgICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFgoKSA8IHRvLngoKSkg
eworICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8s
IG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7Cisg
ICAgICAgIGdseXBoT3JpZ2luLnNldFgoZ2x5cGhPcmlnaW4ueCgpICsgbGFzdFBhaW50ZWRHbHlw
aFJlY3Qud2lkdGgoKSk7CisKKyAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRo
ZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVj
ZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCisgICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRo
YXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4KKyAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5
cGhSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBN
YXRoT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Cit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3RyZXRjaFR5cGUg
PT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LnRv
cE9yUmlnaHQuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQu
aXNWYWxpZCgpKTsKKworICAgIC8vIFdlIGFyZSBwb3NpdGlvbmluZyB0aGUgZ2x5cGhzIHNvIHRo
YXQgdGhlIGVkZ2Ugb2YgdGhlIHRpZ2h0IGdseXBoIGJvdW5kcyBsaW5lIHVwIGV4YWN0bHkgd2l0
aCB0aGUgZWRnZXMgb2Ygb3VyIHBhaW50IGJveC4KKyAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRv
cExlZnQgPSBwYWludE9mZnNldDsKKyAgICBvcGVyYXRvclRvcExlZnQgPSBjZWlsZWRJbnRQb2lu
dChvcGVyYXRvclRvcExlZnQpOworICAgIEZsb2F0UmVjdCB0b3BHbHlwaEJvdW5kcyA9IGJvdW5k
c0ZvckdseXBoKG1fYXNzZW1ibHkudG9wT3JSaWdodCk7CisgICAgTGF5b3V0UG9pbnQgdG9wR2x5
cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAtIHRvcEds
eXBoQm91bmRzLnkoKSk7CisgICAgTGF5b3V0UmVjdCB0b3BHbHlwaFBhaW50UmVjdCA9IHBhaW50
R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkudG9wT3JSaWdodCwgdG9wR2x5cGhPcmlnaW4s
IFRyaW1Cb3R0b20pOworCisgICAgRmxvYXRSZWN0IGJvdHRvbUdseXBoQm91bmRzID0gYm91bmRz
Rm9yR2x5cGgobV9hc3NlbWJseS5ib3R0b21PckxlZnQpOworICAgIExheW91dFBvaW50IGJvdHRv
bUdseXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBz
dHJldGNoU2l6ZSgpIC0gKGJvdHRvbUdseXBoQm91bmRzLmhlaWdodCgpICsgYm90dG9tR2x5cGhC
b3VuZHMueSgpKSk7CisgICAgTGF5b3V0UmVjdCBib3R0b21HbHlwaFBhaW50UmVjdCA9IHBhaW50
R2x5cGgoc3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LCBib3R0b21HbHlwaE9y
aWdpbiwgVHJpbVRvcCk7CisKKyAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNWYWxpZCgpKSB7
CisgICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhlIHN0YXJ0IGFu
ZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4gVGhlbiBzaGlmdCBpdCBoYWxmIHRoZSBwYWludCBo
ZWlnaHQgdG93YXJkIHRoZSBib3R0b20gZ2x5cGguCisgICAgICAgIEZsb2F0UmVjdCBtaWRkbGVH
bHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkubWlkZGxlKTsKKyAgICAgICAg
TGF5b3V0UG9pbnQgbWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgdG9wR2x5
cGhPcmlnaW4ueSgpKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBv
aW50KDAsIChib3R0b21HbHlwaFBhaW50UmVjdC55KCkgLSB0b3BHbHlwaFBhaW50UmVjdC5tYXhZ
KCkpIC8gMi4wKSk7CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2lu
dCgwLCBtaWRkbGVHbHlwaEJvdW5kcy5oZWlnaHQoKSAvIDIuMCkpOworCisgICAgICAgIExheW91
dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fz
c2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1Ub3BBbmRCb3R0b20pOworICAg
ICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIHRvcEdseXBo
UGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5Z
Q29ybmVyKCkpOworICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUs
IGluZm8sIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBo
UGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOworICAgIH0gZWxzZQorICAgICAgICBmaWxsV2l0
aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoc3R5bGUsIGluZm8sIHRvcEdseXBoUGFpbnRSZWN0Lm1p
blhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwor
fQorCit2b2lkIE1hdGhPcGVyYXRvcjo6cGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQoreworICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQo
bV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJU
KG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKG1fYXNzZW1i
bHkudG9wT3JSaWdodC5pc1ZhbGlkKCkpOworCisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRo
ZSBnbHlwaHMgc28gdGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUg
dXAgZXhhY3RseSB3aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBv
aW50IG9wZXJhdG9yVG9wTGVmdCA9IHBhaW50T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9
IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9wTGVmdCk7CisgICAgTGF5b3V0UG9pbnQgbGVmdEds
eXBoT3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX2Fz
Y2VudCk7CisgICAgTGF5b3V0UmVjdCBsZWZ0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0
eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmlt
UmlnaHQpOworCisgICAgRmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOworICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmln
aW4ob3BlcmF0b3JUb3BMZWZ0LngoKSArIG1fd2lkdGggLSByaWdodEdseXBoQm91bmRzLndpZHRo
KCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX2FzY2VudCk7CisgICAgTGF5b3V0UmVjdCByaWdo
dEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS50b3BP
clJpZ2h0LCByaWdodEdseXBoT3JpZ2luLCBUcmltTGVmdCk7CisKKyAgICBMYXlvdXRQb2ludCBi
YXNlbGluZVNoaWZ0KDAsIG1fYXNjZW50KTsKKyAgICBpZiAobV9hc3NlbWJseS5taWRkbGUuaXNW
YWxpZCgpKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgZ2x5cGggb3JpZ2luIGJldHdlZW4gdGhl
IHN0YXJ0IGFuZCBlbmQgZ2x5cGggcGFpbnQgZXh0ZW50cy4KKyAgICAgICAgTGF5b3V0UG9pbnQg
bWlkZGxlR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgbGVmdEdseXBoT3JpZ2luLnko
KSk7CisgICAgICAgIG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgocmlnaHRH
bHlwaFBhaW50UmVjdC54KCkgLSBsZWZ0R2x5cGhQYWludFJlY3QubWF4WCgpKSAvIDIuMCwgMCkp
OworICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChz
dHlsZSwgaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1pZGRsZUdseXBoT3JpZ2luLCBUcmltTGVm
dEFuZFJpZ2h0KTsKKyAgICAgICAgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoc3R5
bGUsIGluZm8sIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVT
aGlmdCwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hp
ZnQpOworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5m
bywgbWlkZGxlR2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQs
IHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hpZnQpOwor
ICAgIH0gZWxzZQorICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChzdHls
ZSwgaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNo
aWZ0LCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkgKyBiYXNlbGluZVNoaWZ0
KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvTWF0aE9wZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L01hdGhPcGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzRi
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01h
dGhPcGVyYXRvci5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgTWF0aE9wZXJhdG9yX2gKKyNkZWZpbmUgTWF0aE9wZXJhdG9yX2gKKworI2lmIEVOQUJM
RShNQVRITUwpCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5o
IgorI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIK
KyNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBNYXRoT3BlcmF0b3IgeworcHVibGljOgorICAgIE1h
dGhPcGVyYXRvcigpOworICAgIHZvaWQgc2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3Rlciwg
Ym9vbCBpc1ZlcnRpY2FsKTsKKworICAgIExheW91dFVuaXQgaXRhbGljQ29ycmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faXRhbGljQ29ycmVjdGlvbjsgfQorCisgICAgYm9vbCBpc1N0cmV0Y2hl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZXRjaFR5cGUgIT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRj
aGVkOyB9CisgICAgdm9pZCB1bnN0cmV0Y2goKSB7IG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlw
ZTo6VW5zdHJldGNoZWQ7IH0KKworICAgIC8vIEZJWE1FOiBBbGwgdGhlIGNvZGUgYmVsb3cgc2hv
dWxkIGJlIHByaXZhdGUgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkIGJ5IFJlbmRlck1hdGhN
TE9wZXJhdG9yIChodHRwOi8vd2Via2l0Lm9yZy9iLzE1MjI0NCkuCisKKyAgICBzdHJ1Y3QgR2x5
cGhBc3NlbWJseURhdGEgeworICAgICAgICBHbHlwaERhdGEgdG9wT3JSaWdodDsKKyAgICAgICAg
R2x5cGhEYXRhIGV4dGVuc2lvbjsKKyAgICAgICAgR2x5cGhEYXRhIGJvdHRvbU9yTGVmdDsKKyAg
ICAgICAgR2x5cGhEYXRhIG1pZGRsZTsKKyAgICB9OworICAgIGVudW0gY2xhc3MgU3RyZXRjaFR5
cGUgeyBVbnN0cmV0Y2hlZCwgU2l6ZVZhcmlhbnQsIEdseXBoQXNzZW1ibHkgfTsKKyAgICBlbnVt
IEdseXBoUGFpbnRUcmltbWluZyB7CisgICAgICAgIFRyaW1Ub3AsCisgICAgICAgIFRyaW1Cb3R0
b20sCisgICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCisgICAgICAgIFRyaW1MZWZ0LAorICAgICAg
ICBUcmltUmlnaHQsCisgICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQKKyAgICB9OworCisgICAgTGF5
b3V0VW5pdCBzdHJldGNoU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWZXJ0aWNhbCA/IG1fYXNj
ZW50ICsgbV9kZXNjZW50IDogbV93aWR0aDsgfTsKKyAgICBib29sIGdldEJhc2VHbHlwaChjb25z
dCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZVZhcmlh
bnQoY29uc3QgR2x5cGhEYXRhJik7CisgICAgdm9pZCBzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEds
eXBoQXNzZW1ibHlEYXRhJik7CisgICAgdm9pZCBjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9w
ZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgdm9pZCBjYWxjdWxhdGVTdHJldGNoeURh
dGEoY29uc3QgUmVuZGVyU3R5bGUmLCBmbG9hdCogbWF4aW11bUdseXBoV2lkdGgsIExheW91dFVu
aXQgdGFyZ2V0U2l6ZSA9IDApOworICAgIGJvb2wgY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxC
YWNrKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFz
c2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OworCisgICAgTGF5b3V0UmVj
dCBwYWludEdseXBoKGNvbnN0IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgR2x5cGhE
YXRhJiwgY29uc3QgTGF5b3V0UG9pbnQmIG9yaWdpbiwgR2x5cGhQYWludFRyaW1taW5nKTsKKyAg
ICB2b2lkIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChjb25zdCBSZW5kZXJTdHlsZSYs
IFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYg
dG8pOworICAgIHZvaWQgZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVu
ZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5
b3V0UG9pbnQmIHRvKTsKKyAgICB2b2lkIHBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5KGNvbnN0
IFJlbmRlclN0eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2b2lk
IHBhaW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworCisgICAgVUNoYXIgbV9iYXNlQ2hhcmFjdGVyOwor
ICAgIGJvb2wgbV9pc1ZlcnRpY2FsOworICAgIFN0cmV0Y2hUeXBlIG1fc3RyZXRjaFR5cGU7Cisg
ICAgdW5pb24geworICAgICAgICBHbHlwaERhdGEgbV92YXJpYW50OworICAgICAgICBHbHlwaEFz
c2VtYmx5RGF0YSBtX2Fzc2VtYmx5OworICAgIH07CisgICAgTGF5b3V0VW5pdCBtX3dpZHRoOwor
ICAgIExheW91dFVuaXQgbV9hc2NlbnQ7CisgICAgTGF5b3V0VW5pdCBtX2Rlc2NlbnQ7CisgICAg
TGF5b3V0VW5pdCBtX2l0YWxpY0NvcnJlY3Rpb247Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoTUFUSE1MKQorI2VuZGlmIC8vIE1hdGhPcGVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmluZGV4
IDcyZTliOTUuLjExZjFjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC00NSwzMyArNDUsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB1c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CiAK
LS8vIEZJWE1FOiBUaGUgT3BlblR5cGUgTUFUSCB0YWJsZSBjb250YWlucyBpbmZvcm1hdGlvbiB0
aGF0IHNob3VsZCBvdmVycmlkZSB0aGlzIHRhYmxlIChodHRwOi8vd2tidWcvMTIyMjk3KS4KLXN0
cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7Ci0gICAgVUNoYXIgY2hhcmFjdGVyOwotICAgIFVDaGFy
IHRvcENoYXI7Ci0gICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKLSAgICBVQ2hhciBib3R0b21DaGFy
OwotICAgIFVDaGFyIG1pZGRsZUNoYXI7Ci19OwotLy8gVGhlIGZpcnN0IGxlZnRSaWdodFBhaXJz
Q291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0IGNhbiBlYXNp
bHkgYmUgbWlycm9yZWQgaW4gUlRMLgotc3RhdGljIGNvbnN0IHNob3J0IGxlZnRSaWdodFBhaXJz
Q291bnQgPSA1Owotc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hhcmFj
dGVyc1sxNF0gPSB7Ci0gICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAweDIzOWQsIDB4MCAg
ICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCi0gICAgeyAweDI5ICAsIDB4MjM5ZSwgMHgyMzlmLCAw
eDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcwotICAgIHsgMHg1YiAgLCAweDIz
YTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJhY2tldAotICAg
IHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1
YXJlIGJyYWNrZXQKLSAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4
IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAotICAgIHsgMHg3ZCAgLCAweDIzYWIsIDB4MjNhYSwg
MHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAotICAgIHsgMHgyMzA4LCAw
eDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWlsaW5nCi0gICAgeyAw
eDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyByaWdodCBjZWlsaW5n
Ci0gICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0
IGZsb29yCi0gICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAv
LyByaWdodCBmbG9vcgotICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3YywgICAweDAg
ICAgfSwgLy8gdmVydGljYWwgYmFyCi0gICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAweDIw
MTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQotICAgIHsgMHgyMjI1LCAweDIy
MjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8KLSAgICB7IDB4MjIy
YiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2lnbgotfTsK
LQogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhNTE9wZXJhdG9yKE1hdGhNTEVsZW1l
bnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJNYXRoTUxUb2tl
bihlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmUoMCkKQEAgLTI5NCw4ICsyNjcsOSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVydGlj
YWwpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAgZmxvYXQgbWF4aW11bUdseXBoV2lk
dGggPSBnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZvckds
eXBoKGJhc2VHbHlwaCkgOiAwOworICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9tYXRo
T3BlcmF0b3IuZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lkdGhG
b3JHbHlwaChiYXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewogICAgICAg
ICBpZiAobWF4aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAgICAgbWF4
aW11bUdseXBoV2lkdGggPSBzdHJldGNoU2l6ZSgpOwpAQCAtMzA1LDEyICsyNzksMTIgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQog
ICAgIH0KICAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAg
ICAvLyBMYXJnZSBvcGVyYXRvcnMgaW4gU1RJWCBXb3JkIGhhdmUgaW5jb3JyZWN0IGFkdmFuY2Ug
d2lkdGgsIGNhdXNpbmcgbWlzcGxhY2VtZW50IG9mIHN1cGVyc2NyaXB0LCBzbyB3ZSB1c2UgdGhl
IGdseXBoIGJvdW5kIGluc3RlYWQgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdGl4Zm9udHMv
dHJhY2tpbmcvNDkvKS4KLSAgICAgICAgY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRv
cigpOwotICAgICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlh
bnQpCi0gICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1fdmFy
aWFudCkud2lkdGgoKTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxheVN0
eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1f
c3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQpCisg
ICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fdmFyaWFudCkud2lkdGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTog
c29tZSBnbHlwaHMgKGUuZy4gdGhlIG9uZSBmb3IgIkZSQUNUSU9OIFNMQVNIIiBpbiB0aGUgU1RJ
WCBNYXRoIGZvbnQgb3IgbGFyZ2Ugb3BlcmF0b3JzKSBoYXZlIGEgd2lkdGggdGhhdCBkZXBlbmRz
IG9uIHRoZSBoZWlnaHQsIHJlc3VsdGluZyBpbiBsYXJnZSBnYXBzIChodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KLSAgICAgICAgY2FsY3VsYXRlU3RyZXRj
aHlEYXRhKCZtYXhpbXVtR2x5cGhXaWR0aCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1
bGF0ZVN0cmV0Y2h5RGF0YShzdHlsZSgpLCAmbWF4aW11bUdseXBoV2lkdGgpOwogICAgIH0KICAg
ICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRo
ID0gbV9sZWFkaW5nU3BhY2UgKyBtYXhpbXVtR2x5cGhXaWR0aCArIG1fdHJhaWxpbmdTcGFjZTsK
IH0KQEAgLTM3NCwyNDUgKzM0OCwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bAogICAgIHVw
ZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwogfQogCi1ib29sIFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHbHlwaERhdGEmIGJhc2VH
bHlwaCkgY29uc3QKLXsKLSAgICBiYXNlR2x5cGggPSBzdHlsZS5mb250Q2FzY2FkZSgpLmdseXBo
RGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKTsKLSAgICByZXR1cm4gYmFzZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5cGguZm9u
dCA9PSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotfQotCi12b2lkIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmIHNpemVWYXJp
YW50KQotewotICAgIEFTU0VSVChzaXplVmFyaWFudC5pc1ZhbGlkKCkgJiYgc2l6ZVZhcmlhbnQu
Zm9udC0+bWF0aERhdGEoKSk7Ci0gICAgbV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpTaXpl
VmFyaWFudDsKLSAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKLX0KLQotdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0YSYg
YXNzZW1ibHlEYXRhKQotewotICAgIG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6R2x5cGhB
c3NlbWJseTsKLSAgICBtX2Fzc2VtYmx5ID0gYXNzZW1ibHlEYXRhOwotfQotCi1ib29sIFJlbmRl
ck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgVmVj
dG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMsIEdseXBo
QXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHN0cnVjdHVy
ZSBvZiB0aGUgT3BlbiBUeXBlIE1hdGggdGFibGUgaXMgYSBiaXQgbW9yZSBnZW5lcmFsIHRoYW4g
dGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSB0aGUgUmVuZGVyTWF0aE1MT3BlcmF0b3IgY29kZSwg
c28gd2UgdHJ5IHRvIGZhbGxiYWNrIGluIGEgcmVhc29uYWJsZSB3YXkuCi0gICAgLy8gRklYTUU6
IFJlbmRlck1hdGhNTE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRoZSBtb3N0IGdlbmVyYWwgZm9y
bWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI3KS4KLSAg
ICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29tcG9uZW50cyBmdW5jdGlvbiBp
biBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9tYXN0ZXIvZm9udHMvT3BlblR5
cGVNYXRoL2ZvbnRVdGlsLnB5Ci0KLSAgICAvLyBXZSBjb3VudCB0aGUgbnVtYmVyIG9mIG5vbiBl
eHRlbmRlciBwaWVjZXMuCi0gICAgaW50IG5vbkV4dGVuZGVyQ291bnQgPSAwOwotICAgIGZvciAo
YXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKLSAgICAgICAgaWYgKCFwYXJ0LmlzRXh0ZW5k
ZXIpCi0gICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7Ci0gICAgfQotICAgIGlmIChub25F
eHRlbmRlckNvdW50ID4gMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5vdCBz
dXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCi0KLSAgICAvLyBXZSBub3cgYnJv
d3NlIHRoZSBsaXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGhvcml6b250YWwg
b3BlcmF0b3JzIGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZlcnRpY2FsIG9wZXJhdG9ycy4K
LSAgICBlbnVtIFBhcnRUeXBlIHsKLSAgICAgICAgU3RhcnQsCi0gICAgICAgIEV4dGVuZGVyQmV0
d2VlblN0YXJ0QW5kTWlkZGxlLAotICAgICAgICBNaWRkbGUsCi0gICAgICAgIEV4dGVuZGVyQmV0
d2Vlbk1pZGRsZUFuZEVuZCwKLSAgICAgICAgRW5kLAotICAgICAgICBOb25lCi0gICAgfTsKLSAg
ICBQYXJ0VHlwZSBleHBlY3RlZFBhcnRUeXBlID0gU3RhcnQ7Ci0gICAgYXNzZW1ibHlEYXRhLmV4
dGVuc2lvbi5nbHlwaCA9IDA7Ci0gICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgewotICAgICAgICBpZiAobm9uRXh0
ZW5kZXJDb3VudCA8IDMpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBhdCBtb3N0
IHR3byBub24tZXh0ZW5kZXJzIHRoZW4gd2Ugc2tpcCB0aGUgbWlkZGxlIGdseXBoLgotICAgICAg
ICAgICAgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRk
bGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vlbk1p
ZGRsZUFuZEVuZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0gTWlk
ZGxlKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFbmQ7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHBhcnQuaXNFeHRlbmRlcikgewotICAgICAgICAgICAgaWYgKCFhc3NlbWJs
eURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5leHRl
bnNpb24uZ2x5cGggPSBwYXJ0LmdseXBoOyAvLyBXZSBjb3B5IHRoZSBleHRlbmRlciBwYXJ0Lgot
ICAgICAgICAgICAgZWxzZSBpZiAoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCAhPSBwYXJ0
LmdseXBoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3Vw
cG9ydGVkOiB0aGUgYXNzZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCi0KLSAgICAgICAg
ICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgewotICAgICAgICAgICAgY2FzZSBTdGFydDoK
LSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGxlZnQvYm90dG9tIHBhcnQuCi0gICAg
ICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlk
ZGxlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FzZSBNaWRkbGU6
Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBtaWRkbGUgcGFydC4KLSAgICAgICAg
ICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FzZSBFbmQ6Ci0gICAgICAg
ICAgICBjYXNlIE5vbmU6Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVk
OiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBleHRlbmRlci4KLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOgot
ICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6Ci0gICAgICAgICAg
ICAgICAgLy8gV2UgaWdub3JlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGV4dGVuZGVycy4KLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgewotICAgICAgICBjYXNlIFN0YXJ0OgotICAgICAg
ICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgIGFzc2Vt
Ymx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAgZXhw
ZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOwotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU6
Ci0gICAgICAgIGNhc2UgTWlkZGxlOgotICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgbWlkZGxl
IHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gcGFydC5nbHlw
aDsKLSAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVB
bmRFbmQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRlbmRlckJldHdl
ZW5NaWRkbGVBbmRFbmQ6Ci0gICAgICAgIGNhc2UgRW5kOgotICAgICAgICAgICAgLy8gV2UgY29w
eSB0aGUgcmlnaHQvdG9wIHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEudG9wT3JSaWdo
dC5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gTm9u
ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIE5vbmU6Ci0gICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIG5vbi1leHRl
bmRlciBwYXJ0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgYWx3YXlzIGFzc3VtZSB0aGF0IHdl
IGhhdmUgYW4gZXh0ZW5zaW9uIGdseXBoLgotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0b3Av
cmlnaHQgb3IgbGVmdC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lvbiBnbHlwaC4K
LSAgICBpZiAoIWFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoKQotICAgICAgICBhc3NlbWJs
eURhdGEudG9wT3JSaWdodC5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7Ci0g
ICAgaWYgKCFhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoKQotICAgICAgICBhc3NlbWJs
eURhdGEuYm90dG9tT3JMZWZ0LmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsK
LQotICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQgPSAmc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnByaW1hcnlGb250KCk7Ci0gICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5mb250ID0gYXNz
ZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udDsKLSAgICBhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0
LmZvbnQgPSBhc3NlbWJseURhdGEudG9wT3JSaWdodC5mb250OwotICAgIGFzc2VtYmx5RGF0YS5t
aWRkbGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPyBhc3NlbWJseURhdGEudG9w
T3JSaWdodC5mb250IDogbnVsbHB0cjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKCkK
LXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxheVN0
eWxlKCkpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBpZiAoIWdldEJhc2VHbHlw
aChzdHlsZSgpLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAgVmVj
dG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLQotICAg
IC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVzIHRv
byBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGltZXMg
dGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlzcGxheU9wZXJhdG9yTWlu
SGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJhc2VHbHlw
aC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQtPm1hdGhE
YXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0aERhdGE6
OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOwotCi0gICAgYmFzZUdseXBoLmZvbnQtPm1hdGhE
YXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJpYW50
cywgYXNzZW1ibHlQYXJ0cyk7Ci0KLSAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUgdmFy
aWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JNaW5I
ZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50LgotICAg
IGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgR2x5cGhE
YXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOwotICAgICAgICBzZXRT
aXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSBnbHlw
aERhdGEuZm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhEYXRhLmZv
bnQsIGdseXBoRGF0YS5nbHlwaCk7Ci0gICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChnbHlwaERh
dGEpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlEYXRh
KGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQotewotICAg
IEFTU0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9pc1ZlcnRpY2FsKTsKLQotICAgIEdseXBo
RGF0YSBiYXNlR2x5cGg7Ci0gICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsK
LSAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2Ug
ZW5vdWdoLgotICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZv
ckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOwotICAg
ICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7Ci0gICAgaWYgKGJhc2VH
bHlwaC5mb250LT5tYXRoRGF0YSgpKSB7Ci0gICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZhcmlh
bnRzOwotICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBhc3Nl
bWJseVBhcnRzOwotICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0aFZh
cmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFzc2Vt
Ymx5UGFydHMpOwotICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCi0gICAg
ICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgICAg
IEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKLSAgICAg
ICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKLSAgICAgICAgICAgICAgICAqbWF4aW11bUds
eXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckds
eXBoKGdseXBoRGF0YSkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0
U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0gbV9p
c1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZvckds
eXBoKGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgotICAgICAg
ICBpZiAoIWNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhhc3NlbWJseVBhcnRzLCBhc3Nl
bWJseURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
ICghbV9pc1ZlcnRpY2FsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRo
ZSBmb250IGRvZXMgbm90IGhhdmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUgVW5p
Y29kZS1vbmx5IGNvbnN0cnVjdGlvbnMuCi0gICAgICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVy
KiBzdHJldGNoeUNoYXJhY3RlciA9IG51bGxwdHI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIG1h
eEluZGV4ID0gV1RGX0FSUkFZX0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXhJbmRleDsgKytpbmRleCkgewotICAg
ICAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IG1fdGV4
dENvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICBzdHJldGNoeUNoYXJhY3RlciA9ICZzdHJldGNo
eUNoYXJhY3RlcnNbaW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghc3R5bGUoKS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgJiYgaW5kZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50ICogMikgewot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVmdCBkaXJlY3Rp
b24gd2Ugc2VsZWN0IHRoZSBtaXJyb3JlZCBmb3JtIGJ5IGFkZGluZyAtMSBvciArMSBhY2NvcmRp
bmcgdG8gdGhlIHBhcml0eSBvZiBpbmRleC4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0g
aW5kZXggJSAyID8gLTEgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGRpZG4n
dCBmaW5kIGEgc3RyZXRjaHkgY2hhcmFjdGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0ZXIsIHdlIGRv
bid0IGtub3cgaG93IHRvIHN0cmV0Y2ggaXQuCi0gICAgICAgIGlmICghc3RyZXRjaHlDaGFyYWN0
ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gV2UgY29udmVydCB0aGUgbGlz
dCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4KLSAgICAg
ICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxzZSk7Ci0gICAg
ICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24gPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxzZSk7
Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQgPSBzdHlsZSgpLmZvbnRDYXNjYWRl
KCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFyLCBm
YWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rlci0+
bWlkZGxlQ2hhciA/IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
c3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKSA6IEdseXBoRGF0YSgpOwotICAg
IH0KLQotICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1heGltdW0gd2lkdGgsIHZlcmlm
eSBlYWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAgICAg
Km1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNl
V2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkpOwotICAgICAgICAqbWF4aW11
bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKLSAgICAgICAgKm1heGltdW1HbHlwaFdp
ZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChh
c3NlbWJseURhdGEubWlkZGxlKSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6
bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRh
LmJvdHRvbU9yTGVmdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZW5z
dXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJsYXBz
LgotICAgIGZsb2F0IG1pblNpemUgPSBtX2lzVmVydGljYWwgPwotICAgICAgICBoZWlnaHRGb3JH
bHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURh
dGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQpCi0g
ICAgICAgIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCkg
KyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSArIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KTsKLSAgICBpZiAobWluU2l6ZSA+IHRh
cmdldFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldEdseXBoQXNzZW1ibHkoYXNzZW1i
bHlEYXRhKTsKLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQog
ewogICAgIEFTU0VSVChmaXJzdENoaWxkKCkpOwogICAgIGlmICghZmlyc3RDaGlsZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlVuc3RyZXRj
aGVkOwotICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IDA7CisgICAgbV9tYXRoT3BlcmF0b3IudW5z
dHJldGNoKCk7CisgICAgbV9tYXRoT3BlcmF0b3IubV9pdGFsaWNDb3JyZWN0aW9uID0gMDsKICAg
ICAvLyBXZSBhZGQgc3BhY2luZyBhcm91bmQgdGhlIG9wZXJhdG9yLgogICAgIC8vIEZJWE1FOiBU
aGUgc3BhY2luZyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdob2xlIGVtYmVsbGlzaGVkIG9wZXJh
dG9yIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMxKS4KICAg
ICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIG9ubHkgYmUgYWRkZWQgaW5zaWRlIChwZXJo
YXBzIGluZmVycmVkKSBtcm93IChodHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRlcjMu
aHRtbCNwcmVzbS5vcHNwYWNpbmcpLgpAQCAtNjI2LDI1ICszNjksMjYgQEAgdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIGlmICghc2hvdWxkQWxsb3dTdHJldGNo
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJhdG9y
KG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CiAgICAgaWYgKG1faXNWZXJ0aWNhbCAmJiBp
c0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQotICAgICAgICBjYWxjdWxhdGVEaXNwbGF5
U3R5bGVMYXJnZU9wZXJhdG9yKCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0ZURp
c3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNh
bGN1bGF0ZVN0cmV0Y2h5RGF0YShudWxscHRyLCBzdHJldGNoU2l6ZSgpKTsKLSAgICAgICAgaWYg
KG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQorICAgICAgICBtX21h
dGhPcGVyYXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUoKSwgbnVsbHB0ciwgc3RyZXRj
aFNpemUoKSk7CisgICAgICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsICYmIG1fc3Ry
ZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7CisgICAgaWYgKG1faXNWZXJ0
aWNhbCAmJiBtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3Ry
ZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7CiAgICAgICAgIC8vIFdlIHJlc2l6ZSB0aGUgb3BlcmF0
b3IgdG8gbWF0Y2ggdGhlIG9uZSBvZiB0aGUgc2l6ZSB2YXJpYW50LgogICAgICAgICBpZiAoaXNM
YXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIHN0cmV0
Y2ggc2l6ZSBpcyBhY3R1YWxseSBub3QgaW52b2x2ZWQgaW4gdGhlIHNlbGVjdGlvbiBvZiB0aGUg
c2l6ZSB2YXJpYW50IGluIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yLgogICAgICAgICAg
ICAgLy8gV2Ugc2ltcGx5IHVzZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgc2VsZWN0ZWQg
c2l6ZSB2YXJpYW50IGdseXBoLgotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0g
Ym91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJv
dW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAg
ICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAg
ICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFko
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHJlc2NhbGUgdGhlIGhlaWdo
dCBhbmQgZGVwdGggcHJvcG9ydGlvbmF0ZWx5LgotICAgICAgICAgICAgZmxvYXQgdmFyaWFudFNp
emUgPSBoZWlnaHRGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICAgICAgZmxvYXQgdmFyaWFu
dFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOwogICAgICAg
ICAgICAgZmxvYXQgc2l6ZSA9IHN0cmV0Y2hTaXplKCk7CiAgICAgICAgICAgICBmbG9hdCBhc3Bl
Y3QgPSBzaXplID4gMCA/IHZhcmlhbnRTaXplIC8gc2l6ZSA6IDEuMDsKICAgICAgICAgICAgIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwpAQCAtNjUzLDMwICszOTcsMzAg
QEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIH0KIAogICAg
IGlmICghbV9pc1ZlcnRpY2FsKSB7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0
Y2hUeXBlOjpTaXplVmFyaWFudCkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRz
ID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9y
Lm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQp
IHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92
ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRo
QmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKLSAgICAgICAgICAgIG1fc3RyZXRj
aFdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsKLSAgICAgICAgfSBlbHNl
IGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7CisgICAg
ICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9wZXJh
dG9yLm1fdmFyaWFudCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJl
dGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7CiAg
ICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHM7CiAgICAgICAgICAgICBtX3N0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lID0gMDsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dC
YXNlbGluZSA9IDA7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9hc3NlbWJseS5ib3R0b21PckxlZnQpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBib3Vu
ZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCk7CiAgICAg
ICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5p
dD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRzLnkoKSk7CiAgICAg
ICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0
PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAKLSAg
ICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3BPclJp
Z2h0KTsKKyAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRoT3Bl
cmF0b3IubV9hc3NlbWJseS50b3BPclJpZ2h0KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92
ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRo
QmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dC
YXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgZ2x5cGhCb3VuZHMg
PSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisgICAgICAgICAgICBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0ZW5z
aW9uKTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1h
eDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMu
eSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4
PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4
WSgpKTsKIAotICAgICAgICAgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewot
ICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5t
aWRkbGUpOworICAgICAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlkZGxl
LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpOwogICAgICAgICAgICAgICAgIG1f
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgICAg
ICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0
cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAg
ICB9CkBAIC02ODYsMjM3ICs0MzAsNTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBk
YXRlU3R5bGUoKQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJzdExp
bmVCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gU3RyZXRjaFR5
cGU6OlVuc3RyZXRjaGVkKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgpKQog
ICAgICAgICByZXR1cm4gT3B0aW9uYWw8aW50PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5l
KTsKICAgICByZXR1cm4gUmVuZGVyTWF0aE1MVG9rZW46OmZpcnN0TGluZUJhc2VsaW5lKCk7CiB9
CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGlmIChtX3N0cmV0
Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkKKyAgICBpZiAobV9tYXRoT3BlcmF0
b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgbG9naWNhbEhlaWdodCA9IG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUgKyBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgUmVuZGVy
Qm94Ojpjb21wdXRlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBjb21w
dXRlZFZhbHVlcyk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50
R2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExheW91
dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmltKQotewotICAgIEZsb2F0UmVj
dCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOwotCi0gICAgTGF5b3V0UmVjdCBn
bHlwaFBhaW50UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5cGhC
b3VuZHMud2lkdGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBnbHlwaFBhaW50UmVj
dC5zZXRZKG9yaWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOwotCi0gICAgLy8gSW4gb3JkZXIg
dG8gaGF2ZSBnbHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhlIGNv
bm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcwotICAgIC8vIGFuZCB0cmltIG9mZiBv
bmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQgaGF2
ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUgbGVzcwotICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFnZS4g
VGhlc2UgZWRnZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNvbm5l
Y3RlZCBnbHlwaHMuCi0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAg
c3dpdGNoICh0cmltKSB7Ci0gICAgY2FzZSBUcmltVG9wOgotICAgICAgICBnbHlwaFBhaW50UmVj
dC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOwotICAgICAgICBj
bGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFRyaW1Cb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4
WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBjbGlw
Qm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0
LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAgIGds
eXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3Io
KSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55
KCkpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5t
YXhZKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0OgotICAgICAgICBnbHlw
aFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEpOwot
ICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1SaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJlY3Qu
c2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0gICAg
ICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdodDoKLSAgICAgICAgZ2x5cGhQ
YWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsKLSAg
ICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgo
KS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBoUGFp
bnRSZWN0LngoKSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFp
bnRSZWN0Lm1heFgoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2luZyBJ
bnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCi0gICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKLSAg
ICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgR2x5cGhCdWZmZXIgYnVm
ZmVyOwotICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lkdGhG
b3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZv
bnRDYXNjYWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKLQotICAgIHJl
dHVybiBnbHlwaFBhaW50UmVjdDsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmls
bFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQobV9pc1Zl
cnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhB
c3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7Ci0g
ICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBubyBz
cGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGlu
Zy4KLSAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwotCi0g
ICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5leHRl
bnNpb24pOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFsbG93
cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAgICAvLyBy
ZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVyZHJh
dyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAgICBMYXlv
dXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdFlFZGdl
VG8oZnJvbS55KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnkoKSk7Ci0g
ICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1taW5nIG1h
eSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVuZGVyIGds
eXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zmc2V0VG9H
bHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5cGhPcmln
aW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBoVG9wKTsK
LSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkpOwot
Ci0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkgewotICAg
ICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5l
eHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAgZ2x5cGhP
cmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUg
aXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1w
dHkgcmVjdGFuZ2xlCi0gICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBq
dXN0IGRyYXcgbm90aGluZy4KLSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxP
cGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQotewotICAg
IEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJl
dGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9u
LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7Ci0KLSAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVl
ZCB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5j
b250ZXh0KCkpOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFs
bG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAgICAv
LyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVy
ZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAgICBM
YXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdFhF
ZGdlVG8oZnJvbS54KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngoKSk7
Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1taW5n
IG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRlbmRl
ciBnbHlwaCwgc28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zm
c2V0VG9HbHlwaExlZnQgPSAtMjsKLSAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExheW91
dFBvaW50KGZyb20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgpLCB0
by55KCkpICsgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAgRmxvYXRSZWN0IGxh
c3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKLQotICAgIHdoaWxlIChsYXN0
UGFpbnRlZEdseXBoUmVjdC5tYXhYKCkgPCB0by54KCkpIHsKLSAgICAgICAgbGFzdFBhaW50ZWRH
bHlwaFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlwaE9y
aWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7Ci0gICAgICAgIGdseXBoT3JpZ2luLnNldFgoZ2x5cGhP
cmlnaW4ueCgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qud2lkdGgoKSk7Ci0KLSAgICAgICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdoIHRo
ZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCi0gICAg
ICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGluZy4K
LSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQoUGFp
bnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVu
ZGVyTWF0aE1MVG9rZW46OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKIAotICAgIGlmIChpbmZv
LmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNl
Rm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IG1fc3RyZXRj
aFR5cGUgPT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQorICAgIGlmIChpbmZvLmNvbnRleHQo
KS5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8ICFtX21hdGhPcGVyYXRvci5p
c1N0cmV0Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwogICAgIGluZm8uY29udGV4dCgpLnNl
dEZpbGxDb2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9y
KSk7CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQp
IHsKLSAgICAgICAgQVNTRVJUKG1fdmFyaWFudC5pc1ZhbGlkKCkpOworICAgIGlmIChtX21hdGhP
cGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6OlNpemVW
YXJpYW50KSB7CisgICAgICAgIEFTU0VSVChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuaXNWYWxp
ZCgpKTsKICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYWRkKG1f
dmFyaWFudC5nbHlwaCwgbV92YXJpYW50LmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1fdmFy
aWFudCkpOworICAgICAgICBidWZmZXIuYWRkKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5nbHlw
aCwgbV9tYXRoT3BlcmF0b3IubV92YXJpYW50LmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1f
bWF0aE9wZXJhdG9yLm1fdmFyaWFudCkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvclRv
cExlZnQgPSBjZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwotICAgICAg
ICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOworICAg
ICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRv
ci5tX3ZhcmlhbnQpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVyYXRv
clRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsKLSAg
ICAgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCksICpt
X3ZhcmlhbnQuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAgIGlu
Zm8uY29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9tYXRoT3Bl
cmF0b3IubV92YXJpYW50LmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNWZXJ0aWNhbCkKLSAgICAgICAgcGFp
bnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoaW5mbywgcGFpbnRPZmZzZXQpOwotICAgIGVsc2UKLSAg
ICAgICAgcGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7Ci19
Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2VtYmx5
KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewotICAg
IEFTU0VSVChtX2lzVmVydGljYWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0
Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJpZ2h0
LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFsaWQo
KSk7Ci0KLSAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRoZSBl
ZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhlIGVk
Z2VzIG9mIG91ciBwYWludCBib3guCisgICAgbV9tYXRoT3BlcmF0b3IubV9hc2NlbnQgPSBtX3N0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fZGVzY2VudCA9
IG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZTsKKyAgICBtX21hdGhPcGVyYXRvci5tX3dpZHRo
ID0gbG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZWFkaW5nU3BhY2UgOiBtX3RyYWlsaW5nU3Bh
Y2UsIDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9yVG9w
TGVmdCk7Ci0gICAgRmxvYXRSZWN0IHRvcEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9h
c3NlbWJseS50b3BPclJpZ2h0KTsKLSAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9yaWdpbihvcGVy
YXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhCb3VuZHMueSgp
KTsKLSAgICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBt
X2Fzc2VtYmx5LnRvcE9yUmlnaHQsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQotICAg
IEZsb2F0UmVjdCBib3R0b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHku
Ym90dG9tT3JMZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVyYXRv
clRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAoYm90
dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKLSAgICBM
YXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2Vt
Ymx5LmJvdHRvbU9yTGVmdCwgYm90dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOwotCi0gICAgaWYg
KG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGds
eXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVudHMu
IFRoZW4gc2hpZnQgaXQgaGFsZiB0aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9tIGds
eXBoLgotICAgICAgICBGbG9hdFJlY3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX2Fzc2VtYmx5Lm1pZGRsZSk7Ci0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3Jp
Z2luKG9wZXJhdG9yVG9wTGVmdC54KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgIG1p
ZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWludFJl
Y3QueSgpIC0gdG9wR2x5cGhQYWludFJlY3QubWF4WSgpKSAvIDIuMCkpOwotICAgICAgICBtaWRk
bGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMuaGVp
Z2h0KCkgLyAyLjApKTsKLQotICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRSZWN0
ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4s
IFRyaW1Ub3BBbmRCb3R0b20pOwotICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5
cGgoaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQ
YWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRl
bnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigpLCBi
b3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRSZWN0
Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkp
OwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFz
c2VtYmx5KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQot
ewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9
PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90
dG9tT3JMZWZ0LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JSaWdodC5p
c1ZhbGlkKCkpOwotCi0gICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28gdGhh
dCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3aXRo
IHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgotICAgIExheW91dFBvaW50IG9wZXJhdG9yVG9w
TGVmdCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKLSAgICBvcGVyYXRvclRvcExlZnQubW92
ZShtX2xlYWRpbmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50UG9p
bnQob3BlcmF0b3JUb3BMZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhPcmlnaW4ob3Bl
cmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fc3RyZXRjaEhlaWdodEFi
b3ZlQmFzZWxpbmUpOwotICAgIExheW91dFJlY3QgbGVmdEdseXBoUGFpbnRSZWN0ID0gcGFpbnRH
bHlwaChpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCwgbGVmdEdseXBoT3JpZ2luLCBUcmlt
UmlnaHQpOwotCi0gICAgRmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlw
aChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhPcmln
aW4ob3BlcmF0b3JUb3BMZWZ0LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91bmRz
LndpZHRoKCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2Vs
aW5lKTsKLSAgICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKGlu
Zm8sIG1fYXNzZW1ibHkudG9wT3JSaWdodCwgcmlnaHRHbHlwaE9yaWdpbiwgVHJpbUxlZnQpOwot
Ci0gICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBDZW50
ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50
IGV4dGVudHMuCi0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJhdG9y
VG9wTGVmdC54KCksIGxlZnRHbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtaWRkbGVHbHlwaE9y
aWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoKHJpZ2h0R2x5cGhQYWludFJlY3QueCgpIC0gbGVmdEds
eXBoUGFpbnRSZWN0Lm1heFgoKSkgLyAyLjAsIDApKTsKLSAgICAgICAgTGF5b3V0UmVjdCBtaWRk
bGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5taWRkbGUsIG1p
ZGRsZUdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZmlsbFdpdGhIb3Jp
em9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29y
bmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAgICBm
aWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVj
dC5tYXhYTWluWUNvcm5lcigpLCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkp
OwotICAgIH0gZWxzZQotICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChp
bmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgcmlnaHRHbHlwaFBhaW50
UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBpZiAobV9pc1ZlcnRpY2FsKQorICAgICAgICBt
X21hdGhPcGVyYXRvci5wYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBv
cGVyYXRvclRvcExlZnQpOworICAgIGVsc2UKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IucGFpbnRI
b3Jpem9udGFsR2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRvcExlZnQpOwog
fQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFp
bnRJbmZvRm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewogICAgIC8vIFdlIHNraXAgcGFp
bnRpbmcgZm9yIGludmlzaWJsZSBvcGVyYXRvcnMgdG9vIHRvIGF2b2lkIHNvbWUgIm1pc3Npbmcg
Y2hhcmFjdGVyIiBnbHlwaCB0byBhcHBlYXIgaWYgYXBwcm9wcmlhdGUgbWF0aCBmb250cyBhcmUg
bm90IGF2YWlsYWJsZS4KLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBTdHJldGNoVHlwZTo6VW5z
dHJldGNoZWQgfHwgaXNJbnZpc2libGVPcGVyYXRvcigpKQorICAgIGlmIChtX21hdGhPcGVyYXRv
ci5pc1N0cmV0Y2hlZCgpIHx8IGlzSW52aXNpYmxlT3BlcmF0b3IoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIFJlbmRlck1hdGhNTFRva2VuOjpwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJlY3QpOwogfQpAQCAtOTMxLDE5ICs0
OTIsMTkgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFjZUVy
cm9yKCkKICAgICAvLyBIZW5jZSB3ZSBkZXRlcm1pbmUgdGhlIGVycm9yIGluIHRoZSBsb2dpY2Fs
IHdpZHRoIHdpdGggcmVzcGVjdCB0byB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBnbHlwaChzKSB1
c2VkIHRvIHBhaW50IHRoZSBvcGVyYXRvci4KICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9naWNh
bFdpZHRoKCk7CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6VW5zdHJl
dGNoZWQpIHsKKyAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpIHsKICAgICAg
ICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKHRleHRDb250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7
CiAgICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpOwogICAg
IH0KIAotICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkK
LSAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsK
KyAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlN0
cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdp
ZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFzc2Vt
Ymx5V2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOwot
ICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhG
b3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCkpOwotICAgIGFzc2VtYmx5V2lkdGggPSBz
dGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LmV4
dGVuc2lvbikpOwotICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCi0gICAgICAg
IGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JH
bHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSkpOworICAgIGZsb2F0IGFzc2VtYmx5V2lkdGggPSBhZHZh
bmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOwor
ICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhG
b3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCkpOworICAgIGFz
c2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmV4dGVuc2lvbikpOworICAgIGlmIChtX21hdGhP
cGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCisgICAgICAgIGFzc2VtYmx5V2lk
dGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhP
cGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZSkpOwogICAgIHJldHVybiB3aWR0aCAtIGFzc2VtYmx5
V2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRleCBkY2E0NTQxLi42MzIxNDljIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRv
ci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVkZSAi
TWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5oIgor
I2luY2x1ZGUgIk1hdGhPcGVyYXRvci5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEuaCIK
ICNpbmNsdWRlICJSZW5kZXJNYXRoTUxUb2tlbi5oIgogCkBAIC01MSw3ICs1Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogVGhlIGRpc3BsYXlzdHlsZSBwcm9wZXJ0eSBpcyBub3QgaW1wbGVt
ZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3MzcpLgog
ICAgIGJvb2wgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSBjb25zdCB7IHJldHVybiAh
aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHkpICYmIGhh
c09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkxhcmdlT3ApOyB9CiAgICAg
Ym9vbCBpc1ZlcnRpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsOyB9Ci0gICAgTGF5
b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pdGFsaWNDb3JyZWN0
aW9uOyB9CisgICAgTGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9tYXRoT3BlcmF0b3IuaXRhbGljQ29ycmVjdGlvbigpOyB9CiAKICAgICB2b2lkIHN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBmaW5h
bDsKICAgICB2b2lkIHVwZGF0ZVN0eWxlKCkgZmluYWw7CkBAIC03MywyMCArNzQsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgVUNoYXIgdGV4dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX3RleHRDb250
ZW50OyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IEdseXBoQXNzZW1ibHlEYXRhIHsKLSAgICAg
ICAgR2x5cGhEYXRhIHRvcE9yUmlnaHQ7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb247Ci0g
ICAgICAgIEdseXBoRGF0YSBib3R0b21PckxlZnQ7Ci0gICAgICAgIEdseXBoRGF0YSBtaWRkbGU7
Ci0gICAgfTsKLSAgICBlbnVtIGNsYXNzIFN0cmV0Y2hUeXBlIHsgVW5zdHJldGNoZWQsIFNpemVW
YXJpYW50LCBHbHlwaEFzc2VtYmx5IH07Ci0gICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlwZTsK
LSAgICB1bmlvbiB7Ci0gICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7Ci0gICAgICAgIEdseXBo
QXNzZW1ibHlEYXRhIG1fYXNzZW1ibHk7Ci0gICAgfTsKLSAgICBMYXlvdXRVbml0IG1faXRhbGlj
Q29ycmVjdGlvbjsKLQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTE9wZXJhdG9yIChhbm9ueW1v
dXMpIiA6ICJSZW5kZXJNYXRoTUxPcGVyYXRvciI7IH0KICAgICB2b2lkIHBhaW50Q2hpbGRyZW4o
UGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5mbyYgZm9yQ2hp
bGQsIGJvb2wgdXNlUHJpbnRSZWN0KSBmaW5hbDsKICAgICBib29sIGlzUmVuZGVyTWF0aE1MT3Bl
cmF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDAsMjcgKzg3LDYgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkgY29uc3Q7CiAKLSAg
ICBib29sIGdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNvbnN0
OwotICAgIHZvaWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJik7Ci0gICAgdm9pZCBz
ZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJik7Ci0gICAgYm9vbCBjYWxj
dWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6
OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwotICAgIHZvaWQgY2Fs
Y3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcigpOwotICAgIHZvaWQgY2FsY3VsYXRlU3Ry
ZXRjaHlEYXRhKGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXpl
ID0gMCk7Ci0KLSAgICBlbnVtIEdseXBoUGFpbnRUcmltbWluZyB7Ci0gICAgICAgIFRyaW1Ub3As
Ci0gICAgICAgIFRyaW1Cb3R0b20sCi0gICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCi0gICAgICAg
IFRyaW1MZWZ0LAotICAgICAgICBUcmltUmlnaHQsCi0gICAgICAgIFRyaW1MZWZ0QW5kUmlnaHQK
LSAgICB9OwotCi0gICAgTGF5b3V0UmVjdCBwYWludEdseXBoKFBhaW50SW5mbyYsIGNvbnN0IEds
eXBoRGF0YSYsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyk7
Ci0gICAgdm9pZCBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7Ci0gICAgdm9pZCBm
aWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIHBhaW50VmVydGlj
YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdm9p
ZCBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9wZXJh
dG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0
T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RmxhZywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgdm9pZCBzZXRP
cGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpFbnRyeSopOwpAQCAtMTM3LDYgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0
VW5pdCBtX3RyYWlsaW5nU3BhY2U7CiAgICAgTGF5b3V0VW5pdCBtX21pblNpemU7CiAgICAgTGF5
b3V0VW5pdCBtX21heFNpemU7CisgICAgTWF0aE9wZXJhdG9yIG1fbWF0aE9wZXJhdG9yOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280783</attachid>
            <date>2016-06-08 00:05:21 -0700</date>
            <delta_ts>2016-06-08 09:54:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-156921-Move-selection-and-drawing-of-stretchy-op.patch</filename>
            <type>text/plain</type>
            <size>77104</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA1N2Q2YTAxNzcxMGNkYTY1ZWVkOWU4NDM3MDNjNGU4NDgwZTlhMzMyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyNiBBcHIgMjAxNiAwOToyMToxMCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEJ1ZyAx
NTY5MjEgLSBNb3ZlIHNlbGVjdGlvbiBhbmQgZHJhd2luZyBvZiBzdHJldGNoeSBvcGVyYXRvcnMK
IGludG8gYSBzZXBhcmF0ZSBNYXRoT3BlcmF0b3IgY2xhc3MKCi0tLQogU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjAgKysrCiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAgOCArCiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVyYXRvci5jcHAgICB8IDUwNCArKysr
KysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhPcGVy
YXRvci5oICAgICB8ICA5OCArKysrCiAuLi4vcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxP
cGVyYXRvci5jcHAgICAgICB8IDUzNSArKy0tLS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggICAgICAgIHwgIDM5ICstCiA3IGZpbGVz
IGNoYW5nZWQsIDcyMiBpbnNlcnRpb25zKCspLCA1MjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWMxODgxOC4uZTU3OWM2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTI1MTYsNiArMjUxNiw3IEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICByZW5kZXJpbmcvbGluZS9UcmFpbGluZ09iamVjdHMuY3BwCiAKICAgICByZW5kZXJp
bmcvbWF0aG1sL01hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5jcHAKKyAgICByZW5kZXJpbmcvbWF0
aG1sL01hdGhPcGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcAogICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAogICAg
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWU1MmU5ZS4uZTk5MmQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTIy
ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBNb3ZlIHNlbGVj
dGlvbiBhbmQgZHJhd2luZyBvZiBzdHJldGNoeSBvcGVyYXRvcnMgaW50byBhIHNlcGFyYXRlIE1h
dGhPcGVyYXRvciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU2OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OiBBZGQgdGhlIE1hdGhPcGVyYXRvciBmaWxlcy4KKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHJl
bmRlcmluZy9tYXRobWwvTWF0aE9wZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpib3VuZHNGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAg
ICAgIChXZWJDb3JlOjpoZWlnaHRGb3JHbHlwaCk6IE1vdmVkIGZyb20gUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuCisgICAgICAgIChXZWJDb3JlOjphZHZhbmNlV2lkdGhGb3JHbHlwaCk6IE1vdmVkIGZy
b20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6
Ok1hdGhPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnNldE9wZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Z2V0QmFzZUdseXBoKTogTW92
ZWQgZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVy
YXRvcjo6c2V0U2l6ZVZhcmlhbnQpOiBNb3ZlZCBmcm9tIFJlbmRlck1hdGhNTE9wZXJhdG9yLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpzZXRHbHlwaEFzc2VtYmx5KTogTW92ZWQg
ZnJvbSBSZW5kZXJNYXRoTUxPcGVyYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhPcGVyYXRv
cjo6Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcik6IE1vdmVkIGZyb20gUmVuZGVy
TWF0aE1MT3BlcmF0b3Igd2l0aCBhZGRpdGlvbmFsIHN0eWxlIHBhcmFtZXRlci4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxCYWNrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5
RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpwYWludEdseXBo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OmZpbGxXaXRoVmVydGlj
YWxFeHRlbnNpb25HbHlwaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9y
OjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWF0aE9wZXJhdG9yOjpwYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2Vt
Ymx5KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6Oml0YWxpY0NvcnJlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWF0aE9wZXJhdG9yOjppc1N0cmV0Y2hlZCk6CisgICAgICAg
IChXZWJDb3JlOjpNYXRoT3BlcmF0b3I6OnVuc3RyZXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpN
YXRoT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRhOjpHbHlwaEFzc2VtYmx5RGF0YSk6IE1vdmVk
IGZyb20gUmVuZGVyTWF0aE1MT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpNYXRoT3BlcmF0
b3I6OnN0cmV0Y2hTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6IFVwZGF0ZWQgdG8gdXNlIE1hdGhPcGVyYXRv
ciBtZW1iZXJzLgorICAgICAgICBGb3Igbm93IHdlIGNhbGwgc2V0T3BlcmF0b3IgdG8gdHJhbnNt
aXQgaW5mb3JtYXRpb24gdG8gbV9tYXRoT3BlcmF0b3IuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUpOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0
b3IgbWVtYmVycy4KKyAgICAgICAgRm9yIG5vdyB3ZSBzZXQgc29tZSBtX21hdGhPcGVyYXRvciBt
ZW1iZXJzIHRvIHRyYW5zbWl0IGl0IHNvbWUgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Zmlyc3RMaW5lQmFzZWxpbmUpOiBVcGRhdGVkIHRvIHVz
ZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9w
ZXJhdG9yOjpjb21wdXRlTG9naWNhbEhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50KTogRGl0dG8uCisgICAgICAgIEZvciBub3cgd2Ug
c2V0IHNvbWUgbV9tYXRoT3BlcmF0b3IgbWVtYmVycyB0byB0cmFuc21pdCBpdCBzb21lIGluZm9y
bWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50Q2hp
bGRyZW4pOiBVcGRhdGVkIHRvIHVzZSBNYXRoT3BlcmF0b3IgbWVtYmVycy4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjp0cmFpbGluZ1NwYWNlRXJyb3IpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9yOjpnZXRCYXNlR2x5cGgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldFNpemVW
YXJpYW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJhdG9y
OjpzZXRHbHlwaEFzc2VtYmx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZURpc3BsYXlT
dHlsZUxhcmdlT3BlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRHbHlwaCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6ZmlsbFdpdGhWZXJ0aWNhbEV4dGVu
c2lvbkdseXBoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTE9wZXJh
dG9yOjpmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1i
bHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBh
aW50SG9yaXpvbnRhbEdseXBoQXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTE9wZXJhdG9yOjppdGFsaWNDb3JyZWN0aW9uKTogVXBkYXRlZCB0byB1c2UgTWF0aE9w
ZXJhdG9yIG1lbWJlcnMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
R2x5cGhBc3NlbWJseURhdGE6OkdseXBoQXNzZW1ibHlEYXRhKTogRGVsZXRlZC4KKwogMjAxNi0w
Ni0wNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSBF
dmVudCAvIEV2ZW50VGFyZ2V0IHByb3BlcnRpZXMgb24gV29ya2VyR2xvYmFsU2NvcGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBl
M2QyNjJlLi4yMDJiOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjU4LDYgKzE2NTgsOCBAQAogCQk0MzkwNDZFODEyREEy
NUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDQxMkRBMjVFODAwQUY4MEEyIC8qIFJl
bmRlck1hdGhNTFNjcmlwdHMuaCAqLzsgfTsKIAkJNDM5MDQ2RTkxMkRBMjVFODAwQUY4MEEyIC8q
IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1M
VW5kZXJPdmVyLmNwcCAqLzsgfTsKIAkJNDM5MDQ2RUExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFVuZGVyT3Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDM5MDQ2RDYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zl
ci5oICovOyB9OworCQk0MzkwNDZFOTEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ1
MTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3BlcmF0b3IuY3BwICovOyB9OworCQk0MzkwNDZFQTEy
REEyNUU4MTJBRjgwQUMgLyogTWF0aE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENjEyREEyNUU4MTJBRjgwQUMgLyogTWF0aE9w
ZXJhdG9yLmggKi87IH07CiAJCTQzOTA0NkVCMTJEQTI1RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRo
TUxUb2tlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MzkwNDZENzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwICovOyB9
OwogCQk0MzkwNDZFQzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ4MTJEQTI1
RTgwMEFGODBBOSAvKiBSZW5kZXJNYXRoTUxUb2tlbi5oICovOyB9OwogCQk0MzlEMzM0MzEzQTY5
MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzlEMzM0MDEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5p
bWF0ZWRUeXBlLmggKi87IH07CkBAIC05MTk5LDYgKzkyMDEsOCBAQAogCQk0MzkwNDZENDEyREEy
NUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU2NyaXB0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxTY3JpcHRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQzOTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1M
VW5kZXJPdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5MDQ2RDYxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDUxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVyYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXRoT3BlcmF0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzkwNDZENjEyREEyNUU4MTJBRjgwQUMg
LyogTWF0aE9wZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGhP
cGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MzkwNDZENzEyREEyNUU4
MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MVG9rZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MzkwNDZEODEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MVG9rZW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM5RDMzNDAxM0E2OTExQzAwQzIwRjRGIC8q
IFNWR0FuaW1hdGVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2OTI3LDYgKzE2
OTMxLDggQEAKIAkJCQk0MzkwNDZEODEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9r
ZW4uaCAqLywKIAkJCQk0MzkwNDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5k
ZXJPdmVyLmNwcCAqLywKIAkJCQk0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmggKi8sCisJCQkJNDM5MDQ2RDUxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhP
cGVyYXRvci5jcHAgKi8sCisJCQkJNDM5MDQ2RDYxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhPcGVy
YXRvci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBtYXRobWw7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjc2MzgsNiArMjc2NDQsNyBAQAogCQkJCTQzOTA0NkU2MTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQk0Mzkw
NDZFQzEyREEyNUU4MDBBRjgwQTkgLyogUmVuZGVyTWF0aE1MVG9rZW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzOTA0NkVBMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQzOTA0NkVBMTJEQTI1RTgxMkFGODBBQyAvKiBNYXRoT3Bl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAvKiBS
ZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREVCQ0NERDIxNjY0NkU4MjAwQTQ1MkUx
IC8qIFJlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUZB
MzAzRjEzMTZDMjlDMDBDMEJGQzUgLyogUmVuZGVyTWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTMxMSw2ICszMTMxOCw3IEBACiAJCQkJNDM5MDQ2RTUxMkRBMjVFODAwQUY4MEEy
IC8qIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM5MDQ2
RUIxMkRBMjVFODAwQUY4MEE5IC8qIFJlbmRlck1hdGhNTFRva2VuLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQzOTA0NkU5MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM5MDQ2RTkxMkRBMjVFODEyQUY4MEFDIC8qIE1hdGhP
cGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTgg
LyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREU0OUIzMDkxNjVGMkZFMTAw
MTAzMzhEIC8qIFJlbmRlck1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQxRkEzMDNFMTMxNkMyOUMwMEMwQkZDNSAvKiBSZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9NYXRoT3BlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRo
T3BlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYTE5YTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL01hdGhP
cGVyYXRvci5jcHAKQEAgLTAsMCArMSw1MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShNQVRITUwpCisjaW5jbHVkZSAiTWF0aE9w
ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlN0eWxlSW5o
ZXJpdGVkRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgRmxv
YXRSZWN0IGJvdW5kc0ZvckdseXBoKGNvbnN0IEdseXBoRGF0YSYgZGF0YSkKK3sKKyAgICByZXR1
cm4gZGF0YS5pc1ZhbGlkKCkgPyBkYXRhLmZvbnQtPmJvdW5kc0ZvckdseXBoKGRhdGEuZ2x5cGgp
IDogRmxvYXRSZWN0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgaGVpZ2h0Rm9yR2x5cGgo
Y29uc3QgR2x5cGhEYXRhJiBkYXRhKQoreworICAgIHJldHVybiBib3VuZHNGb3JHbHlwaChkYXRh
KS5oZWlnaHQoKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChjb25zdCBHbHlwaERhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIGRhdGEuaXNWYWxpZCgpID8g
ZGF0YS5mb250LT53aWR0aEZvckdseXBoKGRhdGEuZ2x5cGgpIDogMDsKK30KKworLy8gRklYTUU6
IFRoaXMgaGFyZGNvZGVkIGRhdGEgY2FuIGJlIHJlbW92ZWQgd2hlbiBPcGVuVHlwZSBNQVRIIGZv
bnQgYXJlIHdpZGVseSBhdmFpbGFibGUgKGh0dHA6Ly93a2J1Zy8xNTY4MzcpLgorc3RydWN0IFN0
cmV0Y2h5Q2hhcmFjdGVyIHsKKyAgICBVQ2hhciBjaGFyYWN0ZXI7CisgICAgVUNoYXIgdG9wQ2hh
cjsKKyAgICBVQ2hhciBleHRlbnNpb25DaGFyOworICAgIFVDaGFyIGJvdHRvbUNoYXI7CisgICAg
VUNoYXIgbWlkZGxlQ2hhcjsKK307CisvLyBUaGUgZmlyc3QgbGVmdFJpZ2h0UGFpcnNDb3VudCBw
YWlycyBjb3JyZXNwb25kIHRvIGxlZnQvcmlnaHQgZmVuY2VzIHRoYXQgY2FuIGVhc2lseSBiZSBt
aXJyb3JlZCBpbiBSVEwuCitzdGF0aWMgY29uc3Qgc2hvcnQgbGVmdFJpZ2h0UGFpcnNDb3VudCA9
IDU7CitzdGF0aWMgY29uc3QgU3RyZXRjaHlDaGFyYWN0ZXIgc3RyZXRjaHlDaGFyYWN0ZXJzWzE0
XSA9IHsKKyAgICB7IDB4MjggICwgMHgyMzliLCAweDIzOWMsIDB4MjM5ZCwgMHgwICAgIH0sIC8v
IGxlZnQgcGFyZW50aGVzaXMKKyAgICB7IDB4MjkgICwgMHgyMzllLCAweDIzOWYsIDB4MjNhMCwg
MHgwICAgIH0sIC8vIHJpZ2h0IHBhcmVudGhlc2lzCisgICAgeyAweDViICAsIDB4MjNhMSwgMHgy
M2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBsZWZ0IHNxdWFyZSBicmFja2V0CisgICAgeyAweDVk
ICAsIDB4MjNhNCwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBzcXVhcmUgYnJh
Y2tldAorICAgIHsgMHg3YiAgLCAweDIzYTcsIDB4MjNhYSwgMHgyM2E5LCAweDIzYTggfSwgLy8g
bGVmdCBjdXJseSBicmFja2V0CisgICAgeyAweDdkICAsIDB4MjNhYiwgMHgyM2FhLCAweDIzYWQs
IDB4MjNhYyB9LCAvLyByaWdodCBjdXJseSBicmFja2V0CisgICAgeyAweDIzMDgsIDB4MjNhMSwg
MHgyM2EyLCAweDIzYTIsIDB4MCAgICB9LCAvLyBsZWZ0IGNlaWxpbmcKKyAgICB7IDB4MjMwOSwg
MHgyM2E0LCAweDIzYTUsIDB4MjNhNSwgMHgwICAgIH0sIC8vIHJpZ2h0IGNlaWxpbmcKKyAgICB7
IDB4MjMwYSwgMHgyM2EyLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgZmxvb3IK
KyAgICB7IDB4MjMwYiwgMHgyM2E1LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0
IGZsb29yCisgICAgeyAweDdjICAsIDB4N2MsICAgMHg3YywgICAweDdjLCAgIDB4MCAgICB9LCAv
LyB2ZXJ0aWNhbCBiYXIKKyAgICB7IDB4MjAxNiwgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgw
ICAgIH0sIC8vIGRvdWJsZSB2ZXJ0aWNhbCBsaW5lCisgICAgeyAweDIyMjUsIDB4MjIyNSwgMHgy
MjI1LCAweDIyMjUsIDB4MCAgICB9LCAvLyBwYXJhbGxlbCB0bworICAgIHsgMHgyMjJiLCAweDIz
MjAsIDB4MjNhZSwgMHgyMzIxLCAweDAgICAgfSAvLyBpbnRlZ3JhbCBzaWduCit9OworCit2b2lk
IE1hdGhPcGVyYXRvcjo6c2V0T3BlcmF0b3IoVUNoYXIgYmFzZUNoYXJhY3RlciwgYm9vbCBpc1Zl
cnRpY2FsKQoreworICAgIG1fYmFzZUNoYXJhY3RlciA9IGJhc2VDaGFyYWN0ZXI7CisgICAgbV9p
c1ZlcnRpY2FsID0gaXNWZXJ0aWNhbDsKK30KKworYm9vbCBNYXRoT3BlcmF0b3I6OmdldEJhc2VH
bHlwaChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEdseXBoRGF0YSYgYmFzZUdseXBoKSBjb25z
dAoreworICAgIGJhc2VHbHlwaCA9IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKG1fYmFzZUNoYXJhY3RlciwgIXN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSk7
CisgICAgcmV0dXJuIGJhc2VHbHlwaC5pc1ZhbGlkKCkgJiYgYmFzZUdseXBoLmZvbnQgPT0gJnN0
eWxlLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKK30KKwordm9pZCBNYXRoT3BlcmF0b3I6
OnNldFNpemVWYXJpYW50KGNvbnN0IEdseXBoRGF0YSYgc2l6ZVZhcmlhbnQpCit7CisgICAgQVNT
RVJUKHNpemVWYXJpYW50LmlzVmFsaWQoKSk7CisgICAgQVNTRVJUKHNpemVWYXJpYW50LmZvbnQt
Pm1hdGhEYXRhKCkpOworICAgIG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlh
bnQ7CisgICAgbV92YXJpYW50ID0gc2l6ZVZhcmlhbnQ7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9y
OjpzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEp
Cit7CisgICAgbV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5OworICAg
IG1fYXNzZW1ibHkgPSBhc3NlbWJseURhdGE7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpjYWxj
dWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
K3sKKyAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKKworICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7
CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkgfHwgIWJhc2VHbHlwaC5m
b250LT5tYXRoRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgdmFsdWUgb2Yg
ZGlzcGxheU9wZXJhdG9yTWluSGVpZ2h0IGlzIHNvbWV0aW1lcyB0b28gc21hbGwsIHNvIHdlIGVu
c3VyZSB0aGF0IGl0IGlzIGF0IGxlYXN0IFxzcXJ0ezJ9IHRpbWVzIHRoZSBzaXplIG9mIHRoZSBi
YXNlIGdseXBoLgorICAgIGZsb2F0IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCA9IHN0ZDo6bWF4
KGhlaWdodEZvckdseXBoKGJhc2VHbHlwaCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZv
bnQtPm1hdGhEYXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBl
TWF0aERhdGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOworCisgICAgVmVjdG9yPEdseXBo
PiBzaXplVmFyaWFudHM7CisgICAgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFy
dD4gYXNzZW1ibHlQYXJ0czsKKyAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0
aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgdHJ1ZSwgc2l6ZVZhcmlhbnRzLCBhc3NlbWJseVBh
cnRzKTsKKworICAgIC8vIFdlIGNob29zZSB0aGUgZmlyc3Qgc2l6ZSB2YXJpYW50IHRoYXQgaXMg
bGFyZ2VyIHRoYW4gdGhlIGV4cGVjdGVkIGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCBhbmQgb3Ro
ZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBsYXJnZXN0IHZhcmlhbnQuCisgICAgZm9yIChhdXRvJiBz
aXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgeworICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
KHNpemVWYXJpYW50LCBiYXNlR2x5cGguZm9udCk7CisgICAgICAgIHNldFNpemVWYXJpYW50KGds
eXBoRGF0YSk7CisgICAgICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IGdseXBoRGF0YS5mb250LT5t
YXRoRGF0YSgpLT5nZXRJdGFsaWNDb3JyZWN0aW9uKCpnbHlwaERhdGEuZm9udCwgZ2x5cGhEYXRh
LmdseXBoKTsKKyAgICAgICAgaWYgKGhlaWdodEZvckdseXBoKGdseXBoRGF0YSkgPj0gZGlzcGxh
eU9wZXJhdG9yTWluSGVpZ2h0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29s
IE1hdGhPcGVyYXRvcjo6Y2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxiYWNrKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSwgY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFy
dD4mIGFzc2VtYmx5UGFydHMsIEdseXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpIGNvbnN0
Cit7CisgICAgLy8gVGhlIHN0cnVjdHVyZSBvZiB0aGUgT3BlbiBUeXBlIE1hdGggdGFibGUgaXMg
YSBiaXQgbW9yZSBnZW5lcmFsIHRoYW4gdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSB0aGUgTWF0
aE9wZXJhdG9yIGNvZGUsIHNvIHdlIHRyeSB0byBmYWxsYmFjayBpbiBhIHJlYXNvbmFibGUgd2F5
LgorICAgIC8vIEZJWE1FOiBNYXRoT3BlcmF0b3Igc2hvdWxkIHN1cHBvcnQgdGhlIG1vc3QgZ2Vu
ZXJhbCBmb3JtYXQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAz
MjcpLgorICAgIC8vIFdlIHVzZSB0aGUgYXBwcm9hY2ggb2YgdGhlIGNvcHlDb21wb25lbnRzIGZ1
bmN0aW9uIGluIGdpdGh1Yi5jb20vbWF0aGpheC9NYXRoSmF4LWRldi9ibG9iL21hc3Rlci9mb250
cy9PcGVuVHlwZU1hdGgvZm9udFV0aWwucHkKKworICAgIC8vIFdlIGNvdW50IHRoZSBudW1iZXIg
b2Ygbm9uIGV4dGVuZGVyIHBpZWNlcy4KKyAgICBpbnQgbm9uRXh0ZW5kZXJDb3VudCA9IDA7Cisg
ICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgeworICAgICAgICBpZiAoIXBhcnQu
aXNFeHRlbmRlcikKKyAgICAgICAgICAgIG5vbkV4dGVuZGVyQ291bnQrKzsKKyAgICB9CisgICAg
aWYgKG5vbkV4dGVuZGVyQ291bnQgPiAzKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMg
aXMgbm90IHN1cHBvcnRlZDogdGhlcmUgYXJlIHRvbyBtYW55IHBpZWNlcy4KKworICAgIC8vIFdl
IG5vdyBicm93c2UgdGhlIGxpc3Qgb2YgcGllY2VzIGZyb20gbGVmdCB0byByaWdodCBmb3IgaG9y
aXpvbnRhbCBvcGVyYXRvcnMgYW5kIGZyb20gYm90dG9tIHRvIHRvcCBmb3IgdmVydGljYWwgb3Bl
cmF0b3JzLgorICAgIGVudW0gUGFydFR5cGUgeworICAgICAgICBTdGFydCwKKyAgICAgICAgRXh0
ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGUsCisgICAgICAgIE1pZGRsZSwKKyAgICAgICAgRXh0
ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5kLAorICAgICAgICBFbmQsCisgICAgICAgIE5vbmUKKyAg
ICB9OworICAgIFBhcnRUeXBlIGV4cGVjdGVkUGFydFR5cGUgPSBTdGFydDsKKyAgICBhc3NlbWJs
eURhdGEuZXh0ZW5zaW9uLmdseXBoID0gMDsKKyAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBo
ID0gMDsKKyAgICBmb3IgKGF1dG8mIHBhcnQgOiBhc3NlbWJseVBhcnRzKSB7CisgICAgICAgIGlm
IChub25FeHRlbmRlckNvdW50IDwgMykgeworICAgICAgICAgICAgLy8gSWYgd2Ugb25seSBoYXZl
IGF0IG1vc3QgdHdvIG5vbi1leHRlbmRlcnMgdGhlbiB3ZSBza2lwIHRoZSBtaWRkbGUgZ2x5cGgu
CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRQYXJ0VHlwZSA9PSBFeHRlbmRlckJldHdlZW5TdGFy
dEFuZE1pZGRsZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJC
ZXR3ZWVuTWlkZGxlQW5kRW5kOworICAgICAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRQYXJ0VHlw
ZSA9PSBNaWRkbGUpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEVuZDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAocGFydC5pc0V4dGVuZGVyKSB7CisgICAgICAgICAgICBpZiAo
IWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCisgICAgICAgICAgICAgICAgYXNzZW1ibHlE
YXRhLmV4dGVuc2lvbi5nbHlwaCA9IHBhcnQuZ2x5cGg7IC8vIFdlIGNvcHkgdGhlIGV4dGVuZGVy
IHBhcnQuCisgICAgICAgICAgICBlbHNlIGlmIChhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBo
ICE9IHBhcnQuZ2x5cGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlz
IG5vdCBzdXBwb3J0ZWQ6IHRoZSBhc3NlbWJseSBoYXMgZGlmZmVyZW50IGV4dGVuZGVycy4KKwor
ICAgICAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7CisgICAgICAgICAgICBjYXNl
IFN0YXJ0OgorICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgbGVmdC9ib3R0b20gcGFy
dC4KKyAgICAgICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuU3Rh
cnRBbmRNaWRkbGU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXNl
IE1pZGRsZToKKyAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIG1pZGRsZSBwYXJ0Lgor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRkbGVB
bmRFbmQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYXNlIEVuZDoK
KyAgICAgICAgICAgIGNhc2UgTm9uZToKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBz
dXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIGV4dGVuZGVyLgorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRN
aWRkbGU6CisgICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKKyAg
ICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgbXVsdGlwbGUgY29uc2VjdXRpdmUgZXh0ZW5kZXJz
LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgc3dpdGNoIChleHBlY3RlZFBhcnRUeXBlKSB7CisgICAgICAgIGNhc2UgU3RhcnQ6
CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRoZSBsZWZ0L2JvdHRvbSBwYXJ0LgorICAgICAgICAg
ICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5nbHlwaCA9IHBhcnQuZ2x5cGg7CisgICAgICAg
ICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRkbGU7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5TdGFydEFu
ZE1pZGRsZToKKyAgICAgICAgY2FzZSBNaWRkbGU6CisgICAgICAgICAgICAvLyBXZSBjb3B5IHRo
ZSBtaWRkbGUgcGFydC4KKyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPSBw
YXJ0LmdseXBoOworICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vl
bk1pZGRsZUFuZEVuZDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEV4dGVu
ZGVyQmV0d2Vlbk1pZGRsZUFuZEVuZDoKKyAgICAgICAgY2FzZSBFbmQ6CisgICAgICAgICAgICAv
LyBXZSBjb3B5IHRoZSByaWdodC90b3AgcGFydC4KKyAgICAgICAgICAgIGFzc2VtYmx5RGF0YS50
b3BPclJpZ2h0LmdseXBoID0gcGFydC5nbHlwaDsKKyAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5
cGUgPSBOb25lOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgTm9uZToKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgZ290IGFuIHVuZXhwZWN0ZWQg
bm9uLWV4dGVuZGVyIHBhcnQuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkOiB3ZSBhbHdheXMgYXNzdW1l
IHRoYXQgd2UgaGF2ZSBhbiBleHRlbnNpb24gZ2x5cGguCisKKyAgICAvLyBJZiB3ZSBkb24ndCBo
YXZlIHRvcC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lvbiBnbHlwaC4KKyAgICBp
ZiAoIWFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoKQorICAgICAgICBhc3NlbWJseURhdGEu
dG9wT3JSaWdodC5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7CisgICAgaWYg
KCFhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoKQorICAgICAgICBhc3NlbWJseURhdGEu
Ym90dG9tT3JMZWZ0LmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaDsKKworICAg
IGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQgPSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udCgpOworICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZm9udCA9IGFzc2VtYmx5RGF0
YS50b3BPclJpZ2h0LmZvbnQ7CisgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdC5mb250ID0g
YXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udDsKKyAgICBhc3NlbWJseURhdGEubWlkZGxlLmZv
bnQgPSBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID8gYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQu
Zm9udCA6IG51bGxwdHI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBNYXRoT3BlcmF0
b3I6OmNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0
KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQoreworICAgIEFTU0VS
VCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9pc1ZlcnRpY2FsKTsKKworICAgIEdseXBoRGF0YSBi
YXNlR2x5cGg7CisgICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUsIGJhc2VHbHlwaCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgpIHsKKyAgICAgICAgLy8g
V2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFyZ2UgZW5vdWdoLgorICAg
ICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdodEZvckdseXBoKGJhc2VH
bHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOworICAgICAgICBpZiAodGFy
Z2V0U2l6ZSA8PSBiYXNlU2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBN
YXRoT3BlcmF0b3I6OkdseXBoQXNzZW1ibHlEYXRhIGFzc2VtYmx5RGF0YTsKKyAgICBpZiAoYmFz
ZUdseXBoLmZvbnQtPm1hdGhEYXRhKCkpIHsKKyAgICAgICAgVmVjdG9yPEdseXBoPiBzaXplVmFy
aWFudHM7CisgICAgICAgIFZlY3RvcjxPcGVuVHlwZU1hdGhEYXRhOjpBc3NlbWJseVBhcnQ+IGFz
c2VtYmx5UGFydHM7CisgICAgICAgIGJhc2VHbHlwaC5mb250LT5tYXRoRGF0YSgpLT5nZXRNYXRo
VmFyaWFudHMoYmFzZUdseXBoLmdseXBoLCBtX2lzVmVydGljYWwsIHNpemVWYXJpYW50cywgYXNz
ZW1ibHlQYXJ0cyk7CisgICAgICAgIC8vIFdlIHZlcmlmeSB0aGUgc2l6ZSB2YXJpYW50cy4KKyAg
ICAgICAgZm9yIChhdXRvJiBzaXplVmFyaWFudCA6IHNpemVWYXJpYW50cykgeworICAgICAgICAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOworICAg
ICAgICAgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKQorICAgICAgICAgICAgICAgICptYXhpbXVt
R2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9y
R2x5cGgoZ2x5cGhEYXRhKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
ZXRTaXplVmFyaWFudChnbHlwaERhdGEpOworICAgICAgICAgICAgICAgIGZsb2F0IHNpemUgPSBt
X2lzVmVydGljYWwgPyBoZWlnaHRGb3JHbHlwaChnbHlwaERhdGEpIDogYWR2YW5jZVdpZHRoRm9y
R2x5cGgoZ2x5cGhEYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoc2l6ZSA+PSB0YXJnZXRTaXpl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBXZSB2ZXJpZnkgaWYgdGhlcmUgaXMgYSBjb25zdHJ1Y3Rpb24uCisgICAg
ICAgIGlmICghY2FsY3VsYXRlR2x5cGhBc3NlbWJseUZhbGxiYWNrKHN0eWxlLCBhc3NlbWJseVBh
cnRzLCBhc3NlbWJseURhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmICghbV9pc1ZlcnRpY2FsKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IC8vIElmIHRoZSBmb250IGRvZXMgbm90IGhhdmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0
byB0aGUgVW5pY29kZS1vbmx5IGNvbnN0cnVjdGlvbnMuCisgICAgICAgIGNvbnN0IFN0cmV0Y2h5
Q2hhcmFjdGVyKiBzdHJldGNoeUNoYXJhY3RlciA9IG51bGxwdHI7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIG1heEluZGV4ID0gV1RGX0FSUkFZX0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXhJbmRleDsgKytpbmRl
eCkgeworICAgICAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVy
ID09IG1fYmFzZUNoYXJhY3RlcikgeworICAgICAgICAgICAgICAgIHN0cmV0Y2h5Q2hhcmFjdGVy
ID0gJnN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFzdHls
ZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgaW5kZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50
ICogMikgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVm
dCBkaXJlY3Rpb24gd2Ugc2VsZWN0IHRoZSBtaXJyb3JlZCBmb3JtIGJ5IGFkZGluZyAtMSBvciAr
MSBhY2NvcmRpbmcgdG8gdGhlIHBhcml0eSBvZiBpbmRleC4KKyAgICAgICAgICAgICAgICAgICAg
aW5kZXggKz0gaW5kZXggJSAyID8gLTEgOiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElm
IHdlIGRpZG4ndCBmaW5kIGEgc3RyZXRjaHkgY2hhcmFjdGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0
ZXIsIHdlIGRvbid0IGtub3cgaG93IHRvIHN0cmV0Y2ggaXQuCisgICAgICAgIGlmICghc3RyZXRj
aHlDaGFyYWN0ZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2UgY29udmVy
dCB0aGUgbGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0
YS4KKyAgICAgICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LmdseXBoRGF0YUZvckNoYXJhY3RlcihzdHJldGNoeUNoYXJhY3Rlci0+dG9wQ2hhciwgZmFsc2Up
OworICAgICAgICBhc3NlbWJseURhdGEuZXh0ZW5zaW9uID0gc3R5bGUuZm9udENhc2NhZGUoKS5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPmV4dGVuc2lvbkNoYXIsIGZh
bHNlKTsKKyAgICAgICAgYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVmdCA9IHN0eWxlLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFy
LCBmYWxzZSk7CisgICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rl
ci0+bWlkZGxlQ2hhciA/IHN0eWxlLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KHN0cmV0Y2h5Q2hhcmFjdGVyLT5taWRkbGVDaGFyLCBmYWxzZSkgOiBHbHlwaERhdGEoKTsKKyAg
ICB9CisKKyAgICAvLyBJZiB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBtYXhpbXVtIHdpZHRoLCB2ZXJp
ZnkgZWFjaCBjb21wb25lbnQuCisgICAgaWYgKG1heGltdW1HbHlwaFdpZHRoKSB7CisgICAgICAg
ICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5j
ZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpKTsKKyAgICAgICAgKm1heGlt
dW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhG
b3JHbHlwaChhc3NlbWJseURhdGEuZXh0ZW5zaW9uKSk7CisgICAgICAgICptYXhpbXVtR2x5cGhX
aWR0aCA9IHN0ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgo
YXNzZW1ibHlEYXRhLm1pZGRsZSkpOworICAgICAgICAqbWF4aW11bUdseXBoV2lkdGggPSBzdGQ6
Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0
YS5ib3R0b21PckxlZnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGVu
c3VyZSB0aGF0IHRoZSBzaXplIGlzIGxhcmdlIGVub3VnaCB0byBhdm9pZCBnbHlwaCBvdmVybGFw
cy4KKyAgICBmbG9hdCBtaW5TaXplID0gbV9pc1ZlcnRpY2FsID8KKyAgICAgICAgaGVpZ2h0Rm9y
R2x5cGgoYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQpICsgaGVpZ2h0Rm9yR2x5cGgoYXNzZW1ibHlE
YXRhLm1pZGRsZSkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0KQor
ICAgICAgICA6IGFkdmFuY2VXaWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQp
ICsgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLm1pZGRsZSkgKyBhZHZhbmNlV2lk
dGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCk7CisgICAgaWYgKG1pblNpemUgPiB0
YXJnZXRTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRHbHlwaEFzc2VtYmx5KGFzc2Vt
Ymx5RGF0YSk7Cit9CisKK0xheW91dFJlY3QgTWF0aE9wZXJhdG9yOjpwYWludEdseXBoKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEmIGRh
dGEsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmltKQor
eworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOworCisg
ICAgTGF5b3V0UmVjdCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhCb3Vu
ZHMueCgpICsgZ2x5cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsKKyAg
ICBnbHlwaFBhaW50UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOworCisg
ICAgLy8gSW4gb3JkZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90aGVy
IHdlIHNuYXAgdGhlIGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcworICAgIC8v
IGFuZCB0cmltIG9mZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQgZm9y
IGZvbnRzIHRoYXQgaGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUgbGVzcworICAgIC8vIHRoYW4g
ZnVsbCBjb3ZlcmFnZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBzZWFt
cyBiZXR3ZWVuIGNvbm5lY3RlZCBnbHlwaHMuCisgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBp
bmZvLnJlY3Q7CisgICAgc3dpdGNoICh0cmltKSB7CisgICAgY2FzZSBUcmltVG9wOgorICAgICAg
ICBnbHlwaFBhaW50UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSAr
IDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Cb3R0b206CisgICAgICAgIGdseXBoUGFp
bnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEp
OworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZ
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206CisgICAgICAg
IGdseXBoUGFpbnRSZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsg
MSk7CisgICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVj
dC5tYXhZKCkuZmxvb3IoKSAtIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC55KCkpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhn
bHlwaFBhaW50UmVjdC5tYXhZKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1MZWZ0
OgorICAgICAgICBnbHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgp
LmNlaWwoKSArIDEpOworICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50
UmVjdC54KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyaW1SaWdodDoKKyAgICAgICAg
Z2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9v
cigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRS
ZWN0Lm1heFgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdodDoK
KyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5j
ZWlsKCkgKyAxKTsKKyAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBo
UGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRY
RWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKSk7CisgICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhY
RWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7CisgICAgfQorCisgICAgLy8gQ2xpcHBpbmcg
dGhlIGVuY2xvc2luZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBqb2lu
ZWQgZWRnZXMuCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8u
Y29udGV4dCgpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAg
R2x5cGhCdWZmZXIgYnVmZmVyOworICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250
LCBhZHZhbmNlV2lkdGhGb3JHbHlwaChkYXRhKSk7CisgICAgaW5mby5jb250ZXh0KCkuZHJhd0ds
eXBocyhzdHlsZS5mb250Q2FzY2FkZSgpLCAqZGF0YS5mb250LCBidWZmZXIsIDAsIDEsIG9yaWdp
bik7CisKKyAgICByZXR1cm4gZ2x5cGhQYWludFJlY3Q7Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9y
OjpmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQ
b2ludCYgdG8pCit7CisgICAgQVNTRVJUKG1faXNWZXJ0aWNhbCk7CisgICAgQVNTRVJUKG1fc3Ry
ZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OkdseXBoQXNzZW1ibHkpOworICAgIEFTU0VSVChtX2Fz
c2VtYmx5LmV4dGVuc2lvbi5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChmcm9tLnkoKSA8PSB0by55
KCkpOworCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSBleHRlbnNpb24gZ2x5
cGgsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCisgICAgaWYgKGZyb20ueSgpID09IHRv
LnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsKKworICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9
IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1ibHkuZXh0ZW5zaW9uKTsKKworICAgIC8vIENsaXBwaW5n
IHRoZSBleHRlbmRlciByZWdpb24gaGVyZSBhbGxvd3MgdXMgdG8gZHJhdyB0aGUgYm90dG9tIGV4
dGVuZGVyIGdseXBoIGludG8gdGhlCisgICAgLy8gcmVnaW9ucyBvZiB0aGUgYm90dG9tIGdseXBo
IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmRyYXcgKGhhaXJ5IHBpeGVscykgYW5kIHNpbXBs
aWZpZXMgbGF0ZXIgY2xpcHBpbmcuCisgICAgTGF5b3V0UmVjdCBjbGlwQm91bmRzID0gaW5mby5y
ZWN0OworICAgIGNsaXBCb3VuZHMuc2hpZnRZRWRnZVRvKGZyb20ueSgpKTsKKyAgICBjbGlwQm91
bmRzLnNoaWZ0TWF4WUVkZ2VUbyh0by55KCkpOworICAgIGluZm8uY29udGV4dCgpLmNsaXAoY2xp
cEJvdW5kcyk7CisKKyAgICAvLyBUcmltbWluZyBtYXkgcmVtb3ZlIHVwIHRvIHR3byBwaXhlbHMg
ZnJvbSB0aGUgdG9wIG9mIHRoZSBleHRlbmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCB1cCBieSB0
d28gcGl4ZWxzLgorICAgIGZsb2F0IG9mZnNldFRvR2x5cGhUb3AgPSBnbHlwaEJvdW5kcy55KCkg
KyAyOworICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0UG9pbnQoZnJvbS54KCks
IGZyb20ueSgpIC0gb2Zmc2V0VG9HbHlwaFRvcCk7CisgICAgRmxvYXRSZWN0IGxhc3RQYWludGVk
R2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKKworICAgIHdoaWxlIChsYXN0UGFpbnRlZEds
eXBoUmVjdC5tYXhZKCkgPCB0by55KCkpIHsKKyAgICAgICAgbGFzdFBhaW50ZWRHbHlwaFJlY3Qg
PSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LmV4dGVuc2lvbiwgZ2x5cGhPcmln
aW4sIFRyaW1Ub3BBbmRCb3R0b20pOworICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGdseXBoT3Jp
Z2luLnkoKSArIGxhc3RQYWludGVkR2x5cGhSZWN0LmhlaWdodCgpKTsKKworICAgICAgICAvLyBU
aGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgdGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhl
IGdsdWUgZ2x5cGggaGFzIGJlZW4gcmVkdWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKKyAgICAg
ICAgLy8gd2l0aCB0cmltbWluZy4gSW4gdGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgor
ICAgICAgICBpZiAobGFzdFBhaW50ZWRHbHlwaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIE1hdGhPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFs
RXh0ZW5zaW9uR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8s
IGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25zdCBMYXlvdXRQb2ludCYgdG8pCit7CisgICAg
QVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0cmV0
Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NFUlQobV9hc3NlbWJseS5leHRlbnNpb24u
aXNWYWxpZCgpKTsKKyAgICBBU1NFUlQoZnJvbS54KCkgPD0gdG8ueCgpKTsKKworICAgIC8vIElm
IHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgZXh0ZW5zaW9uIGdseXBoLCB3ZSBkb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nLgorICAgIGlmIChmcm9tLngoKSA9PSB0by54KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihpbmZvLmNv
bnRleHQoKSk7CisKKyAgICAvLyBDbGlwcGluZyB0aGUgZXh0ZW5kZXIgcmVnaW9uIGhlcmUgYWxs
b3dzIHVzIHRvIGRyYXcgdGhlIGJvdHRvbSBleHRlbmRlciBnbHlwaCBpbnRvIHRoZQorICAgIC8v
IHJlZ2lvbnMgb2YgdGhlIGJvdHRvbSBnbHlwaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IG92ZXJk
cmF3IChoYWlyeSBwaXhlbHMpIGFuZCBzaW1wbGlmaWVzIGxhdGVyIGNsaXBwaW5nLgorICAgIExh
eW91dFJlY3QgY2xpcEJvdW5kcyA9IGluZm8ucmVjdDsKKyAgICBjbGlwQm91bmRzLnNoaWZ0WEVk
Z2VUbyhmcm9tLngoKSk7CisgICAgY2xpcEJvdW5kcy5zaGlmdE1heFhFZGdlVG8odG8ueCgpKTsK
KyAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOworCisgICAgLy8gVHJpbW1pbmcg
bWF5IHJlbW92ZSB1cCB0byB0d28gcGl4ZWxzIGZyb20gdGhlIGxlZnQgb2YgdGhlIGV4dGVuZGVy
IGdseXBoLCBzbyB3ZSBtb3ZlIGl0IGxlZnQgYnkgdHdvIHBpeGVscy4KKyAgICBmbG9hdCBvZmZz
ZXRUb0dseXBoTGVmdCA9IC0yOworICAgIExheW91dFBvaW50IGdseXBoT3JpZ2luID0gTGF5b3V0
UG9pbnQoZnJvbS54KCkgKyBvZmZzZXRUb0dseXBoTGVmdCwgc3RkOjptaW4oZnJvbS55KCksIHRv
LnkoKSkpOworICAgIEZsb2F0UmVjdCBsYXN0UGFpbnRlZEdseXBoUmVjdChmcm9tLCBGbG9hdFNp
emUoKSk7CisKKyAgICB3aGlsZSAobGFzdFBhaW50ZWRHbHlwaFJlY3QubWF4WCgpIDwgdG8ueCgp
KSB7CisgICAgICAgIGxhc3RQYWludGVkR2x5cGhSZWN0ID0gcGFpbnRHbHlwaChzdHlsZSwgaW5m
bywgbV9hc3NlbWJseS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsK
KyAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChnbHlwaE9yaWdpbi54KCkgKyBsYXN0UGFpbnRlZEds
eXBoUmVjdC53aWR0aCgpKTsKKworICAgICAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYg
dGhlIGZvbnQgc2l6ZSBpcyBzbWFsbCBlbm91Z2ggdGhlIGdsdWUgZ2x5cGggaGFzIGJlZW4gcmVk
dWNlZCB0byBhbiBlbXB0eSByZWN0YW5nbGUKKyAgICAgICAgLy8gd2l0aCB0cmltbWluZy4gSW4g
dGhhdCBjYXNlIHdlIGp1c3QgZHJhdyBub3RoaW5nLgorICAgICAgICBpZiAobGFzdFBhaW50ZWRH
bHlwaFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lk
IE1hdGhPcGVyYXRvcjo6cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCkKK3sKKyAgICBBU1NFUlQobV9pc1ZlcnRpY2FsKTsKKyAgICBBU1NFUlQobV9zdHJldGNoVHlw
ZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7CisgICAgQVNTRVJUKG1fYXNzZW1ibHku
dG9wT3JSaWdodC5pc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVm
dC5pc1ZhbGlkKCkpOworCisgICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28g
dGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3
aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgorICAgIExheW91dFBvaW50IG9wZXJhdG9y
VG9wTGVmdCA9IHBhaW50T2Zmc2V0OworICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBv
aW50KG9wZXJhdG9yVG9wTGVmdCk7CisgICAgRmxvYXRSZWN0IHRvcEdseXBoQm91bmRzID0gYm91
bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3BPclJpZ2h0KTsKKyAgICBMYXlvdXRQb2ludCB0b3BH
bHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9w
R2x5cGhCb3VuZHMueSgpKTsKKyAgICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFp
bnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS50b3BPclJpZ2h0LCB0b3BHbHlwaE9yaWdp
biwgVHJpbUJvdHRvbSk7CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR2x5cGhCb3VuZHMgPSBib3Vu
ZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCk7CisgICAgTGF5b3V0UG9pbnQgYm90
dG9tR2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSAr
IHN0cmV0Y2hTaXplKCkgLSAoYm90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlw
aEJvdW5kcy55KCkpKTsKKyAgICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFp
bnRHbHlwaChzdHlsZSwgaW5mbywgbV9hc3NlbWJseS5ib3R0b21PckxlZnQsIGJvdHRvbUdseXBo
T3JpZ2luLCBUcmltVG9wKTsKKworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0aGUgc3RhcnQg
YW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLiBUaGVuIHNoaWZ0IGl0IGhhbGYgdGhlIHBhaW50
IGhlaWdodCB0b3dhcmQgdGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgRmxvYXRSZWN0IG1pZGRs
ZUdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5taWRkbGUpOworICAgICAg
ICBMYXlvdXRQb2ludCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCB0b3BH
bHlwaE9yaWdpbi55KCkpOworICAgICAgICBtaWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0
UG9pbnQoMCwgKGJvdHRvbUdseXBoUGFpbnRSZWN0LnkoKSAtIHRvcEdseXBoUGFpbnRSZWN0Lm1h
eFkoKSkgLyAyLjApKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBv
aW50KDAsIG1pZGRsZUdseXBoQm91bmRzLmhlaWdodCgpIC8gMi4wKSk7CisKKyAgICAgICAgTGF5
b3V0UmVjdCBtaWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoc3R5bGUsIGluZm8sIG1f
YXNzZW1ibHkubWlkZGxlLCBtaWRkbGVHbHlwaE9yaWdpbiwgVHJpbVRvcEFuZEJvdHRvbSk7Cisg
ICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5
cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1p
bllDb3JuZXIoKSk7CisgICAgICAgIGZpbGxXaXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHls
ZSwgaW5mbywgbWlkZGxlR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5
cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxX
aXRoVmVydGljYWxFeHRlbnNpb25HbHlwaChzdHlsZSwgaW5mbywgdG9wR2x5cGhQYWludFJlY3Qu
bWluWE1heFlDb3JuZXIoKSwgYm90dG9tR2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7
Cit9CisKK3ZvaWQgTWF0aE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCit7CisgICAgQVNTRVJUKCFtX2lzVmVydGljYWwpOworICAgIEFTU0VS
VChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKKyAgICBBU1NF
UlQobV9hc3NlbWJseS5ib3R0b21PckxlZnQuaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9hc3Nl
bWJseS50b3BPclJpZ2h0LmlzVmFsaWQoKSk7CisKKyAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcg
dGhlIGdseXBocyBzbyB0aGF0IHRoZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGlu
ZSB1cCBleGFjdGx5IHdpdGggdGhlIGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgTGF5b3V0
UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0gcGFpbnRPZmZzZXQ7CisgICAgb3BlcmF0b3JUb3BMZWZ0
ID0gY2VpbGVkSW50UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKKyAgICBMYXlvdXRQb2ludCBsZWZ0
R2x5cGhPcmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1f
YXNjZW50KTsKKyAgICBMYXlvdXRSZWN0IGxlZnRHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgo
c3R5bGUsIGluZm8sIG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LCBsZWZ0R2x5cGhPcmlnaW4sIFRy
aW1SaWdodCk7CisKKyAgICBGbG9hdFJlY3QgcmlnaHRHbHlwaEJvdW5kcyA9IGJvdW5kc0Zvckds
eXBoKG1fYXNzZW1ibHkudG9wT3JSaWdodCk7CisgICAgTGF5b3V0UG9pbnQgcmlnaHRHbHlwaE9y
aWdpbihvcGVyYXRvclRvcExlZnQueCgpICsgbV93aWR0aCAtIHJpZ2h0R2x5cGhCb3VuZHMud2lk
dGgoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fYXNjZW50KTsKKyAgICBMYXlvdXRSZWN0IHJp
Z2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBoKHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5LnRv
cE9yUmlnaHQsIHJpZ2h0R2x5cGhPcmlnaW4sIFRyaW1MZWZ0KTsKKworICAgIExheW91dFBvaW50
IGJhc2VsaW5lU2hpZnQoMCwgbV9hc2NlbnQpOworICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBnbHlwaCBvcmlnaW4gYmV0d2VlbiB0
aGUgc3RhcnQgYW5kIGVuZCBnbHlwaCBwYWludCBleHRlbnRzLgorICAgICAgICBMYXlvdXRQb2lu
dCBtaWRkbGVHbHlwaE9yaWdpbihvcGVyYXRvclRvcExlZnQueCgpLCBsZWZ0R2x5cGhPcmlnaW4u
eSgpKTsKKyAgICAgICAgbWlkZGxlR2x5cGhPcmlnaW4ubW92ZUJ5KExheW91dFBvaW50KChyaWdo
dEdseXBoUGFpbnRSZWN0LngoKSAtIGxlZnRHbHlwaFBhaW50UmVjdC5tYXhYKCkpIC8gMi4wLCAw
KSk7CisgICAgICAgIExheW91dFJlY3QgbWlkZGxlR2x5cGhQYWludFJlY3QgPSBwYWludEdseXBo
KHN0eWxlLCBpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmlnaW4sIFRyaW1M
ZWZ0QW5kUmlnaHQpOworICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChz
dHlsZSwgaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5ZQ29ybmVyKCkgKyBiYXNlbGlu
ZVNoaWZ0LCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVT
aGlmdCk7CisgICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0eWxlLCBp
bmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5tYXhYTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlm
dCwgcmlnaHRHbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpICsgYmFzZWxpbmVTaGlmdCk7
CisgICAgfSBlbHNlCisgICAgICAgIGZpbGxXaXRoSG9yaXpvbnRhbEV4dGVuc2lvbkdseXBoKHN0
eWxlLCBpbmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSArIGJhc2VsaW5l
U2hpZnQsIHJpZ2h0R2x5cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSArIGJhc2VsaW5lU2hp
ZnQpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9NYXRoT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvTWF0aE9wZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5
ZjQ4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
TWF0aE9wZXJhdG9yLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBNYXRoT3BlcmF0b3JfaAorI2RlZmluZSBNYXRoT3BlcmF0b3JfaAorCisjaWYgRU5B
QkxFKE1BVEhNTCkKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0
LmgiCisjaW5jbHVkZSAiT3BlblR5cGVNYXRoRGF0YS5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5o
IgorI2luY2x1ZGUgPHVuaWNvZGUvdXR5cGVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVuZGVyU3R5bGU7CisKK2NsYXNzIE1hdGhPcGVyYXRvciB7CitwdWJsaWM6CisgICAg
TWF0aE9wZXJhdG9yKCkgeyB9CisgICAgdm9pZCBzZXRPcGVyYXRvcihVQ2hhciBiYXNlQ2hhcmFj
dGVyLCBib29sIGlzVmVydGljYWwpOworCisgICAgTGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pdGFsaWNDb3JyZWN0aW9uOyB9CisKKyAgICBib29sIGlzU3Ry
ZXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdHJldGNoVHlwZSAhPSBTdHJldGNoVHlwZTo6VW5z
dHJldGNoZWQ7IH0KKyAgICB2b2lkIHVuc3RyZXRjaCgpIHsgbV9zdHJldGNoVHlwZSA9IFN0cmV0
Y2hUeXBlOjpVbnN0cmV0Y2hlZDsgfQorCisgICAgLy8gRklYTUU6IEFsbCB0aGUgY29kZSBiZWxv
dyBzaG91bGQgYmUgcHJpdmF0ZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYnkgUmVuZGVy
TWF0aE1MT3BlcmF0b3IgKGh0dHA6Ly93ZWJraXQub3JnL2IvMTUyMjQ0KS4KKworICAgIHN0cnVj
dCBHbHlwaEFzc2VtYmx5RGF0YSB7CisgICAgICAgIEdseXBoRGF0YSB0b3BPclJpZ2h0OworICAg
ICAgICBHbHlwaERhdGEgZXh0ZW5zaW9uOworICAgICAgICBHbHlwaERhdGEgYm90dG9tT3JMZWZ0
OworICAgICAgICBHbHlwaERhdGEgbWlkZGxlOworICAgIH07CisgICAgZW51bSBjbGFzcyBTdHJl
dGNoVHlwZSB7IFVuc3RyZXRjaGVkLCBTaXplVmFyaWFudCwgR2x5cGhBc3NlbWJseSB9OworICAg
IGVudW0gR2x5cGhQYWludFRyaW1taW5nIHsKKyAgICAgICAgVHJpbVRvcCwKKyAgICAgICAgVHJp
bUJvdHRvbSwKKyAgICAgICAgVHJpbVRvcEFuZEJvdHRvbSwKKyAgICAgICAgVHJpbUxlZnQsCisg
ICAgICAgIFRyaW1SaWdodCwKKyAgICAgICAgVHJpbUxlZnRBbmRSaWdodAorICAgIH07CisKKyAg
ICBMYXlvdXRVbml0IHN0cmV0Y2hTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsID8g
bV9hc2NlbnQgKyBtX2Rlc2NlbnQgOiBtX3dpZHRoOyB9OworICAgIGJvb2wgZ2V0QmFzZUdseXBo
KGNvbnN0IFJlbmRlclN0eWxlJiwgR2x5cGhEYXRhJikgY29uc3Q7CisgICAgdm9pZCBzZXRTaXpl
VmFyaWFudChjb25zdCBHbHlwaERhdGEmKTsKKyAgICB2b2lkIHNldEdseXBoQXNzZW1ibHkoY29u
c3QgR2x5cGhBc3NlbWJseURhdGEmKTsKKyAgICB2b2lkIGNhbGN1bGF0ZURpc3BsYXlTdHlsZUxh
cmdlT3BlcmF0b3IoY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICB2b2lkIGNhbGN1bGF0ZVN0cmV0
Y2h5RGF0YShjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5
b3V0VW5pdCB0YXJnZXRTaXplID0gMCk7CisgICAgYm9vbCBjYWxjdWxhdGVHbHlwaEFzc2VtYmx5
RmFsbGJhY2soY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBWZWN0b3I8T3BlblR5cGVNYXRoRGF0
YTo6QXNzZW1ibHlQYXJ0PiYsIEdseXBoQXNzZW1ibHlEYXRhJikgY29uc3Q7CisKKyAgICBMYXlv
dXRSZWN0IHBhaW50R2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBH
bHlwaERhdGEmLCBjb25zdCBMYXlvdXRQb2ludCYgb3JpZ2luLCBHbHlwaFBhaW50VHJpbW1pbmcp
OworICAgIHZvaWQgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGNvbnN0IFJlbmRlclN0
eWxlJiwgUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBv
aW50JiB0byk7CisgICAgdm9pZCBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChjb25z
dCBSZW5kZXJTdHlsZSYsIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBmcm9tLCBjb25z
dCBMYXlvdXRQb2ludCYgdG8pOworICAgIHZvaWQgcGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHko
Y29uc3QgUmVuZGVyU3R5bGUmLCBQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAg
IHZvaWQgcGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShjb25zdCBSZW5kZXJTdHlsZSYsIFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CisKKyAgICBVQ2hhciBtX2Jhc2VDaGFyYWN0
ZXIgPSAwOworICAgIGJvb2wgbV9pc1ZlcnRpY2FsID0gZmFsc2U7CisgICAgU3RyZXRjaFR5cGUg
bV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZDsKKyAgICB1bmlvbiB7Cisg
ICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7CisgICAgICAgIEdseXBoQXNzZW1ibHlEYXRhIG1f
YXNzZW1ibHk7CisgICAgfTsKKyAgICBMYXlvdXRVbml0IG1fd2lkdGggPSAwOworICAgIExheW91
dFVuaXQgbV9hc2NlbnQgPSAwOworICAgIExheW91dFVuaXQgbV9kZXNjZW50ID0gMDsKKyAgICBM
YXlvdXRVbml0IG1faXRhbGljQ29ycmVjdGlvbiA9IDA7Cit9OworCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoTUFUSE1MKQorI2VuZGlmIC8vIE1hdGhPcGVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCmlu
ZGV4IDcyZTliOTUuLjExZjFjMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCkBAIC00NSwzMyArNDUsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB1c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7
CiAKLS8vIEZJWE1FOiBUaGUgT3BlblR5cGUgTUFUSCB0YWJsZSBjb250YWlucyBpbmZvcm1hdGlv
biB0aGF0IHNob3VsZCBvdmVycmlkZSB0aGlzIHRhYmxlIChodHRwOi8vd2tidWcvMTIyMjk3KS4K
LXN0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7Ci0gICAgVUNoYXIgY2hhcmFjdGVyOwotICAgIFVD
aGFyIHRvcENoYXI7Ci0gICAgVUNoYXIgZXh0ZW5zaW9uQ2hhcjsKLSAgICBVQ2hhciBib3R0b21D
aGFyOwotICAgIFVDaGFyIG1pZGRsZUNoYXI7Ci19OwotLy8gVGhlIGZpcnN0IGxlZnRSaWdodFBh
aXJzQ291bnQgcGFpcnMgY29ycmVzcG9uZCB0byBsZWZ0L3JpZ2h0IGZlbmNlcyB0aGF0IGNhbiBl
YXNpbHkgYmUgbWlycm9yZWQgaW4gUlRMLgotc3RhdGljIGNvbnN0IHNob3J0IGxlZnRSaWdodFBh
aXJzQ291bnQgPSA1Owotc3RhdGljIGNvbnN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHN0cmV0Y2h5Q2hh
cmFjdGVyc1sxNF0gPSB7Ci0gICAgeyAweDI4ICAsIDB4MjM5YiwgMHgyMzljLCAweDIzOWQsIDB4
MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCi0gICAgeyAweDI5ICAsIDB4MjM5ZSwgMHgyMzlm
LCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcwotICAgIHsgMHg1YiAgLCAw
eDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBzcXVhcmUgYnJhY2tldAot
ICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQg
c3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwgMHgy
M2E4IH0sIC8vIGxlZnQgY3VybHkgYnJhY2tldAotICAgIHsgMHg3ZCAgLCAweDIzYWIsIDB4MjNh
YSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAotICAgIHsgMHgyMzA4
LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAgICAgfSwgLy8gbGVmdCBjZWlsaW5nCi0gICAg
eyAweDIzMDksIDB4MjNhNCwgMHgyM2E1LCAweDIzYTUsIDB4MCAgICB9LCAvLyByaWdodCBjZWls
aW5nCi0gICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIzYTMsIDB4MCAgICB9LCAvLyBs
ZWZ0IGZsb29yCi0gICAgeyAweDIzMGIsIDB4MjNhNSwgMHgyM2E1LCAweDIzYTYsIDB4MCAgICB9
LCAvLyByaWdodCBmbG9vcgotICAgIHsgMHg3YyAgLCAweDdjLCAgIDB4N2MsICAgMHg3YywgICAw
eDAgICAgfSwgLy8gdmVydGljYWwgYmFyCi0gICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAw
eDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQotICAgIHsgMHgyMjI1LCAw
eDIyMjUsIDB4MjIyNSwgMHgyMjI1LCAweDAgICAgfSwgLy8gcGFyYWxsZWwgdG8KLSAgICB7IDB4
MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2lnbgot
fTsKLQogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhNTE9wZXJhdG9yKE1hdGhNTEVs
ZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJNYXRoTUxU
b2tlbihlbGVtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUoMCkKQEAgLTI5NCw4ICsyNjcsOSBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICBtX21hdGhPcGVyYXRvci5zZXRPcGVyYXRvcihtX3RleHRDb250ZW50LCBtX2lzVmVy
dGljYWwpOwogICAgIEdseXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAgZmxvYXQgbWF4aW11bUdseXBo
V2lkdGggPSBnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUdseXBoKSA/IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGJhc2VHbHlwaCkgOiAwOworICAgIGZsb2F0IG1heGltdW1HbHlwaFdpZHRoID0gbV9t
YXRoT3BlcmF0b3IuZ2V0QmFzZUdseXBoKHN0eWxlKCksIGJhc2VHbHlwaCkgPyBhZHZhbmNlV2lk
dGhGb3JHbHlwaChiYXNlR2x5cGgpIDogMDsKICAgICBpZiAoIW1faXNWZXJ0aWNhbCkgewogICAg
ICAgICBpZiAobWF4aW11bUdseXBoV2lkdGggPCBzdHJldGNoU2l6ZSgpKQogICAgICAgICAgICAg
bWF4aW11bUdseXBoV2lkdGggPSBzdHJldGNoU2l6ZSgpOwpAQCAtMzA1LDEyICsyNzksMTIgQEAg
dm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KQogICAgIH0KICAgICBpZiAoaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAg
ICAgICAvLyBMYXJnZSBvcGVyYXRvcnMgaW4gU1RJWCBXb3JkIGhhdmUgaW5jb3JyZWN0IGFkdmFu
Y2Ugd2lkdGgsIGNhdXNpbmcgbWlzcGxhY2VtZW50IG9mIHN1cGVyc2NyaXB0LCBzbyB3ZSB1c2Ug
dGhlIGdseXBoIGJvdW5kIGluc3RlYWQgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9zdGl4Zm9u
dHMvdHJhY2tpbmcvNDkvKS4KLSAgICAgICAgY2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVy
YXRvcigpOwotICAgICAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6U2l6ZVZh
cmlhbnQpCi0gICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1f
dmFyaWFudCkud2lkdGgoKTsKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IuY2FsY3VsYXRlRGlzcGxh
eVN0eWxlTGFyZ2VPcGVyYXRvcihzdHlsZSgpKTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9y
Lm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlhbnQp
CisgICAgICAgICAgICBtYXhpbXVtR2x5cGhXaWR0aCA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9w
ZXJhdG9yLm1fdmFyaWFudCkud2lkdGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBGSVhN
RTogc29tZSBnbHlwaHMgKGUuZy4gdGhlIG9uZSBmb3IgIkZSQUNUSU9OIFNMQVNIIiBpbiB0aGUg
U1RJWCBNYXRoIGZvbnQgb3IgbGFyZ2Ugb3BlcmF0b3JzKSBoYXZlIGEgd2lkdGggdGhhdCBkZXBl
bmRzIG9uIHRoZSBoZWlnaHQsIHJlc3VsdGluZyBpbiBsYXJnZSBnYXBzIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2KS4KLSAgICAgICAgY2FsY3VsYXRlU3Ry
ZXRjaHlEYXRhKCZtYXhpbXVtR2x5cGhXaWR0aCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmNh
bGN1bGF0ZVN0cmV0Y2h5RGF0YShzdHlsZSgpLCAmbWF4aW11bUdseXBoV2lkdGgpOwogICAgIH0K
ICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gbV9sZWFkaW5nU3BhY2UgKyBtYXhpbXVtR2x5cGhXaWR0aCArIG1fdHJhaWxpbmdTcGFj
ZTsKIH0KQEAgLTM3NCwyNDUgKzM0OCwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bAogICAg
IHVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwogfQogCi1ib29sIFJlbmRlck1hdGhNTE9wZXJh
dG9yOjpnZXRCYXNlR2x5cGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBHbHlwaERhdGEmIGJh
c2VHbHlwaCkgY29uc3QKLXsKLSAgICBiYXNlR2x5cGggPSBzdHlsZS5mb250Q2FzY2FkZSgpLmds
eXBoRGF0YUZvckNoYXJhY3RlcihtX3RleHRDb250ZW50LCAhc3R5bGUuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKTsKLSAgICByZXR1cm4gYmFzZUdseXBoLmlzVmFsaWQoKSAmJiBiYXNlR2x5cGgu
Zm9udCA9PSAmc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwotfQotCi12b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzZXRTaXplVmFyaWFudChjb25zdCBHbHlwaERhdGEmIHNpemVW
YXJpYW50KQotewotICAgIEFTU0VSVChzaXplVmFyaWFudC5pc1ZhbGlkKCkgJiYgc2l6ZVZhcmlh
bnQuZm9udC0+bWF0aERhdGEoKSk7Ci0gICAgbV9zdHJldGNoVHlwZSA9IFN0cmV0Y2hUeXBlOjpT
aXplVmFyaWFudDsKLSAgICBtX3ZhcmlhbnQgPSBzaXplVmFyaWFudDsKLX0KLQotdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6c2V0R2x5cGhBc3NlbWJseShjb25zdCBHbHlwaEFzc2VtYmx5RGF0
YSYgYXNzZW1ibHlEYXRhKQotewotICAgIG1fc3RyZXRjaFR5cGUgPSBTdHJldGNoVHlwZTo6R2x5
cGhBc3NlbWJseTsKLSAgICBtX2Fzc2VtYmx5ID0gYXNzZW1ibHlEYXRhOwotfQotCi1ib29sIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3Qg
VmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4mIGFzc2VtYmx5UGFydHMsIEds
eXBoQXNzZW1ibHlEYXRhJiBhc3NlbWJseURhdGEpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHN0cnVj
dHVyZSBvZiB0aGUgT3BlbiBUeXBlIE1hdGggdGFibGUgaXMgYSBiaXQgbW9yZSBnZW5lcmFsIHRo
YW4gdGhlIG9uZSBjdXJyZW50bHkgdXNlZCBieSB0aGUgUmVuZGVyTWF0aE1MT3BlcmF0b3IgY29k
ZSwgc28gd2UgdHJ5IHRvIGZhbGxiYWNrIGluIGEgcmVhc29uYWJsZSB3YXkuCi0gICAgLy8gRklY
TUU6IFJlbmRlck1hdGhNTE9wZXJhdG9yIHNob3VsZCBzdXBwb3J0IHRoZSBtb3N0IGdlbmVyYWwg
Zm9ybWF0IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI3KS4K
LSAgICAvLyBXZSB1c2UgdGhlIGFwcHJvYWNoIG9mIHRoZSBjb3B5Q29tcG9uZW50cyBmdW5jdGlv
biBpbiBnaXRodWIuY29tL21hdGhqYXgvTWF0aEpheC1kZXYvYmxvYi9tYXN0ZXIvZm9udHMvT3Bl
blR5cGVNYXRoL2ZvbnRVdGlsLnB5Ci0KLSAgICAvLyBXZSBjb3VudCB0aGUgbnVtYmVyIG9mIG5v
biBleHRlbmRlciBwaWVjZXMuCi0gICAgaW50IG5vbkV4dGVuZGVyQ291bnQgPSAwOwotICAgIGZv
ciAoYXV0byYgcGFydCA6IGFzc2VtYmx5UGFydHMpIHsKLSAgICAgICAgaWYgKCFwYXJ0LmlzRXh0
ZW5kZXIpCi0gICAgICAgICAgICBub25FeHRlbmRlckNvdW50Kys7Ci0gICAgfQotICAgIGlmIChu
b25FeHRlbmRlckNvdW50ID4gMykKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGlzIGlzIG5v
dCBzdXBwb3J0ZWQ6IHRoZXJlIGFyZSB0b28gbWFueSBwaWVjZXMuCi0KLSAgICAvLyBXZSBub3cg
YnJvd3NlIHRoZSBsaXN0IG9mIHBpZWNlcyBmcm9tIGxlZnQgdG8gcmlnaHQgZm9yIGhvcml6b250
YWwgb3BlcmF0b3JzIGFuZCBmcm9tIGJvdHRvbSB0byB0b3AgZm9yIHZlcnRpY2FsIG9wZXJhdG9y
cy4KLSAgICBlbnVtIFBhcnRUeXBlIHsKLSAgICAgICAgU3RhcnQsCi0gICAgICAgIEV4dGVuZGVy
QmV0d2VlblN0YXJ0QW5kTWlkZGxlLAotICAgICAgICBNaWRkbGUsCi0gICAgICAgIEV4dGVuZGVy
QmV0d2Vlbk1pZGRsZUFuZEVuZCwKLSAgICAgICAgRW5kLAotICAgICAgICBOb25lCi0gICAgfTsK
LSAgICBQYXJ0VHlwZSBleHBlY3RlZFBhcnRUeXBlID0gU3RhcnQ7Ci0gICAgYXNzZW1ibHlEYXRh
LmV4dGVuc2lvbi5nbHlwaCA9IDA7Ci0gICAgYXNzZW1ibHlEYXRhLm1pZGRsZS5nbHlwaCA9IDA7
Ci0gICAgZm9yIChhdXRvJiBwYXJ0IDogYXNzZW1ibHlQYXJ0cykgewotICAgICAgICBpZiAobm9u
RXh0ZW5kZXJDb3VudCA8IDMpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIG9ubHkgaGF2ZSBhdCBt
b3N0IHR3byBub24tZXh0ZW5kZXJzIHRoZW4gd2Ugc2tpcCB0aGUgbWlkZGxlIGdseXBoLgotICAg
ICAgICAgICAgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0gRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRN
aWRkbGUpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2Vl
bk1pZGRsZUFuZEVuZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVkUGFydFR5cGUgPT0g
TWlkZGxlKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFbmQ7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHBhcnQuaXNFeHRlbmRlcikgewotICAgICAgICAgICAgaWYgKCFhc3Nl
bWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICAgICAgICAgIGFzc2VtYmx5RGF0YS5l
eHRlbnNpb24uZ2x5cGggPSBwYXJ0LmdseXBoOyAvLyBXZSBjb3B5IHRoZSBleHRlbmRlciBwYXJ0
LgotICAgICAgICAgICAgZWxzZSBpZiAoYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlwaCAhPSBw
YXJ0LmdseXBoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyBub3Qg
c3VwcG9ydGVkOiB0aGUgYXNzZW1ibHkgaGFzIGRpZmZlcmVudCBleHRlbmRlcnMuCi0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgewotICAgICAgICAgICAgY2FzZSBTdGFy
dDoKLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIGxlZnQvYm90dG9tIHBhcnQuCi0g
ICAgICAgICAgICAgICAgZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5k
TWlkZGxlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FzZSBNaWRk
bGU6Ci0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBtaWRkbGUgcGFydC4KLSAgICAg
ICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0gRXh0ZW5kZXJCZXR3ZWVuTWlkZGxlQW5kRW5k
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FzZSBFbmQ6Ci0gICAg
ICAgICAgICBjYXNlIE5vbmU6Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9y
dGVkOiB3ZSBnb3QgYW4gdW5leHBlY3RlZCBleHRlbmRlci4KLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBjYXNlIEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxl
OgotICAgICAgICAgICAgY2FzZSBFeHRlbmRlckJldHdlZW5NaWRkbGVBbmRFbmQ6Ci0gICAgICAg
ICAgICAgICAgLy8gV2UgaWdub3JlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGV4dGVuZGVycy4KLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHN3aXRjaCAoZXhwZWN0ZWRQYXJ0VHlwZSkgewotICAgICAgICBjYXNlIFN0YXJ0OgotICAg
ICAgICAgICAgLy8gV2UgY29weSB0aGUgbGVmdC9ib3R0b20gcGFydC4KLSAgICAgICAgICAgIGFz
c2VtYmx5RGF0YS5ib3R0b21PckxlZnQuZ2x5cGggPSBwYXJ0LmdseXBoOwotICAgICAgICAgICAg
ZXhwZWN0ZWRQYXJ0VHlwZSA9IEV4dGVuZGVyQmV0d2VlblN0YXJ0QW5kTWlkZGxlOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGNhc2UgRXh0ZW5kZXJCZXR3ZWVuU3RhcnRBbmRNaWRk
bGU6Ci0gICAgICAgIGNhc2UgTWlkZGxlOgotICAgICAgICAgICAgLy8gV2UgY29weSB0aGUgbWlk
ZGxlIHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEubWlkZGxlLmdseXBoID0gcGFydC5n
bHlwaDsKLSAgICAgICAgICAgIGV4cGVjdGVkUGFydFR5cGUgPSBFeHRlbmRlckJldHdlZW5NaWRk
bGVBbmRFbmQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FzZSBFeHRlbmRlckJl
dHdlZW5NaWRkbGVBbmRFbmQ6Ci0gICAgICAgIGNhc2UgRW5kOgotICAgICAgICAgICAgLy8gV2Ug
Y29weSB0aGUgcmlnaHQvdG9wIHBhcnQuCi0gICAgICAgICAgICBhc3NlbWJseURhdGEudG9wT3JS
aWdodC5nbHlwaCA9IHBhcnQuZ2x5cGg7Ci0gICAgICAgICAgICBleHBlY3RlZFBhcnRUeXBlID0g
Tm9uZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIE5vbmU6Ci0gICAgICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IHdlIGdvdCBhbiB1bmV4cGVjdGVkIG5vbi1l
eHRlbmRlciBwYXJ0LgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCFhc3NlbWJseURhdGEuZXh0ZW5zaW9uLmdseXBoKQotICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZDogd2UgYWx3YXlzIGFzc3VtZSB0aGF0
IHdlIGhhdmUgYW4gZXh0ZW5zaW9uIGdseXBoLgotCi0gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSB0
b3AvcmlnaHQgb3IgbGVmdC9ib3R0b20gZ2x5cGhzLCB3ZSB1c2UgdGhlIGV4dGVuc2lvbiBnbHlw
aC4KLSAgICBpZiAoIWFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmdseXBoKQotICAgICAgICBhc3Nl
bWJseURhdGEudG9wT3JSaWdodC5nbHlwaCA9IGFzc2VtYmx5RGF0YS5leHRlbnNpb24uZ2x5cGg7
Ci0gICAgaWYgKCFhc3NlbWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoKQotICAgICAgICBhc3Nl
bWJseURhdGEuYm90dG9tT3JMZWZ0LmdseXBoID0gYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5nbHlw
aDsKLQotICAgIGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0LmZvbnQgPSAmc3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCk7Ci0gICAgYXNzZW1ibHlEYXRhLmV4dGVuc2lvbi5mb250ID0g
YXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQuZm9udDsKLSAgICBhc3NlbWJseURhdGEuYm90dG9tT3JM
ZWZ0LmZvbnQgPSBhc3NlbWJseURhdGEudG9wT3JSaWdodC5mb250OwotICAgIGFzc2VtYmx5RGF0
YS5taWRkbGUuZm9udCA9IGFzc2VtYmx5RGF0YS5taWRkbGUuZ2x5cGggPyBhc3NlbWJseURhdGEu
dG9wT3JSaWdodC5mb250IDogbnVsbHB0cjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjYWxjdWxhdGVEaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9y
KCkKLXsKLSAgICBBU1NFUlQobV9pc1ZlcnRpY2FsICYmIGlzTGFyZ2VPcGVyYXRvckluRGlzcGxh
eVN0eWxlKCkpOwotCi0gICAgR2x5cGhEYXRhIGJhc2VHbHlwaDsKLSAgICBpZiAoIWdldEJhc2VH
bHlwaChzdHlsZSgpLCBiYXNlR2x5cGgpIHx8ICFiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEdseXBoPiBzaXplVmFyaWFudHM7Ci0gICAg
VmVjdG9yPE9wZW5UeXBlTWF0aERhdGE6OkFzc2VtYmx5UGFydD4gYXNzZW1ibHlQYXJ0czsKLQot
ICAgIC8vIFRoZSB2YWx1ZSBvZiBkaXNwbGF5T3BlcmF0b3JNaW5IZWlnaHQgaXMgc29tZXRpbWVz
IHRvbyBzbWFsbCwgc28gd2UgZW5zdXJlIHRoYXQgaXQgaXMgYXQgbGVhc3QgXHNxcnR7Mn0gdGlt
ZXMgdGhlIHNpemUgb2YgdGhlIGJhc2UgZ2x5cGguCi0gICAgZmxvYXQgZGlzcGxheU9wZXJhdG9y
TWluSGVpZ2h0ID0gc3RkOjptYXgoYmFzZUdseXBoLmZvbnQtPmJvdW5kc0ZvckdseXBoKGJhc2VH
bHlwaC5nbHlwaCkuaGVpZ2h0KCkgKiBzcXJ0T2ZUd29GbG9hdCwgYmFzZUdseXBoLmZvbnQtPm1h
dGhEYXRhKCktPmdldE1hdGhDb25zdGFudCgqYmFzZUdseXBoLmZvbnQsIE9wZW5UeXBlTWF0aERh
dGE6OkRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkpOwotCi0gICAgYmFzZUdseXBoLmZvbnQtPm1h
dGhEYXRhKCktPmdldE1hdGhWYXJpYW50cyhiYXNlR2x5cGguZ2x5cGgsIHRydWUsIHNpemVWYXJp
YW50cywgYXNzZW1ibHlQYXJ0cyk7Ci0KLSAgICAvLyBXZSBjaG9vc2UgdGhlIGZpcnN0IHNpemUg
dmFyaWFudCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBleHBlY3RlZCBkaXNwbGF5T3BlcmF0b3JN
aW5IZWlnaHQgYW5kIG90aGVyd2lzZSBmYWxsYmFjayB0byB0aGUgbGFyZ2VzdCB2YXJpYW50Lgot
ICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAgR2x5
cGhEYXRhIGdseXBoRGF0YShzaXplVmFyaWFudCwgYmFzZUdseXBoLmZvbnQpOwotICAgICAgICBz
ZXRTaXplVmFyaWFudChnbHlwaERhdGEpOwotICAgICAgICBtX2l0YWxpY0NvcnJlY3Rpb24gPSBn
bHlwaERhdGEuZm9udC0+bWF0aERhdGEoKS0+Z2V0SXRhbGljQ29ycmVjdGlvbigqZ2x5cGhEYXRh
LmZvbnQsIGdseXBoRGF0YS5nbHlwaCk7Ci0gICAgICAgIGlmIChoZWlnaHRGb3JHbHlwaChnbHlw
aERhdGEpID49IGRpc3BsYXlPcGVyYXRvck1pbkhlaWdodCkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y2FsY3VsYXRlU3RyZXRjaHlE
YXRhKGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRTaXplKQotewot
ICAgIEFTU0VSVCghbWF4aW11bUdseXBoV2lkdGggfHwgbV9pc1ZlcnRpY2FsKTsKLQotICAgIEds
eXBoRGF0YSBiYXNlR2x5cGg7Ci0gICAgaWYgKCFnZXRCYXNlR2x5cGgoc3R5bGUoKSwgYmFzZUds
eXBoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghbWF4aW11bUdseXBoV2lkdGgp
IHsKLSAgICAgICAgLy8gV2UgZG8gbm90IHN0cmV0Y2ggaWYgdGhlIGJhc2UgZ2x5cGggaXMgbGFy
Z2UgZW5vdWdoLgotICAgICAgICBmbG9hdCBiYXNlU2l6ZSA9IG1faXNWZXJ0aWNhbCA/IGhlaWdo
dEZvckdseXBoKGJhc2VHbHlwaCkgOiBhZHZhbmNlV2lkdGhGb3JHbHlwaChiYXNlR2x5cGgpOwot
ICAgICAgICBpZiAodGFyZ2V0U2l6ZSA8PSBiYXNlU2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBHbHlwaEFzc2VtYmx5RGF0YSBhc3NlbWJseURhdGE7Ci0gICAgaWYgKGJh
c2VHbHlwaC5mb250LT5tYXRoRGF0YSgpKSB7Ci0gICAgICAgIFZlY3RvcjxHbHlwaD4gc2l6ZVZh
cmlhbnRzOwotICAgICAgICBWZWN0b3I8T3BlblR5cGVNYXRoRGF0YTo6QXNzZW1ibHlQYXJ0PiBh
c3NlbWJseVBhcnRzOwotICAgICAgICBiYXNlR2x5cGguZm9udC0+bWF0aERhdGEoKS0+Z2V0TWF0
aFZhcmlhbnRzKGJhc2VHbHlwaC5nbHlwaCwgbV9pc1ZlcnRpY2FsLCBzaXplVmFyaWFudHMsIGFz
c2VtYmx5UGFydHMpOwotICAgICAgICAvLyBXZSB2ZXJpZnkgdGhlIHNpemUgdmFyaWFudHMuCi0g
ICAgICAgIGZvciAoYXV0byYgc2l6ZVZhcmlhbnQgOiBzaXplVmFyaWFudHMpIHsKLSAgICAgICAg
ICAgIEdseXBoRGF0YSBnbHlwaERhdGEoc2l6ZVZhcmlhbnQsIGJhc2VHbHlwaC5mb250KTsKLSAg
ICAgICAgICAgIGlmIChtYXhpbXVtR2x5cGhXaWR0aCkKLSAgICAgICAgICAgICAgICAqbWF4aW11
bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0aEZv
ckdseXBoKGdseXBoRGF0YSkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c2V0U2l6ZVZhcmlhbnQoZ2x5cGhEYXRhKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzaXplID0g
bV9pc1ZlcnRpY2FsID8gaGVpZ2h0Rm9yR2x5cGgoZ2x5cGhEYXRhKSA6IGFkdmFuY2VXaWR0aEZv
ckdseXBoKGdseXBoRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gdGFyZ2V0U2l6
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2UgdmVyaWZ5IGlmIHRoZXJlIGlzIGEgY29uc3RydWN0aW9uLgotICAg
ICAgICBpZiAoIWNhbGN1bGF0ZUdseXBoQXNzZW1ibHlGYWxsQmFjayhhc3NlbWJseVBhcnRzLCBh
c3NlbWJseURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmICghbV9pc1ZlcnRpY2FsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElm
IHRoZSBmb250IGRvZXMgbm90IGhhdmUgYSBNQVRIIHRhYmxlLCB3ZSBmYWxsYmFjayB0byB0aGUg
VW5pY29kZS1vbmx5IGNvbnN0cnVjdGlvbnMuCi0gICAgICAgIGNvbnN0IFN0cmV0Y2h5Q2hhcmFj
dGVyKiBzdHJldGNoeUNoYXJhY3RlciA9IG51bGxwdHI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IG1heEluZGV4ID0gV1RGX0FSUkFZX0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtYXhJbmRleDsgKytpbmRleCkgewot
ICAgICAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IG1f
dGV4dENvbnRlbnQpIHsKLSAgICAgICAgICAgICAgICBzdHJldGNoeUNoYXJhY3RlciA9ICZzdHJl
dGNoeUNoYXJhY3RlcnNbaW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICghc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgaW5kZXggPCBsZWZ0UmlnaHRQYWlyc0NvdW50ICogMikg
ewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gcmlnaHQtdG8tbGVmdCBkaXJl
Y3Rpb24gd2Ugc2VsZWN0IHRoZSBtaXJyb3JlZCBmb3JtIGJ5IGFkZGluZyAtMSBvciArMSBhY2Nv
cmRpbmcgdG8gdGhlIHBhcml0eSBvZiBpbmRleC4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXgg
Kz0gaW5kZXggJSAyID8gLTEgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGRp
ZG4ndCBmaW5kIGEgc3RyZXRjaHkgY2hhcmFjdGVyIHNldCBmb3IgdGhpcyBjaGFyYWN0ZXIsIHdl
IGRvbid0IGtub3cgaG93IHRvIHN0cmV0Y2ggaXQuCi0gICAgICAgIGlmICghc3RyZXRjaHlDaGFy
YWN0ZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gV2UgY29udmVydCB0aGUg
bGlzdCBvZiBVbmljb2RlIGNoYXJhY3RlcnMgaW50byBhIGxpc3Qgb2YgZ2x5cGggZGF0YS4KLSAg
ICAgICAgYXNzZW1ibHlEYXRhLnRvcE9yUmlnaHQgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT50b3BDaGFyLCBmYWxzZSk7Ci0g
ICAgICAgIGFzc2VtYmx5RGF0YS5leHRlbnNpb24gPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5leHRlbnNpb25DaGFyLCBmYWxz
ZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQgPSBzdHlsZSgpLmZvbnRDYXNj
YWRlKCkuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKHN0cmV0Y2h5Q2hhcmFjdGVyLT5ib3R0b21DaGFy
LCBmYWxzZSk7Ci0gICAgICAgIGFzc2VtYmx5RGF0YS5taWRkbGUgPSBzdHJldGNoeUNoYXJhY3Rl
ci0+bWlkZGxlQ2hhciA/IHN0eWxlKCkuZm9udENhc2NhZGUoKS5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoc3RyZXRjaHlDaGFyYWN0ZXItPm1pZGRsZUNoYXIsIGZhbHNlKSA6IEdseXBoRGF0YSgpOwot
ICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSBtZWFzdXJpbmcgdGhlIG1heGltdW0gd2lkdGgsIHZl
cmlmeSBlYWNoIGNvbXBvbmVudC4KLSAgICBpZiAobWF4aW11bUdseXBoV2lkdGgpIHsKLSAgICAg
ICAgKm1heGltdW1HbHlwaFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZh
bmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkpOwotICAgICAgICAqbWF4
aW11bUdseXBoV2lkdGggPSBzdGQ6Om1heCgqbWF4aW11bUdseXBoV2lkdGgsIGFkdmFuY2VXaWR0
aEZvckdseXBoKGFzc2VtYmx5RGF0YS5leHRlbnNpb24pKTsKLSAgICAgICAgKm1heGltdW1HbHlw
aFdpZHRoID0gc3RkOjptYXgoKm1heGltdW1HbHlwaFdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlw
aChhc3NlbWJseURhdGEubWlkZGxlKSk7Ci0gICAgICAgICptYXhpbXVtR2x5cGhXaWR0aCA9IHN0
ZDo6bWF4KCptYXhpbXVtR2x5cGhXaWR0aCwgYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlE
YXRhLmJvdHRvbU9yTGVmdCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2Ug
ZW5zdXJlIHRoYXQgdGhlIHNpemUgaXMgbGFyZ2UgZW5vdWdoIHRvIGF2b2lkIGdseXBoIG92ZXJs
YXBzLgotICAgIGZsb2F0IG1pblNpemUgPSBtX2lzVmVydGljYWwgPwotICAgICAgICBoZWlnaHRG
b3JHbHlwaChhc3NlbWJseURhdGEudG9wT3JSaWdodCkgKyBoZWlnaHRGb3JHbHlwaChhc3NlbWJs
eURhdGEubWlkZGxlKSArIGhlaWdodEZvckdseXBoKGFzc2VtYmx5RGF0YS5ib3R0b21PckxlZnQp
Ci0gICAgICAgIDogYWR2YW5jZVdpZHRoRm9yR2x5cGgoYXNzZW1ibHlEYXRhLmJvdHRvbU9yTGVm
dCkgKyBhZHZhbmNlV2lkdGhGb3JHbHlwaChhc3NlbWJseURhdGEubWlkZGxlKSArIGFkdmFuY2VX
aWR0aEZvckdseXBoKGFzc2VtYmx5RGF0YS50b3BPclJpZ2h0KTsKLSAgICBpZiAobWluU2l6ZSA+
IHRhcmdldFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldEdseXBoQXNzZW1ibHkoYXNz
ZW1ibHlEYXRhKTsKLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUo
KQogewogICAgIEFTU0VSVChmaXJzdENoaWxkKCkpOwogICAgIGlmICghZmlyc3RDaGlsZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0cmV0Y2hUeXBlID0gU3RyZXRjaFR5cGU6OlVuc3Ry
ZXRjaGVkOwotICAgIG1faXRhbGljQ29ycmVjdGlvbiA9IDA7CisgICAgbV9tYXRoT3BlcmF0b3Iu
dW5zdHJldGNoKCk7CisgICAgbV9tYXRoT3BlcmF0b3IubV9pdGFsaWNDb3JyZWN0aW9uID0gMDsK
ICAgICAvLyBXZSBhZGQgc3BhY2luZyBhcm91bmQgdGhlIG9wZXJhdG9yLgogICAgIC8vIEZJWE1F
OiBUaGUgc3BhY2luZyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdob2xlIGVtYmVsbGlzaGVkIG9w
ZXJhdG9yIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMxKS4K
ICAgICAvLyBGSVhNRTogVGhlIHNwYWNpbmcgc2hvdWxkIG9ubHkgYmUgYWRkZWQgaW5zaWRlIChw
ZXJoYXBzIGluZmVycmVkKSBtcm93IChodHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRl
cjMuaHRtbCNwcmVzbS5vcHNwYWNpbmcpLgpAQCAtNjI2LDI1ICszNjksMjYgQEAgdm9pZCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIGlmICghc2hvdWxkQWxsb3dTdHJl
dGNoaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIG1fbWF0aE9wZXJhdG9yLnNldE9wZXJh
dG9yKG1fdGV4dENvbnRlbnQsIG1faXNWZXJ0aWNhbCk7CiAgICAgaWYgKG1faXNWZXJ0aWNhbCAm
JiBpc0xhcmdlT3BlcmF0b3JJbkRpc3BsYXlTdHlsZSgpKQotICAgICAgICBjYWxjdWxhdGVEaXNw
bGF5U3R5bGVMYXJnZU9wZXJhdG9yKCk7CisgICAgICAgIG1fbWF0aE9wZXJhdG9yLmNhbGN1bGF0
ZURpc3BsYXlTdHlsZUxhcmdlT3BlcmF0b3Ioc3R5bGUoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IGNhbGN1bGF0ZVN0cmV0Y2h5RGF0YShudWxscHRyLCBzdHJldGNoU2l6ZSgpKTsKLSAgICAgICAg
aWYgKG1fc3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQorICAgICAgICBt
X21hdGhPcGVyYXRvci5jYWxjdWxhdGVTdHJldGNoeURhdGEoc3R5bGUoKSwgbnVsbHB0ciwgc3Ry
ZXRjaFNpemUoKSk7CisgICAgICAgIGlmICghbV9tYXRoT3BlcmF0b3IuaXNTdHJldGNoZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9pc1ZlcnRpY2FsICYmIG1f
c3RyZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7CisgICAgaWYgKG1faXNW
ZXJ0aWNhbCAmJiBtX21hdGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6
U3RyZXRjaFR5cGU6OlNpemVWYXJpYW50KSB7CiAgICAgICAgIC8vIFdlIHJlc2l6ZSB0aGUgb3Bl
cmF0b3IgdG8gbWF0Y2ggdGhlIG9uZSBvZiB0aGUgc2l6ZSB2YXJpYW50LgogICAgICAgICBpZiAo
aXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSkgewogICAgICAgICAgICAgLy8gVGhlIHN0
cmV0Y2ggc2l6ZSBpcyBhY3R1YWxseSBub3QgaW52b2x2ZWQgaW4gdGhlIHNlbGVjdGlvbiBvZiB0
aGUgc2l6ZSB2YXJpYW50IGluIGZpbmREaXNwbGF5U3R5bGVMYXJnZU9wZXJhdG9yLgogICAgICAg
ICAgICAgLy8gV2Ugc2ltcGx5IHVzZSB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgc2VsZWN0
ZWQgc2l6ZSB2YXJpYW50IGdseXBoLgotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRz
ID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlw
aEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAg
ICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsK
ICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1h
eFkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHJlc2NhbGUgdGhlIGhl
aWdodCBhbmQgZGVwdGggcHJvcG9ydGlvbmF0ZWx5LgotICAgICAgICAgICAgZmxvYXQgdmFyaWFu
dFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX3ZhcmlhbnQpOworICAgICAgICAgICAgZmxvYXQgdmFy
aWFudFNpemUgPSBoZWlnaHRGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQpOwogICAg
ICAgICAgICAgZmxvYXQgc2l6ZSA9IHN0cmV0Y2hTaXplKCk7CiAgICAgICAgICAgICBmbG9hdCBh
c3BlY3QgPSBzaXplID4gMCA/IHZhcmlhbnRTaXplIC8gc2l6ZSA6IDEuMDsKICAgICAgICAgICAg
IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKj0gYXNwZWN0OwpAQCAtNjUzLDMwICszOTcs
MzAgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlU3R5bGUoKQogICAgIH0KIAog
ICAgIGlmICghbV9pc1ZlcnRpY2FsKSB7Ci0gICAgICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0
cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkgewotICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91
bmRzID0gYm91bmRzRm9yR2x5cGgobV92YXJpYW50KTsKKyAgICAgICAgaWYgKG1fbWF0aE9wZXJh
dG9yLm1fc3RyZXRjaFR5cGUgPT0gTWF0aE9wZXJhdG9yOjpTdHJldGNoVHlwZTo6U2l6ZVZhcmlh
bnQpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCk7CiAgICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRB
Ym92ZUJhc2VsaW5lID0gLWdseXBoQm91bmRzLnkoKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSA9IGdseXBoQm91bmRzLm1heFkoKTsKLSAgICAgICAgICAgIG1fc3Ry
ZXRjaFdpZHRoID0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50KTsKLSAgICAgICAgfSBl
bHNlIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7Cisg
ICAgICAgICAgICBtX3N0cmV0Y2hXaWR0aCA9IGFkdmFuY2VXaWR0aEZvckdseXBoKG1fbWF0aE9w
ZXJhdG9yLm1fdmFyaWFudCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tYXRoT3BlcmF0b3IubV9z
dHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6OlN0cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KSB7
CiAgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHM7CiAgICAgICAgICAgICBtX3N0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gMDsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVs
b3dCYXNlbGluZSA9IDA7CiAKLSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5
cGgobV9hc3NlbWJseS5ib3R0b21PckxlZnQpOworICAgICAgICAgICAgZ2x5cGhCb3VuZHMgPSBi
b3VuZHNGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCk7CiAg
ICAgICAgICAgICBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0
VW5pdD4obV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgLWdseXBoQm91bmRzLnkoKSk7CiAg
ICAgICAgICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRV
bml0PihtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAK
LSAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS50b3BP
clJpZ2h0KTsKKyAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9tYXRo
T3BlcmF0b3IubV9hc3NlbWJseS50b3BPclJpZ2h0KTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRB
Ym92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVs
b3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKIAotICAgICAgICAgICAgZ2x5cGhCb3Vu
ZHMgPSBib3VuZHNGb3JHbHlwaChtX2Fzc2VtYmx5LmV4dGVuc2lvbik7CisgICAgICAgICAgICBn
bHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkuZXh0
ZW5zaW9uKTsKICAgICAgICAgICAgIG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6
Om1heDxMYXlvdXRVbml0PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3Vu
ZHMueSgpKTsKICAgICAgICAgICAgIG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgZ2x5cGhCb3VuZHMu
bWF4WSgpKTsKIAotICAgICAgICAgICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkg
ewotICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJs
eS5taWRkbGUpOworICAgICAgICAgICAgaWYgKG1fbWF0aE9wZXJhdG9yLm1fYXNzZW1ibHkubWlk
ZGxlLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIGdseXBoQm91bmRzID0gYm91bmRzRm9y
R2x5cGgobV9tYXRoT3BlcmF0b3IubV9hc3NlbWJseS5taWRkbGUpOwogICAgICAgICAgICAgICAg
IG1fc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihtX3N0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCAtZ2x5cGhCb3VuZHMueSgpKTsKICAgICAgICAgICAg
ICAgICBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0Piht
X3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUsIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAg
ICAgICB9CkBAIC02ODYsMjM3ICs0MzAsNTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
dXBkYXRlU3R5bGUoKQogCiBPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpmaXJz
dExpbmVCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RyZXRjaFR5cGUgIT0gU3RyZXRj
aFR5cGU6OlVuc3RyZXRjaGVkKQorICAgIGlmIChtX21hdGhPcGVyYXRvci5pc1N0cmV0Y2hlZCgp
KQogICAgICAgICByZXR1cm4gT3B0aW9uYWw8aW50PihtX3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2Vs
aW5lKTsKICAgICByZXR1cm4gUmVuZGVyTWF0aE1MVG9rZW46OmZpcnN0TGluZUJhc2VsaW5lKCk7
CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExh
eW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0
ZW50Q29tcHV0ZWRWYWx1ZXMmIGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIGlmIChtX3N0
cmV0Y2hUeXBlICE9IFN0cmV0Y2hUeXBlOjpVbnN0cmV0Y2hlZCkKKyAgICBpZiAobV9tYXRoT3Bl
cmF0b3IuaXNTdHJldGNoZWQoKSkKICAgICAgICAgbG9naWNhbEhlaWdodCA9IG1fc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUgKyBtX3N0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmU7CiAgICAgUmVu
ZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0LCBsb2dpY2FsVG9wLCBj
b21wdXRlZFZhbHVlcyk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBh
aW50R2x5cGgoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBHbHlwaERhdGEmIGRhdGEsIGNvbnN0IExh
eW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWluZyB0cmltKQotewotICAgIEZsb2F0
UmVjdCBnbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKGRhdGEpOwotCi0gICAgTGF5b3V0UmVj
dCBnbHlwaFBhaW50UmVjdChvcmlnaW4sIExheW91dFNpemUoZ2x5cGhCb3VuZHMueCgpICsgZ2x5
cGhCb3VuZHMud2lkdGgoKSwgZ2x5cGhCb3VuZHMuaGVpZ2h0KCkpKTsKLSAgICBnbHlwaFBhaW50
UmVjdC5zZXRZKG9yaWdpbi55KCkgKyBnbHlwaEJvdW5kcy55KCkpOwotCi0gICAgLy8gSW4gb3Jk
ZXIgdG8gaGF2ZSBnbHlwaHMgZml0IHNudWdseSB3aXRoIG9uZSBhbm90aGVyIHdlIHNuYXAgdGhl
IGNvbm5lY3RpbmcgZWRnZXMgdG8gcGl4ZWwgYm91bmRhcmllcwotICAgIC8vIGFuZCB0cmltIG9m
ZiBvbmUgcGl4ZWwuIFRoZSBwaXhlbCB0cmltIGlzIHRvIGFjY291bnQgZm9yIGZvbnRzIHRoYXQg
aGF2ZSBlZGdlIHBpeGVscyB0aGF0IGhhdmUgbGVzcwotICAgIC8vIHRoYW4gZnVsbCBjb3ZlcmFn
ZS4gVGhlc2UgZWRnZSBwaXhlbHMgY2FuIGludHJvZHVjZSBzbWFsbCBzZWFtcyBiZXR3ZWVuIGNv
bm5lY3RlZCBnbHlwaHMuCi0gICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0g
ICAgc3dpdGNoICh0cmltKSB7Ci0gICAgY2FzZSBUcmltVG9wOgotICAgICAgICBnbHlwaFBhaW50
UmVjdC5zaGlmdFlFZGdlVG8oZ2x5cGhQYWludFJlY3QueSgpLmNlaWwoKSArIDEpOwotICAgICAg
ICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRyaW1Cb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRSZWN0LnNoaWZ0
TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxvb3IoKSAtIDEpOwotICAgICAgICBj
bGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFRyaW1Ub3BBbmRCb3R0b206Ci0gICAgICAgIGdseXBoUGFpbnRS
ZWN0LnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC55KCkuY2VpbCgpICsgMSk7Ci0gICAgICAg
IGdseXBoUGFpbnRSZWN0LnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVjdC5tYXhZKCkuZmxv
b3IoKSAtIDEpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WUVkZ2VUbyhnbHlwaFBhaW50UmVj
dC55KCkpOwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0TWF4WUVkZ2VUbyhnbHlwaFBhaW50UmVj
dC5tYXhZKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1MZWZ0OgotICAgICAgICBn
bHlwaFBhaW50UmVjdC5zaGlmdFhFZGdlVG8oZ2x5cGhQYWludFJlY3QueCgpLmNlaWwoKSArIDEp
OwotICAgICAgICBjbGlwQm91bmRzLnNoaWZ0WEVkZ2VUbyhnbHlwaFBhaW50UmVjdC54KCkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyaW1SaWdodDoKLSAgICAgICAgZ2x5cGhQYWludFJl
Y3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKS5mbG9vcigpIC0gMSk7Ci0g
ICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1heFgoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJpbUxlZnRBbmRSaWdodDoKLSAgICAgICAgZ2x5
cGhQYWludFJlY3Quc2hpZnRYRWRnZVRvKGdseXBoUGFpbnRSZWN0LngoKS5jZWlsKCkgKyAxKTsK
LSAgICAgICAgZ2x5cGhQYWludFJlY3Quc2hpZnRNYXhYRWRnZVRvKGdseXBoUGFpbnRSZWN0Lm1h
eFgoKS5mbG9vcigpIC0gMSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRYRWRnZVRvKGdseXBo
UGFpbnRSZWN0LngoKSk7Ci0gICAgICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKGdseXBo
UGFpbnRSZWN0Lm1heFgoKSk7Ci0gICAgfQotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGVuY2xvc2lu
ZyBJbnRSZWN0IGF2b2lkcyBhbnkgcG90ZW50aWFsIGlzc3VlcyBhdCBqb2luZWQgZWRnZXMuCi0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGluZm8uY29udGV4dCgpKTsK
LSAgICBpbmZvLmNvbnRleHQoKS5jbGlwKGNsaXBCb3VuZHMpOwotCi0gICAgR2x5cGhCdWZmZXIg
YnVmZmVyOwotICAgIGJ1ZmZlci5hZGQoZGF0YS5nbHlwaCwgZGF0YS5mb250LCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChkYXRhKSk7Ci0gICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgp
LmZvbnRDYXNjYWRlKCksICpkYXRhLmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3JpZ2luKTsKLQotICAg
IHJldHVybiBnbHlwaFBhaW50UmVjdDsKLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
ZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0bykKLXsKLSAgICBBU1NFUlQobV9p
c1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6R2x5
cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5zaW9uLmlzVmFsaWQoKSk7
Ci0gICAgQVNTRVJUKGZyb20ueSgpIDw9IHRvLnkoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBu
byBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZy4KLSAgICBpZiAoZnJvbS55KCkgPT0gdG8ueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwot
Ci0gICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgobV9hc3NlbWJseS5l
eHRlbnNpb24pOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJlIGFs
bG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAgICAv
LyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBvdmVy
ZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAgICBM
YXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlmdFlF
ZGdlVG8oZnJvbS55KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhZRWRnZVRvKHRvLnkoKSk7
Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1taW5n
IG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGV4dGVuZGVy
IGdseXBoLCBzbyB3ZSBtb3ZlIGl0IHVwIGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQgb2Zmc2V0
VG9HbHlwaFRvcCA9IGdseXBoQm91bmRzLnkoKSArIDI7Ci0gICAgTGF5b3V0UG9pbnQgZ2x5cGhP
cmlnaW4gPSBMYXlvdXRQb2ludChmcm9tLngoKSwgZnJvbS55KCkgLSBvZmZzZXRUb0dseXBoVG9w
KTsKLSAgICBGbG9hdFJlY3QgbGFzdFBhaW50ZWRHbHlwaFJlY3QoZnJvbSwgRmxvYXRTaXplKCkp
OwotCi0gICAgd2hpbGUgKGxhc3RQYWludGVkR2x5cGhSZWN0Lm1heFkoKSA8IHRvLnkoKSkgewot
ICAgICAgICBsYXN0UGFpbnRlZEdseXBoUmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJs
eS5leHRlbnNpb24sIGdseXBoT3JpZ2luLCBUcmltVG9wQW5kQm90dG9tKTsKLSAgICAgICAgZ2x5
cGhPcmlnaW4uc2V0WShnbHlwaE9yaWdpbi55KCkgKyBsYXN0UGFpbnRlZEdseXBoUmVjdC5oZWln
aHQoKSk7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNp
emUgaXMgc21hbGwgZW5vdWdoIHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4g
ZW1wdHkgcmVjdGFuZ2xlCi0gICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3
ZSBqdXN0IGRyYXcgbm90aGluZy4KLSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6ZmlsbFdpdGhIb3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKQotewot
ICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlwZSA9PSBT
dHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuZXh0ZW5z
aW9uLmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKGZyb20ueCgpIDw9IHRvLngoKSk7Ci0KLSAgICAv
LyBJZiB0aGVyZSBpcyBubyBzcGFjZSBmb3IgdGhlIGV4dGVuc2lvbiBnbHlwaCwgd2UgZG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoZnJvbS54KCkgPT0gdG8ueCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5m
by5jb250ZXh0KCkpOwotCi0gICAgLy8gQ2xpcHBpbmcgdGhlIGV4dGVuZGVyIHJlZ2lvbiBoZXJl
IGFsbG93cyB1cyB0byBkcmF3IHRoZSBib3R0b20gZXh0ZW5kZXIgZ2x5cGggaW50byB0aGUKLSAg
ICAvLyByZWdpb25zIG9mIHRoZSBib3R0b20gZ2x5cGggd2l0aG91dCB3b3JyeWluZyBhYm91dCBv
dmVyZHJhdyAoaGFpcnkgcGl4ZWxzKSBhbmQgc2ltcGxpZmllcyBsYXRlciBjbGlwcGluZy4KLSAg
ICBMYXlvdXRSZWN0IGNsaXBCb3VuZHMgPSBpbmZvLnJlY3Q7Ci0gICAgY2xpcEJvdW5kcy5zaGlm
dFhFZGdlVG8oZnJvbS54KCkpOwotICAgIGNsaXBCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHRvLngo
KSk7Ci0gICAgaW5mby5jb250ZXh0KCkuY2xpcChjbGlwQm91bmRzKTsKLQotICAgIC8vIFRyaW1t
aW5nIG1heSByZW1vdmUgdXAgdG8gdHdvIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBleHRl
bmRlciBnbHlwaCwgc28gd2UgbW92ZSBpdCBsZWZ0IGJ5IHR3byBwaXhlbHMuCi0gICAgZmxvYXQg
b2Zmc2V0VG9HbHlwaExlZnQgPSAtMjsKLSAgICBMYXlvdXRQb2ludCBnbHlwaE9yaWdpbiA9IExh
eW91dFBvaW50KGZyb20ueCgpICsgb2Zmc2V0VG9HbHlwaExlZnQsIHN0ZDo6bWluKGZyb20ueSgp
LCB0by55KCkpICsgbV9zdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSk7Ci0gICAgRmxvYXRSZWN0
IGxhc3RQYWludGVkR2x5cGhSZWN0KGZyb20sIEZsb2F0U2l6ZSgpKTsKLQotICAgIHdoaWxlIChs
YXN0UGFpbnRlZEdseXBoUmVjdC5tYXhYKCkgPCB0by54KCkpIHsKLSAgICAgICAgbGFzdFBhaW50
ZWRHbHlwaFJlY3QgPSBwYWludEdseXBoKGluZm8sIG1fYXNzZW1ibHkuZXh0ZW5zaW9uLCBnbHlw
aE9yaWdpbiwgVHJpbUxlZnRBbmRSaWdodCk7Ci0gICAgICAgIGdseXBoT3JpZ2luLnNldFgoZ2x5
cGhPcmlnaW4ueCgpICsgbGFzdFBhaW50ZWRHbHlwaFJlY3Qud2lkdGgoKSk7Ci0KLSAgICAgICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHRoZSBmb250IHNpemUgaXMgc21hbGwgZW5vdWdo
IHRoZSBnbHVlIGdseXBoIGhhcyBiZWVuIHJlZHVjZWQgdG8gYW4gZW1wdHkgcmVjdGFuZ2xlCi0g
ICAgICAgIC8vIHdpdGggdHJpbW1pbmcuIEluIHRoYXQgY2FzZSB3ZSBqdXN0IGRyYXcgbm90aGlu
Zy4KLSAgICAgICAgaWYgKGxhc3RQYWludGVkR2x5cGhSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6cGFpbnQo
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAg
UmVuZGVyTWF0aE1MVG9rZW46OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKIAotICAgIGlmIChp
bmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IG1fc3Ry
ZXRjaFR5cGUgPT0gU3RyZXRjaFR5cGU6OlVuc3RyZXRjaGVkKQorICAgIGlmIChpbmZvLmNvbnRl
eHQoKS5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdy
b3VuZCB8fCBzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8ICFtX21hdGhPcGVyYXRv
ci5pc1N0cmV0Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoaW5mby5jb250ZXh0KCkpOwogICAgIGluZm8uY29udGV4dCgp
LnNldEZpbGxDb2xvcihzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSk7CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6U2l6ZVZhcmlh
bnQpIHsKLSAgICAgICAgQVNTRVJUKG1fdmFyaWFudC5pc1ZhbGlkKCkpOworICAgIGlmIChtX21h
dGhPcGVyYXRvci5tX3N0cmV0Y2hUeXBlID09IE1hdGhPcGVyYXRvcjo6U3RyZXRjaFR5cGU6OlNp
emVWYXJpYW50KSB7CisgICAgICAgIEFTU0VSVChtX21hdGhPcGVyYXRvci5tX3ZhcmlhbnQuaXNW
YWxpZCgpKTsKICAgICAgICAgR2x5cGhCdWZmZXIgYnVmZmVyOwotICAgICAgICBidWZmZXIuYWRk
KG1fdmFyaWFudC5nbHlwaCwgbV92YXJpYW50LmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBoKG1f
dmFyaWFudCkpOworICAgICAgICBidWZmZXIuYWRkKG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudC5n
bHlwaCwgbV9tYXRoT3BlcmF0b3IubV92YXJpYW50LmZvbnQsIGFkdmFuY2VXaWR0aEZvckdseXBo
KG1fbWF0aE9wZXJhdG9yLm1fdmFyaWFudCkpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRv
clRvcExlZnQgPSBjZWlsZWRJbnRQb2ludChwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwotICAg
ICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX3ZhcmlhbnQpOwor
ICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBib3VuZHNGb3JHbHlwaChtX21hdGhPcGVy
YXRvci5tX3ZhcmlhbnQpOwogICAgICAgICBMYXlvdXRQb2ludCBvcGVyYXRvck9yaWdpbihvcGVy
YXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gZ2x5cGhCb3VuZHMueSgpKTsK
LSAgICAgICAgaW5mby5jb250ZXh0KCkuZHJhd0dseXBocyhzdHlsZSgpLmZvbnRDYXNjYWRlKCks
ICptX3ZhcmlhbnQuZm9udCwgYnVmZmVyLCAwLCAxLCBvcGVyYXRvck9yaWdpbik7CisgICAgICAg
IGluZm8uY29udGV4dCgpLmRyYXdHbHlwaHMoc3R5bGUoKS5mb250Q2FzY2FkZSgpLCAqbV9tYXRo
T3BlcmF0b3IubV92YXJpYW50LmZvbnQsIGJ1ZmZlciwgMCwgMSwgb3BlcmF0b3JPcmlnaW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faXNWZXJ0aWNhbCkKLSAgICAgICAg
cGFpbnRWZXJ0aWNhbEdseXBoQXNzZW1ibHkoaW5mbywgcGFpbnRPZmZzZXQpOwotICAgIGVsc2UK
LSAgICAgICAgcGFpbnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShpbmZvLCBwYWludE9mZnNldCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnBhaW50VmVydGljYWxHbHlwaEFzc2Vt
Ymx5KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewot
ICAgIEFTU0VSVChtX2lzVmVydGljYWwpOwotICAgIEFTU0VSVChtX3N0cmV0Y2hUeXBlID09IFN0
cmV0Y2hUeXBlOjpHbHlwaEFzc2VtYmx5KTsKLSAgICBBU1NFUlQobV9hc3NlbWJseS50b3BPclJp
Z2h0LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkuYm90dG9tT3JMZWZ0LmlzVmFs
aWQoKSk7Ci0KLSAgICAvLyBXZSBhcmUgcG9zaXRpb25pbmcgdGhlIGdseXBocyBzbyB0aGF0IHRo
ZSBlZGdlIG9mIHRoZSB0aWdodCBnbHlwaCBib3VuZHMgbGluZSB1cCBleGFjdGx5IHdpdGggdGhl
IGVkZ2VzIG9mIG91ciBwYWludCBib3guCisgICAgbV9tYXRoT3BlcmF0b3IubV9hc2NlbnQgPSBt
X3N0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lOworICAgIG1fbWF0aE9wZXJhdG9yLm1fZGVzY2Vu
dCA9IG1fc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZTsKKyAgICBtX21hdGhPcGVyYXRvci5tX3dp
ZHRoID0gbG9naWNhbFdpZHRoKCk7CiAgICAgTGF5b3V0UG9pbnQgb3BlcmF0b3JUb3BMZWZ0ID0g
cGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIG9wZXJhdG9yVG9wTGVmdC5tb3ZlKHN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZWFkaW5nU3BhY2UgOiBtX3RyYWlsaW5n
U3BhY2UsIDApOwotICAgIG9wZXJhdG9yVG9wTGVmdCA9IGNlaWxlZEludFBvaW50KG9wZXJhdG9y
VG9wTGVmdCk7Ci0gICAgRmxvYXRSZWN0IHRvcEdseXBoQm91bmRzID0gYm91bmRzRm9yR2x5cGgo
bV9hc3NlbWJseS50b3BPclJpZ2h0KTsKLSAgICBMYXlvdXRQb2ludCB0b3BHbHlwaE9yaWdpbihv
cGVyYXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpIC0gdG9wR2x5cGhCb3VuZHMu
eSgpKTsKLSAgICBMYXlvdXRSZWN0IHRvcEdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZv
LCBtX2Fzc2VtYmx5LnRvcE9yUmlnaHQsIHRvcEdseXBoT3JpZ2luLCBUcmltQm90dG9tKTsKLQot
ICAgIEZsb2F0UmVjdCBib3R0b21HbHlwaEJvdW5kcyA9IGJvdW5kc0ZvckdseXBoKG1fYXNzZW1i
bHkuYm90dG9tT3JMZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBib3R0b21HbHlwaE9yaWdpbihvcGVy
YXRvclRvcExlZnQueCgpLCBvcGVyYXRvclRvcExlZnQueSgpICsgb2Zmc2V0SGVpZ2h0KCkgLSAo
Ym90dG9tR2x5cGhCb3VuZHMuaGVpZ2h0KCkgKyBib3R0b21HbHlwaEJvdW5kcy55KCkpKTsKLSAg
ICBMYXlvdXRSZWN0IGJvdHRvbUdseXBoUGFpbnRSZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fz
c2VtYmx5LmJvdHRvbU9yTGVmdCwgYm90dG9tR2x5cGhPcmlnaW4sIFRyaW1Ub3ApOwotCi0gICAg
aWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhl
IGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBhaW50IGV4dGVu
dHMuIFRoZW4gc2hpZnQgaXQgaGFsZiB0aGUgcGFpbnQgaGVpZ2h0IHRvd2FyZCB0aGUgYm90dG9t
IGdseXBoLgotICAgICAgICBGbG9hdFJlY3QgbWlkZGxlR2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSk7Ci0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBo
T3JpZ2luKG9wZXJhdG9yVG9wTGVmdC54KCksIHRvcEdseXBoT3JpZ2luLnkoKSk7Ci0gICAgICAg
IG1pZGRsZUdseXBoT3JpZ2luLm1vdmVCeShMYXlvdXRQb2ludCgwLCAoYm90dG9tR2x5cGhQYWlu
dFJlY3QueSgpIC0gdG9wR2x5cGhQYWludFJlY3QubWF4WSgpKSAvIDIuMCkpOwotICAgICAgICBt
aWRkbGVHbHlwaE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoMCwgbWlkZGxlR2x5cGhCb3VuZHMu
aGVpZ2h0KCkgLyAyLjApKTsKLQotICAgICAgICBMYXlvdXRSZWN0IG1pZGRsZUdseXBoUGFpbnRS
ZWN0ID0gcGFpbnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5Lm1pZGRsZSwgbWlkZGxlR2x5cGhPcmln
aW4sIFRyaW1Ub3BBbmRCb3R0b20pOwotICAgICAgICBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9u
R2x5cGgoaW5mbywgdG9wR2x5cGhQYWludFJlY3QubWluWE1heFlDb3JuZXIoKSwgbWlkZGxlR2x5
cGhQYWludFJlY3QubWluWE1pbllDb3JuZXIoKSk7Ci0gICAgICAgIGZpbGxXaXRoVmVydGljYWxF
eHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50UmVjdC5taW5YTWF4WUNvcm5lcigp
LCBib3R0b21HbHlwaFBhaW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZmlsbFdpdGhWZXJ0aWNhbEV4dGVuc2lvbkdseXBoKGluZm8sIHRvcEdseXBoUGFpbnRS
ZWN0Lm1pblhNYXhZQ29ybmVyKCksIGJvdHRvbUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkpOwotfQotCi12b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludEhvcml6b250YWxHbHlw
aEFzc2VtYmx5KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQotewotICAgIEFTU0VSVCghbV9pc1ZlcnRpY2FsKTsKLSAgICBBU1NFUlQobV9zdHJldGNoVHlw
ZSA9PSBTdHJldGNoVHlwZTo6R2x5cGhBc3NlbWJseSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHku
Ym90dG9tT3JMZWZ0LmlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1fYXNzZW1ibHkudG9wT3JSaWdo
dC5pc1ZhbGlkKCkpOwotCi0gICAgLy8gV2UgYXJlIHBvc2l0aW9uaW5nIHRoZSBnbHlwaHMgc28g
dGhhdCB0aGUgZWRnZSBvZiB0aGUgdGlnaHQgZ2x5cGggYm91bmRzIGxpbmUgdXAgZXhhY3RseSB3
aXRoIHRoZSBlZGdlcyBvZiBvdXIgcGFpbnQgYm94LgotICAgIExheW91dFBvaW50IG9wZXJhdG9y
VG9wTGVmdCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKLSAgICBvcGVyYXRvclRvcExlZnQu
bW92ZShtX2xlYWRpbmdTcGFjZSwgMCk7Ci0gICAgb3BlcmF0b3JUb3BMZWZ0ID0gY2VpbGVkSW50
UG9pbnQob3BlcmF0b3JUb3BMZWZ0KTsKLSAgICBMYXlvdXRQb2ludCBsZWZ0R2x5cGhPcmlnaW4o
b3BlcmF0b3JUb3BMZWZ0LngoKSwgb3BlcmF0b3JUb3BMZWZ0LnkoKSArIG1fc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUpOwotICAgIExheW91dFJlY3QgbGVmdEdseXBoUGFpbnRSZWN0ID0gcGFp
bnRHbHlwaChpbmZvLCBtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCwgbGVmdEdseXBoT3JpZ2luLCBU
cmltUmlnaHQpOwotCi0gICAgRmxvYXRSZWN0IHJpZ2h0R2x5cGhCb3VuZHMgPSBib3VuZHNGb3JH
bHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQpOwotICAgIExheW91dFBvaW50IHJpZ2h0R2x5cGhP
cmlnaW4ob3BlcmF0b3JUb3BMZWZ0LngoKSArIG9mZnNldFdpZHRoKCkgLSByaWdodEdseXBoQm91
bmRzLndpZHRoKCksIG9wZXJhdG9yVG9wTGVmdC55KCkgKyBtX3N0cmV0Y2hIZWlnaHRBYm92ZUJh
c2VsaW5lKTsKLSAgICBMYXlvdXRSZWN0IHJpZ2h0R2x5cGhQYWludFJlY3QgPSBwYWludEdseXBo
KGluZm8sIG1fYXNzZW1ibHkudG9wT3JSaWdodCwgcmlnaHRHbHlwaE9yaWdpbiwgVHJpbUxlZnQp
OwotCi0gICAgaWYgKG1fYXNzZW1ibHkubWlkZGxlLmlzVmFsaWQoKSkgewotICAgICAgICAvLyBD
ZW50ZXIgdGhlIGdseXBoIG9yaWdpbiBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIGdseXBoIHBh
aW50IGV4dGVudHMuCi0gICAgICAgIExheW91dFBvaW50IG1pZGRsZUdseXBoT3JpZ2luKG9wZXJh
dG9yVG9wTGVmdC54KCksIGxlZnRHbHlwaE9yaWdpbi55KCkpOwotICAgICAgICBtaWRkbGVHbHlw
aE9yaWdpbi5tb3ZlQnkoTGF5b3V0UG9pbnQoKHJpZ2h0R2x5cGhQYWludFJlY3QueCgpIC0gbGVm
dEdseXBoUGFpbnRSZWN0Lm1heFgoKSkgLyAyLjAsIDApKTsKLSAgICAgICAgTGF5b3V0UmVjdCBt
aWRkbGVHbHlwaFBhaW50UmVjdCA9IHBhaW50R2x5cGgoaW5mbywgbV9hc3NlbWJseS5taWRkbGUs
IG1pZGRsZUdseXBoT3JpZ2luLCBUcmltTGVmdEFuZFJpZ2h0KTsKLSAgICAgICAgZmlsbFdpdGhI
b3Jpem9udGFsRXh0ZW5zaW9uR2x5cGgoaW5mbywgbGVmdEdseXBoUGFpbnRSZWN0Lm1heFhNaW5Z
Q29ybmVyKCksIG1pZGRsZUdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpOwotICAgICAg
ICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChpbmZvLCBtaWRkbGVHbHlwaFBhaW50
UmVjdC5tYXhYTWluWUNvcm5lcigpLCByaWdodEdseXBoUGFpbnRSZWN0Lm1pblhNaW5ZQ29ybmVy
KCkpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlw
aChpbmZvLCBsZWZ0R2x5cGhQYWludFJlY3QubWF4WE1pbllDb3JuZXIoKSwgcmlnaHRHbHlwaFBh
aW50UmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBpZiAobV9pc1ZlcnRpY2FsKQorICAgICAg
ICBtX21hdGhPcGVyYXRvci5wYWludFZlcnRpY2FsR2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZv
LCBvcGVyYXRvclRvcExlZnQpOworICAgIGVsc2UKKyAgICAgICAgbV9tYXRoT3BlcmF0b3IucGFp
bnRIb3Jpem9udGFsR2x5cGhBc3NlbWJseShzdHlsZSgpLCBpbmZvLCBvcGVyYXRvclRvcExlZnQp
OwogfQogCiB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpwYWludENoaWxkcmVuKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYg
cGFpbnRJbmZvRm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQogewogICAgIC8vIFdlIHNraXAg
cGFpbnRpbmcgZm9yIGludmlzaWJsZSBvcGVyYXRvcnMgdG9vIHRvIGF2b2lkIHNvbWUgIm1pc3Np
bmcgY2hhcmFjdGVyIiBnbHlwaCB0byBhcHBlYXIgaWYgYXBwcm9wcmlhdGUgbWF0aCBmb250cyBh
cmUgbm90IGF2YWlsYWJsZS4KLSAgICBpZiAobV9zdHJldGNoVHlwZSAhPSBTdHJldGNoVHlwZTo6
VW5zdHJldGNoZWQgfHwgaXNJbnZpc2libGVPcGVyYXRvcigpKQorICAgIGlmIChtX21hdGhPcGVy
YXRvci5pc1N0cmV0Y2hlZCgpIHx8IGlzSW52aXNpYmxlT3BlcmF0b3IoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIFJlbmRlck1hdGhNTFRva2VuOjpwYWludENoaWxkcmVuKHBhaW50SW5mbywgcGFp
bnRPZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJlY3QpOwogfQpAQCAtOTMxLDE5
ICs0OTIsMTkgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dHJhaWxpbmdTcGFj
ZUVycm9yKCkKICAgICAvLyBIZW5jZSB3ZSBkZXRlcm1pbmUgdGhlIGVycm9yIGluIHRoZSBsb2dp
Y2FsIHdpZHRoIHdpdGggcmVzcGVjdCB0byB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBnbHlwaChz
KSB1c2VkIHRvIHBhaW50IHRoZSBvcGVyYXRvci4KICAgICBMYXlvdXRVbml0IHdpZHRoID0gbG9n
aWNhbFdpZHRoKCk7CiAKLSAgICBpZiAobV9zdHJldGNoVHlwZSA9PSBTdHJldGNoVHlwZTo6VW5z
dHJldGNoZWQpIHsKKyAgICBpZiAoIW1fbWF0aE9wZXJhdG9yLmlzU3RyZXRjaGVkKCkpIHsKICAg
ICAgICAgR2x5cGhEYXRhIGRhdGEgPSBzdHlsZSgpLmZvbnRDYXNjYWRlKCkuZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKHRleHRDb250ZW50KCksICFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSk7CiAgICAgICAgIHJldHVybiB3aWR0aCAtIGFkdmFuY2VXaWR0aEZvckdseXBoKGRhdGEpOwog
ICAgIH0KIAotICAgIGlmIChtX3N0cmV0Y2hUeXBlID09IFN0cmV0Y2hUeXBlOjpTaXplVmFyaWFu
dCkKLSAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5jZVdpZHRoRm9yR2x5cGgobV92YXJpYW50
KTsKKyAgICBpZiAobV9tYXRoT3BlcmF0b3IubV9zdHJldGNoVHlwZSA9PSBNYXRoT3BlcmF0b3I6
OlN0cmV0Y2hUeXBlOjpTaXplVmFyaWFudCkKKyAgICAgICAgcmV0dXJuIHdpZHRoIC0gYWR2YW5j
ZVdpZHRoRm9yR2x5cGgobV9tYXRoT3BlcmF0b3IubV92YXJpYW50KTsKIAotICAgIGZsb2F0IGFz
c2VtYmx5V2lkdGggPSBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5LnRvcE9yUmlnaHQp
OwotICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChtX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCkpOwotICAgIGFzc2VtYmx5V2lkdGgg
PSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX2Fzc2VtYmx5
LmV4dGVuc2lvbikpOwotICAgIGlmIChtX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCi0gICAg
ICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhG
b3JHbHlwaChtX2Fzc2VtYmx5Lm1pZGRsZSkpOworICAgIGZsb2F0IGFzc2VtYmx5V2lkdGggPSBh
ZHZhbmNlV2lkdGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LnRvcE9yUmlnaHQp
OworICAgIGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lk
dGhGb3JHbHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmJvdHRvbU9yTGVmdCkpOworICAg
IGFzc2VtYmx5V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JH
bHlwaChtX21hdGhPcGVyYXRvci5tX2Fzc2VtYmx5LmV4dGVuc2lvbikpOworICAgIGlmIChtX21h
dGhPcGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZS5pc1ZhbGlkKCkpCisgICAgICAgIGFzc2VtYmx5
V2lkdGggPSBzdGQ6Om1heChhc3NlbWJseVdpZHRoLCBhZHZhbmNlV2lkdGhGb3JHbHlwaChtX21h
dGhPcGVyYXRvci5tX2Fzc2VtYmx5Lm1pZGRsZSkpOwogICAgIHJldHVybiB3aWR0aCAtIGFzc2Vt
Ymx5V2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaAppbmRleCBkY2E0NTQxLi42MzIxNDljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCiAjaW5jbHVk
ZSAiTWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeS5o
IgorI2luY2x1ZGUgIk1hdGhPcGVyYXRvci5oIgogI2luY2x1ZGUgIk9wZW5UeXBlTWF0aERhdGEu
aCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxUb2tlbi5oIgogCkBAIC01MSw3ICs1Miw3IEBAIHB1
YmxpYzoKICAgICAvLyBGSVhNRTogVGhlIGRpc3BsYXlzdHlsZSBwcm9wZXJ0eSBpcyBub3QgaW1w
bGVtZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg3Mzcp
LgogICAgIGJvb2wgaXNMYXJnZU9wZXJhdG9ySW5EaXNwbGF5U3R5bGUoKSBjb25zdCB7IHJldHVy
biAhaGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHkpICYm
IGhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkxhcmdlT3ApOyB9CiAg
ICAgYm9vbCBpc1ZlcnRpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlcnRpY2FsOyB9Ci0gICAg
TGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pdGFsaWNDb3Jy
ZWN0aW9uOyB9CisgICAgTGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXRoT3BlcmF0b3IuaXRhbGljQ29ycmVjdGlvbigpOyB9CiAKICAgICB2b2lkIHN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBm
aW5hbDsKICAgICB2b2lkIHVwZGF0ZVN0eWxlKCkgZmluYWw7CkBAIC03MywyMCArNzQsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgVUNoYXIgdGV4dENvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX3RleHRD
b250ZW50OyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IEdseXBoQXNzZW1ibHlEYXRhIHsKLSAg
ICAgICAgR2x5cGhEYXRhIHRvcE9yUmlnaHQ7Ci0gICAgICAgIEdseXBoRGF0YSBleHRlbnNpb247
Ci0gICAgICAgIEdseXBoRGF0YSBib3R0b21PckxlZnQ7Ci0gICAgICAgIEdseXBoRGF0YSBtaWRk
bGU7Ci0gICAgfTsKLSAgICBlbnVtIGNsYXNzIFN0cmV0Y2hUeXBlIHsgVW5zdHJldGNoZWQsIFNp
emVWYXJpYW50LCBHbHlwaEFzc2VtYmx5IH07Ci0gICAgU3RyZXRjaFR5cGUgbV9zdHJldGNoVHlw
ZTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIEdseXBoRGF0YSBtX3ZhcmlhbnQ7Ci0gICAgICAgIEds
eXBoQXNzZW1ibHlEYXRhIG1fYXNzZW1ibHk7Ci0gICAgfTsKLSAgICBMYXlvdXRVbml0IG1faXRh
bGljQ29ycmVjdGlvbjsKLQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTE9wZXJhdG9yIChhbm9u
eW1vdXMpIiA6ICJSZW5kZXJNYXRoTUxPcGVyYXRvciI7IH0KICAgICB2b2lkIHBhaW50Q2hpbGRy
ZW4oUGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5mbyYgZm9y
Q2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KSBmaW5hbDsKICAgICBib29sIGlzUmVuZGVyTWF0aE1M
T3BlcmF0b3IoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDAsMjcgKzg3LDYg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2hvdWxkQWxsb3dTdHJldGNoaW5nKCkgY29uc3Q7CiAK
LSAgICBib29sIGdldEJhc2VHbHlwaChjb25zdCBSZW5kZXJTdHlsZSYsIEdseXBoRGF0YSYpIGNv
bnN0OwotICAgIHZvaWQgc2V0U2l6ZVZhcmlhbnQoY29uc3QgR2x5cGhEYXRhJik7Ci0gICAgdm9p
ZCBzZXRHbHlwaEFzc2VtYmx5KGNvbnN0IEdseXBoQXNzZW1ibHlEYXRhJik7Ci0gICAgYm9vbCBj
YWxjdWxhdGVHbHlwaEFzc2VtYmx5RmFsbEJhY2soY29uc3QgVmVjdG9yPE9wZW5UeXBlTWF0aERh
dGE6OkFzc2VtYmx5UGFydD4mLCBHbHlwaEFzc2VtYmx5RGF0YSYpIGNvbnN0OwotICAgIHZvaWQg
Y2FsY3VsYXRlRGlzcGxheVN0eWxlTGFyZ2VPcGVyYXRvcigpOwotICAgIHZvaWQgY2FsY3VsYXRl
U3RyZXRjaHlEYXRhKGZsb2F0KiBtYXhpbXVtR2x5cGhXaWR0aCwgTGF5b3V0VW5pdCB0YXJnZXRT
aXplID0gMCk7Ci0KLSAgICBlbnVtIEdseXBoUGFpbnRUcmltbWluZyB7Ci0gICAgICAgIFRyaW1U
b3AsCi0gICAgICAgIFRyaW1Cb3R0b20sCi0gICAgICAgIFRyaW1Ub3BBbmRCb3R0b20sCi0gICAg
ICAgIFRyaW1MZWZ0LAotICAgICAgICBUcmltUmlnaHQsCi0gICAgICAgIFRyaW1MZWZ0QW5kUmln
aHQKLSAgICB9OwotCi0gICAgTGF5b3V0UmVjdCBwYWludEdseXBoKFBhaW50SW5mbyYsIGNvbnN0
IEdseXBoRGF0YSYsIGNvbnN0IExheW91dFBvaW50JiBvcmlnaW4sIEdseXBoUGFpbnRUcmltbWlu
Zyk7Ci0gICAgdm9pZCBmaWxsV2l0aFZlcnRpY2FsRXh0ZW5zaW9uR2x5cGgoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmIGZyb20sIGNvbnN0IExheW91dFBvaW50JiB0byk7Ci0gICAgdm9p
ZCBmaWxsV2l0aEhvcml6b250YWxFeHRlbnNpb25HbHlwaChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYgZnJvbSwgY29uc3QgTGF5b3V0UG9pbnQmIHRvKTsKLSAgICB2b2lkIHBhaW50VmVy
dGljYWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAg
dm9pZCBwYWludEhvcml6b250YWxHbHlwaEFzc2VtYmx5KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAgICAgdm9pZCBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlKE1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6RmxhZywgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQg
c2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJpYnV0ZVZhbHVlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6RmxhZywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgdm9pZCBz
ZXRPcGVyYXRvclByb3BlcnRpZXNGcm9tT3BEaWN0RW50cnkoY29uc3QgTWF0aE1MT3BlcmF0b3JE
aWN0aW9uYXJ5OjpFbnRyeSopOwpAQCAtMTM3LDYgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgTGF5
b3V0VW5pdCBtX3RyYWlsaW5nU3BhY2U7CiAgICAgTGF5b3V0VW5pdCBtX21pblNpemU7CiAgICAg
TGF5b3V0VW5pdCBtX21heFNpemU7CisgICAgTWF0aE9wZXJhdG9yIG1fbWF0aE9wZXJhdG9yOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMi44LjEKCg==
</data>
<flag name="review"
          id="304675"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>